ايران ويج

نسخه‌ی کامل: تشخیص ارتباط کامپیوتر ها در شبکه ؟
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
سلام
لطفا کمک کنید!؟!؟
می خوام یه برنامه با دلفی بنویسم که : تشخیص بده که در حال حاضر کامپیوتر مورد استفاده ، کدام کامپیوتر های شبکه رو می بینه ؟مشکل اینه که ما چند تا کامپیوتر دارم که برای کار کردن کل مجموعه تمام کامپیوتر ها باید با بقیه کامپیوتر ها ارتباط داشته با شن ؟ در حال حاضر با استفاده از دستور 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;