Prøv det her:
http://members.xoom.com/_XMCM/helpfile/components/neighborhood/Neighborhood.zipDu skal rette følgende i koden:
procedure TForm1.btnPrevClick(Sender: TObject);
begin
Neighborhood1.PreviousComputer;
lblName.Caption := Neighborhood1.GetComputerName;
GetShare;
end;
procedure TForm1.btnFirstClick(Sender: TObject);
begin
Neighborhood1.ResetComputer;
lblName.Caption := Neighborhood1.GetComputerName;
GetShare;
end;
Casper
Ellers så kan du lave et serverprogram der kører på en fast computer og en klient der \"logger\" på din server. Derefter sender serveren så til de klienter der er logget på, en liste med dem der er på netværket.
For at få det til at du skal du altså have en \"server\" på f.eks 192.168.1.1, når dine maskiner(klienter) på netværket så starter op, starter programmet der sender en besked til serveren og modtager så listen fra serveren.
Interesseret? så burde der falde flere point af! det er trods alt et helt program. :)
Casper
sæt en TreeView kontrol og et memofelt på en form. Giv formen et onClick event og dit TreeView et OnClick event.
Så skulle det følgende kode løse problemet for dig :
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ComCtrls, WinSock;
type
TForm1 = class(TForm)
TreeView: TTreeView;
Memo1: TMemo;
procedure TreeViewClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
const InitialSize = $1; // Any positive value is acceptable.
type
TNetEnumThread = class(TThread)
ChildNode: PChar;
TreeNode: TTreeNode;
procedure AddChildNode;
procedure Execute; override;
procedure LoadNetNode(NodeName: PChar; NetNode: PNetResourceA);
end;
procedure TNetEnumThread.Execute;
begin
TreeNode:=nil;
LoadNetNode(nil,nil);
end;
procedure TNetEnumThread.AddChildNode;
begin
TreeNode:=Form1.TreeView.Items.AddChild(TreeNode,StrPas(ChildNode));
end;
procedure TNetEnumThread.LoadNetNode(NodeName: PChar; NetNode: PNetResourceA);
var hEnum : THandle;
Count,BufSize: DWORD;
NR,Buf: PNetResourceA;
R: Integer;
CurrentNode: TTreeNode;
begin
R:=WNetOpenEnum(RESOURCE_GLOBALNET,RESOURCETYPE_ANY,0,NetNode,hEnum);
if R <> NO_ERROR then
exit;
BufSize:=InitialSize;
GetMem(Buf,BufSize);
try
while True do
begin
Count:=$FFFFFFFF; // I wish to read ALL items
R:=WNetEnumResource(hEnum,Count, Buf, BufSize);
if R = ERROR_MORE_DATA then // Oops ! The InitialSize is too small !
begin
Count:=$FFFFFFFF; // I wish to read ALL items
FreeMem(Buf);
GetMem(Buf,BufSize);
R:=WNetEnumResource(hEnum,Count, Buf, BufSize);
end;
if R = ERROR_NO_MORE_ITEMS then
Break; // All items are processed
if R <> NO_ERROR then
Abort; // R is the error code. Process it!
NR:=Buf;
while Count > 0 do
begin
CurrentNode:=TreeNode;
ChildNode:=NR.lpRemoteName;
Synchronize(AddChildNode);
LoadNetNode(ChildNode, NR);
TreeNode:=CurrentNode;
inc(NR);
dec(Count);
count := 0;
end;
end;
finally
WNetCloseEnum(hEnum);
FreeMem(Buf);
end;
end;
procedure TForm1.TreeViewClick(Sender: TObject);
function GetIP (Buffer : PChar): string;
type
TaPInAddr = array [0..10] of PInAddr;
PaPInAddr = ^TaPInAddr;
var
phe : PHostEnt;
pptr : PaPInAddr;
// Buffer : array [0..63] of char;
I : Integer;
GInitData : TWSADATA;
begin
WSAStartup($101, GInitData);
Result := \'\';
GetHostName(Buffer, strlen(Buffer));
phe :=GetHostByName(buffer);
if phe = nil then
Exit;
pptr := PaPInAddr(Phe^.h_addr_list);
I := 0;
while pptr^[I] <> nil do
begin
result:=StrPas(inet_ntoa(pptr^[I]^));
result := StrPas(inet_ntoa(pptr^[I]^));
Inc(I);
end;
WSACleanup;
end;
var
TreeNode: TTreeNode;
TmpText : String;
i : Integer;
begin
TreeNode := TreeView.Selected;
if TreeNode = nil then
exit;
Memo1.Lines.Clear;
TmpText := TreeNode.Text;
if pos(\'\\\',TmpText) = 0 then
exit;
Memo1.Clear;
Delete (TmpText,1,2);
i := pos(\'\\\',TmpText);
if i <> 0 then
TmpText := copy(TmpText,1,i-1);
Memo1.Lines.Add(\'Computername :\' + TmpText);
Memo1.Lines.Add(\'Remote IP :\' + GetIp(pointer(TmpText)));
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
TNetEnumThread.Create(False);
end;
end.
Jens B