سلام
داشتم موضوعات را در کامپیوتر مرور میکردم، دیدم به این سوال جواب داده شده ولی جوابها مربوط به دلفی نمیشوند.
باز گفتم در آینده یکی دنبال این موضوع میگرده یک جواب حسابی داشته باشه بد نیست!
قدیمها در دلفی5 برنامه زیر همانند ping کار میکرد (حقیقتش از یک جایی برداشته بودمش)، اینجا از توابع API (یا به قول آقای اینپرایز محصور کننده...) استفاده شده و در نتیجه با تغییراتی در همه جا کاربرد داره.
استفاده کنید و خوش باشید:
unit FindComp;
interface
uses
Windows, Classes;
function FindComputers: DWORD;
var
Computers: TStringList;
implementation
uses
SysUtils;
const
MaxEntries = 250;
function FindComputers: DWORD;
var
EnumWorkGroupHandle,
EnumComputerHandle : THandle;
EnumError : DWORD;
Network : TNetResource;
WorkGroupEntries,
ComputerEntries : DWORD;
EnumWorkGroupBuffer,
EnumComputerBuffer : array[1..MaxEntries] of
TNetResource;
EnumBufferLength : DWORD;
I, J : DWORD;
begin
Computers.Clear;
FillChar(Network, SizeOf(Network), 0);
with Network do
begin
dwScope := RESOURCE_GLOBALNET;
dwType := RESOURCETYPE_ANY;
dwUsage := RESOURCEUSAGE_CONTAINER;
end;
EnumError := WNetOpenEnum(RESOURCE_GLOBALNET,
RESOURCETYPE_ANY, 0,
@Network,
EnumWorkGroupHandle);
if EnumError = NO_ERROR then
begin
WorkGroupEntries := MaxEntries;
EnumBufferLength := SizeOf(EnumWorkGroupBuffer);
EnumError := WNetEnumResource(EnumWorkGroupHandle,
WorkGroupEntries,
@EnumWorkGroupBuffer,
EnumBufferLength);
if EnumError = NO_ERROR then
begin
for I := 1 to WorkGroupEntries do
begin
EnumError := WNetOpenEnum(RESOURCE_GLOBALNET,
RESOURCETYPE_ANY, 0,
@EnumWorkGroupBuffer[I],
EnumComputerHandle);
if EnumError = NO_ERROR then
begin
ComputerEntries := MaxEntries;
EnumBufferLength:= SizeOf(EnumComputerBuffer);
EnumError:=WNetEnumResource(EnumComputerHa ndle,
ComputerEntries,
@EnumComputerBuffer,
EnumBufferLength);
if EnumError = NO_ERROR then
for J := 1 to ComputerEntries do
Computers.Add(Copy(EnumComputerBuffer[ J].
lpRemoteName, 3,
Length(EnumComputerBuffer[J].
lpRemoteName) - 2));
WNetCloseEnum(EnumComputerHandle);
end;
end;
end;
WNetCloseEnum(EnumWorkGroupHandle);
end;
if EnumError = ERROR_NO_MORE_ITEMS then
EnumError := NO_ERROR;
Result := EnumError;
end;
initialization
Computers := TStringList.Create;
finalization
Computers.Free;
end.
در صورت برخورد با هر گونه اشکال خواهشمند است سریع گزارش دهید تا رفع گردد یا گردند!
موفق باشید ...