سلام
لطفا کمک کنید!؟!؟
می خوام یه برنامه با دلفی بنویسم که : تشخیص بده که در حال حاضر کامپیوتر مورد استفاده ، کدام کامپیوتر های شبکه رو می بینه ؟مشکل اینه که ما چند تا کامپیوتر دارم که برای کار کردن کل مجموعه تمام کامپیوتر ها باید با بقیه کامپیوتر ها ارتباط داشته با شن ؟ در حال حاضر با استفاده از دستور Ping حدود 10 IP رو توی هر کامپیوتر چک می کنیم که این کار سخت و به نظر من بیهوده است .
می خوام که برنامه ای بنویسم که در یک نگاه بفهمم که با کدام IPها(کامپیوتر ها) ارتباط دارم؟؟
متاسفانه من در مورد کار کردن با شبکه در محیط دلفی آشنا نیستم.
لطفا کمک و یا راهنمای کنید.
با تشکر فراوان
بدست آوردن ليست کامپيوتر ها در شبکه
کد:
type
PNetResourceArray = ^TNetResourceArray;
TNetResourceArray = array[0..100] of TNetResource;
Function CreateNetResourceList(ResourceType: DWord;
NetResource: PNetResource;
out Entries: DWord;
out List: PNetResourceArray): Boolean;
var
EnumHandle: THandle;
BufSize: DWord;
Res: DWord;
begin
Result := False;
List := Nil;
Entries := 0;
if WNetOpenEnum(RESOURCE_GLOBALNET,
ResourceType,
0,
NetResource,
EnumHandle) = NO_ERROR then begin
try
BufSize := $4000; // 16 kByte
GetMem(List, BufSize);
try
repeat
Entries := DWord(-1);
FillChar(List^, BufSize, 0);
Res := WNetEnumResource(EnumHandle, Entries, List, BufSize);
if Res = ERROR_MORE_DATA then
begin
ReAllocMem(List, BufSize);
end;
until Res <> ERROR_MORE_DATA;
Result := Res = NO_ERROR;
if not Result then
begin
FreeMem(List);
List := Nil;
Entries := 0;
end;
except
FreeMem(List);
raise;
end;
finally
WNetCloseEnum(EnumHandle);
end;
end;
end;
procedure ScanNetworkResources(ResourceType, DisplayType: DWord; List: TStrings);
procedure ScanLevel(NetResource: PNetResource);
var
Entries: DWord;
NetResourceList: PNetResourceArray;
i: Integer;
begin
if CreateNetResourceList(ResourceType, NetResource, Entries, NetResourceList) then try
for i := 0 to Integer(Entries) - 1 do
begin
if (DisplayType = RESOURCEDISPLAYTYPE_GENERIC) or
(NetResourceList[i].dwDisplayType = DisplayType) then begin
List.AddObject(NetResourceList[i].lpRemoteName,
Pointer(NetResourceList[i].dwDisplayType));
end;
if (NetResourceList[i].dwUsage and RESOURCEUSAGE_CONTAINER) <> 0 then
ScanLevel(@NetResourceList[i]);
end;
finally
FreeMem(NetResourceList);
end;
end;
begin
ScanLevel(Nil);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ScanNetworkResources(RESOURCETYPE_DISK, RESOURCEDISPLAYTYPE_SERVER, ListBox1.Items);
end;
سلام
ممنون از اینکه جواب دادید و ببخشید از اینکه دیر اومدم
اقا شرمنده 3 خط اول برنامه یعنی چی ؟
من توی قسمت type برنامه خطوط دوم و سوم رو نوشتم اما کامپایلر ایراد گرفت هم از " ^ " ( اشاره گر ) و هم از " = " (برابری ).البته من هر چی تلاش کردم متاسفانه جواب نگرفتم.
آقا ببخشید من زیاد حرفه ای نیستم لطفاً راهنمایی کنید.
سلام دوستان .
من هم به همین کد به زبان ویبی 6 نیاز دارم . کسی میتونه کمک کنه ؟
لطفا در بخش مربوطه سوال رو مطرح کنین
سلام
خواهش میکنم به بی راه نرید و باز هو خواهش می کنم جواب بدید.
سلام:
فقط کافی است تمام کد ها را زیر بخش implementation بنویسی.
البته این دستور هم باید در یک دکمه نوشته شود. با دلفی 7 و 2009 این تابع هیچ پیغام خطایی نمی دهد.
کد:
procedure TForm1.Button1Click(Sender: TObject);
begin
ScanNetworkResources(RESOURCETYPE_DISK, RESOURCEDISPLAYTYPE_SERVER, ListBox1.Items);
end;