Maskiner i nettverk

Tags:    delphi

Er det noen som vet hvordan man kan legge alle maskiner i nettverket til en TListBox?

DiZpel



4 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 3 karma
Sorter efter stemmer Sorter efter dato
Er det noen som vet hvordan man kan legge alle maskiner i nettverket til en TListBox?

DiZpel


Her er funktionen, hvis din ListBox ikke hedder ListBox1 skal du lige ændre det et sted:

<pre>function TForm1.EnumerateFunc( hwnd: HWND; hdc: HDC ; lpnr: PNetResource ): Boolean;
var
cbBuffer : DWORD;
hEnum, dwResult, dwResultEnum : DWORD;
lpnrLocal : array
[0..16384 div SizeOf(TNetResource)] of TNetResource; // pointer to enumerated structures
i : integer;
cEntries : Longint;
begin
cbBuffer := 16384;
centries := -1; // enumerate all possible entries

// Call the WNetOpenEnum function to begin the enumeration.
dwResult := WNetOpenEnum(
RESOURCE_CONTEXT, // Enumerate currently connected resources.
RESOURCETYPE_DISK, // all resources
0, // enumerate all resources
lpnr, // NULL first time the function is called
hEnum // handle to the resource
);

if (dwResult <> NO_ERROR) then
begin
// Process errors with an application-defined error handler
Result := False;
Exit;
end;

// Initialize the buffer.
FillChar( lpnrLocal, cbBuffer, 0 );

// Call the WNetEnumResource function to continue
// the enumeration.
dwResultEnum := WNetEnumResource(hEnum, // resource handle
DWORD(cEntries), // defined locally as -1
@lpnrLocal, // LPNETRESOURCE
cbBuffer); // buffer size

// This is just printing
for i := 0 to cEntries - 1 do
begin
// loop through each structure and
// get remote name of resource... lpnrLocal.lpRemoteName)
ListBox1.Items.Add(lpnrLocal.lpRemoteName);
end;

// Call WNetCloseEnum to end the enumeration.
dwResult := WNetCloseEnum(hEnum);

if(dwResult <> NO_ERROR) then
begin
// Process errors... some user defined function here
Result := False;
end
else
Result := True;
end;</pre>

Det her skriver du så i din knap (eller et eller andet sted):

<pre> ListBox1.Clear;
EnumerateFunc(Handle, 0, nil);</pre>

Emil Melgaard
- Admin på gruppen Delphi spilprogrammering.
http://www.delphispilprogram.udvikleren.dk




Er det noen som vet hvordan man kan legge alle maskiner i nettverket til en TListBox?

DiZpel

Her er funktionen, hvis din ListBox ikke hedder ListBox1 skal du lige ændre det et sted:

<pre>function TForm1.EnumerateFunc( hwnd: HWND; hdc: HDC ; lpnr: PNetResource ): Boolean;
var
cbBuffer : DWORD;
hEnum, dwResult, dwResultEnum : DWORD;
lpnrLocal : array
[0..16384 div SizeOf(TNetResource)] of TNetResource; // pointer to enumerated structures
i : integer;
cEntries : Longint;
begin
cbBuffer := 16384;
centries := -1; // enumerate all possible entries

// Call the WNetOpenEnum function to begin the enumeration.
dwResult := WNetOpenEnum(
RESOURCE_CONTEXT, // Enumerate currently connected resources.
RESOURCETYPE_DISK, // all resources
0, // enumerate all resources
lpnr, // NULL first time the function is called
hEnum // handle to the resource
);

if (dwResult <> NO_ERROR) then
begin
// Process errors with an application-defined error handler
Result := False;
Exit;
end;

// Initialize the buffer.
FillChar( lpnrLocal, cbBuffer, 0 );

// Call the WNetEnumResource function to continue
// the enumeration.
dwResultEnum := WNetEnumResource(hEnum, // resource handle
DWORD(cEntries), // defined locally as -1
@lpnrLocal, // LPNETRESOURCE
cbBuffer); // buffer size

// This is just printing
for i := 0 to cEntries - 1 do
begin
// loop through each structure and
// get remote name of resource... lpnrLocal.lpRemoteName)
ListBox1.Items.Add(lpnrLocal.lpRemoteName);
end;

// Call WNetCloseEnum to end the enumeration.
dwResult := WNetCloseEnum(hEnum);

if(dwResult <> NO_ERROR) then
begin
// Process errors... some user defined function here
Result := False;
end
else
Result := True;
end;</pre>

Det her skriver du så i din knap (eller et eller andet sted):

<pre> ListBox1.Clear;
EnumerateFunc(Handle, 0, nil);</pre>

Emil Melgaard
- Admin på gruppen Delphi spilprogrammering.
http://www.delphispilprogram.udvikleren.dk


Når jeg prøver å compile dette så kommer det noen feilmeldinger, så jeg ikke får compilet det.
Mangler jeg noe under uses?
Jeg bruker Delphi 7 Enterprise.

Her er uniten min:
Fold kodeboks ind/udKode 


DiZpel



Nej der skal ikke tilføjes noget til uses, det er mig der har lavet en fejl.

I stedet for:

ListBox1.Items.Add(lpnrLocal.lpRemoteName);

Skal der stå:

ListBox1.Items.Add(lpnrLocal.lpRemoteName);

Jeg ved ikke lige hvorfor at jeg skrev forkert først.

Emil Melgaard
- Admin på gruppen Delphi spilprogrammering.
http://www.delphispilprogram.udvikleren.dk




Nej der skal ikke tilføjes noget til uses, det er mig der har lavet en fejl.

I stedet for:

ListBox1.Items.Add(lpnrLocal.lpRemoteName);

Skal der stå:

ListBox1.Items.Add(lpnrLocal.lpRemoteName);

Jeg ved ikke lige hvorfor at jeg skrev forkert først.

Emil Melgaard
- Admin på gruppen Delphi spilprogrammering.
http://www.delphispilprogram.udvikleren.dk


Det virket. Tusen takk for hjelpen! :P

DiZpel




t