PDA

View Full Version : لیست کامپیوترهای روی شبکه



FirstLine
سه شنبه 10 آذر 1383, 14:07 عصر
با سلام
چجوری میتونم نام یا IP تمام کامپیوترهایی که با کامپیوتر من در یک WorkGroup و رنج IP مشخص کلاس C دارند (تمام کامپیوترهای روی WorkGroup ای به نام Test که IP آنها 192.168.0.xxx است )را در یک ListBox نمایش دهم؟
توی دموی Indy فقط ping , ... بود و اینیکه در بالا توضیح دادم نبود. لطفا راهنمایی بفرمایید.
با تشکر

BOB
چهارشنبه 11 آذر 1383, 05:59 صبح
سلام.
باید رنج خودت رو اسکن کنی. میتونی به همه اونا یک ping ارسال کنی و با دریافت پاسخ ping متوجه میشی که کدامها online هستند.

FirstLine
چهارشنبه 11 آذر 1383, 16:57 عصر
با سلام
اسم کامپیوترها رو چجوری پیدا کنم؟
با تشکر

مهدی کرامتی
چهارشنبه 11 آذر 1383, 18:40 عصر
این ممکنه کمکت کنه:

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(EnumComputerHandle, ComputerEntries, @EnumComputerBuffer, EnumBufferLength);
if EnumError = NO_ERROR then
for J := 1 to ComputerEntries do
COMPUTERS.Add(Copy(EnumComputerBuffer[J].lpRemoteN ame, 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.