الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

طريقة للحصول على اسم جهاز معين في الشبكة

مغلق
بدأه madi في 29 نوفمبر 2001 · 2 رد · 1,324 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بعد ان تضع زر على الفورم و Label

ضع use ShlObj, ActiveX

[l]

procedure TForm1.Button1Click(Sender: TObject);

var

IResult:boolean;

BrowseInfo: TBrowseInfo;

ItemIDList: PItemIDList;

ComputerName: array[0..MAX_PATH] of Char;

CompName, Title: string;

WindowList: Pointer;

ShellMalloc: IMalloc;

begin

if Failed(SHGetSpecialFolderLocation(Application.Handle, CSIDL_NETWORK, ItemIDList)) then

raise Exception.Create('Unable open browse computer dialog');

try

FillChar(BrowseInfo, SizeOf(BrowseInfo), 0);

BrowseInfo.hwndOwner := Application.Handle;

BrowseInfo.pidlRoot := ItemIDList;

BrowseInfo.pszDisplayName := ComputerName;

Title := 'l';

BrowseInfo.lpszTitle := PChar(Pointer(Title));

BrowseInfo.ulFlags := BIF_BROWSEFORCOMPUTER;

WindowList := DisableTaskWindows(0);

try

IResult := SHBrowseForFolder(BrowseInfo) <> nil;

finally

EnableTaskWindows(WindowList);

end;

if IResult then CompName := ComputerName;

finally

Label1.caption:= CompName;

if Succeeded(SHGetMalloc(ShellMalloc)) then

ShellMalloc.Free(ItemIDList);

end;

end;

[/l]

وشكرا(*)

#2

السلام عليكم

هذا source code ربما يمكن الإستفادة منه

Add a button-> Button1 and a treeview-> TreeView1

type
  TNetResourceArray = ^TNetResource; 
function GetUser(GroupName:string;UserNode:TTreeNode):boolean;
Var
  NetResource:TNetResource;
  Buf : Pointer;
  Count,BufSize,Res : DWord;
  Ind : Integer;
  lphEnum : THandle;
  Temp:TNetResourceArray;
  user:PChar;
Begin
  Result := False;
  FillChar(NetResource, SizeOf(NetResource), 0);
  //initialize newtwork resource information  
  NetResource.lpRemoteName := @GroupName[ 1];
//workgroup name   
  NetResource.dwDisplayType := RESOURCEDISPLAYTYPE_SERVER;
  //type as a server (workgroup) 
  NetResource.dwUsage := RESOURCEUSAGE_CONTAINER;
  NetResource.dwScope := RESOURCETYPE_DISK;
  //enumerate file resource inforamation 
  Res := WNetOpenEnum( RESOURCE_GLOBALNET, RESOURCETYPE_DISK,RESOURCEUSAGE_CONTAINER, @NetResource,lphEnum);
If Res <> NO_ERROR Then
 Exit;  //function failed 
 While True Do       
  Begin
   Count := $FFFFFFFF; //no restriction of resource count 
   BufSize := 8192;//size of buffer that receives the enumeration results 8K
   GetMem(Buf, BufSize);//apply memory , used to get work group info and the computer name   
   Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize);
  If Res = ERROR_NO_MORE_ITEMS Then
  break;//resource enumerate finished 
  If (Res <> NO_ERROR) then
   Exit; //function faild 
    Temp := TNetResourceArray(Buf);
   For Ind := 0 to Count - 1 do
    //enumerate computers in workgroup 
     Begin
       strcopy(user,Temp^.lpRemoteName);
       strcopy(user,user+2);
       Form1.TreeView1.Items.AddChild(UserNode,user);
       Inc(Temp);
     End;
 End;
 Res := WNetCloseEnum(lphEnum);
If Res <> NO_ERROR Then  exit;
  Result:=True;
  FreeMem(Buf);
end;
function GetGroup:boolean;
Var
NetResource : TNetResource;
Buf : Pointer;
Count,BufSize,Res : DWORD;
lphEnum : THandle;
p:TNetResourceArray;
i,j : SmallInt;
NetworkTypeList : TList;
MyTreeNode1,MyTreeNode2: TTreeNode;
Begin
with form1.TreeView1.Items do
begin
MyTreeNode1 := Add(nil, 'Groups');
end;
Result := False;
NetworkTypeList := TList.Create;
Res := WNetOpenEnum( RESOURCE_GLOBALNET, RESOURCETYPE_DISK,
RESOURCEUSAGE_CONTAINER, Nil,lphEnum);
//get entire network file resource handle
If Res <> NO_ERROR Then
exit;  // failed
Count := $FFFFFFFF;
BufSize := 8192;
GetMem(Buf, BufSize);
Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize);
If ( Res = ERROR_NO_MORE_ITEMS ) or (Res <> NO_ERROR ) Then  
 Exit;
P := TNetResourceArray(Buf);
For I := 0 To Count - 1 Do
//record every network type information
Begin
NetworkTypeList.Add(p);
Inc(P);
End;
//WNetCloseEnum
Res:= WNetCloseEnum(lphEnum);
//close one enumerate handle
If Res <> NO_ERROR Then exit;
For J := 0 To NetworkTypeList.Count-1 Do
Begin
//list all workgroups in one network type
NetResource := TNetResource(NetworkTypeList.Items[J]^);
Res := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK,
//get the handle of a certain network type file resource
//NetResource -> the networktype , lpEnum ->returned handle
RESOURCEUSAGE_CONTAINER, @NetResource,lphEnum);
If Res <> NO_ERROR Then 
 break;
While true Do
Begin
Count := $FFFFFFFF;
BufSize := 8192;
GetMem(Buf, BufSize);
Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize);
If ( Res = ERROR_NO_MORE_ITEMS ) or (Res <> NO_ERROR) then
 break;
P := TNetResourceArray(Buf);
For I := 0 To Count - 1 Do
Begin
MyTreeNode2:=Form1.TreeView1.Items.Addchild(MyTreeNode1,StrPAS( P^.lpRemoteName ));
GetUser(P^.lpRemoteName ,MyTreeNode2);
Inc(P);
End;
End;
Res := WNetCloseEnum(lphEnum);
If Res <> NO_ERROR Then
 break;
End;
Result := True;
FreeMem(Buf);
NetworkTypeList.Destroy;
End;
procedure TForm1.Button1Click(Sender: TObject);
begin
GetGroup;
end;

هناك حتى الأحلام أصبحت ممنوعة ...

إنه لعار أن ننتمي لهكذا أوطان ... لكن ... ربما العار أن نكون نحن أبناء لتلكم أوطان .. من يدري ؟!!

ليعلم أولئك ... إنّ الشعوب إنْ هي استيقظت تسحق ظُلامََهَا ...

There, even in dreams u r wanted

To be a programmer, how a nice dream it was

Leaving ...

أعيدوا لإسمي لونه المفضل

#3

والله برضك فكرة ......

مشكور اخي العزيز tmaaa .

شكرا(*)

هذا الموضوع مغلق.

مواضيع مشابهة