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.
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.