Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.24;
Скачать: CL | DM;

Вниз

Локальная сеть   Найти похожие ветки 

 
Duka   (2004-08-17 09:16) [0]

Как получить список рабочих групп?


 
Rouse_ ©   (2004-08-17 09:31) [1]

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

type
 TForm1 = class(TForm)
   Button1: TButton;
   Memo1: TMemo;
   procedure Button1Click(Sender: TObject);
 end;

 _GROUP_INFO_0 = record
   grpi0_name: LPWSTR;
 end;
 TGroupInfo0 = _GROUP_INFO_0;
 TGrounInfo0Array = array of TGroupInfo0;

 function NetGroupEnum(servername: LPCWSTR; level: DWORD; var bufptr: Pointer;
   prefmaxlen: DWORD; var entriesread: DWORD; var totalentries: DWORD;
   resume_handle: PDWORD): DWORD; stdcall; external "NetApi32.dll";

 function NetApiBufferFree(Buffer: Pointer): DWORD; stdcall; external "NetApi32.dll";

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
 GroupInfo: Pointer;
 entriesread, totalentries: DWORD;
 I: integer;
begin                
 if NetGroupEnum("\\имя компьютера", 0, GroupInfo, DWORD(-1), entriesread, totalentries, nil) = NO_ERROR then
 try
   Memo1.Lines.Clear;
   for I := 0 to entriesread - 1 do
     Memo1.Lines.Add(TGrounInfo0Array(@(GroupInfo^))[I].grpi0_name);
 finally
   NetApiBufferFree(GroupInfo);
 end;
end;

end.


 
Дмитрий Ботвин   (2004-08-17 09:54) [2]

Можно более универсально, для любого количества рабочих групп
и серверов:

procedure TForm1.FindGroups();
 const MaxWG=100;
 var
   I: integer;
   Entries,EnumError,EnumBufferLength: DWORD;
   NetName: string;
   EnumHandle: THandle;
   Network: TNetResource;
   EnumBuffer: array[1..MaxWG] of TNetResource;
 begin
   Groups.Clear;
   NetName:="Сеть Microsoft Windows"+#0;
   FillChar(Network, SizeOf(Network),0);
   with Network do
     begin
       dwScope := 2;
       dwType := 3;
       dwDisplayType := 1;
       dwUsage := 2;
       lpProvider := @NetName[1];
     end;
   EnumError := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK, 0, @Network, EnumHandle);
   if EnumError = NO_ERROR then
     begin
       Entries := MaxWG;
       EnumBufferLength := SizeOf(EnumBuffer);
       EnumError := WNetEnumResource(EnumHandle, Entries, @EnumBuffer, EnumBufferLength);
       if EnumError = NO_ERROR then
         for I := 1 to Entries do
           begin
             Groups.Items.Add(Trim(EnumBuffer[I].lpRemoteName));
             StatusBar1.Panels[2].Text:=IntToStr(I);
           end;
       WNetCloseEnum(EnumHandle);
     end;
     
 end;


 
Дмитрий Ботвин   (2004-08-17 10:09) [3]

Рука дрогнула и не то стёр. Замени строку:

StatusBar1.Panels[2].Text:=IntToStr(I)

на Application.ProcessMessages;


 
Rouse_ ©   (2004-08-17 10:11) [4]

> NetName:="Сеть Microsoft Windows"+#0;
Вот так лучше не делать, а получить это значение вот таким образом:

function GetProvider:String;
var
 Buffer: array [0..255] of Char;
 Size: DWORD;
begin
 Size := SizeOf(Buffer);
 if WNetGetProviderName(WNNC_NET_LANMAN, @Buffer, Size) <> NO_ERROR then
   Result := RES_COM_NO
 else
   Result := String(Buffer);
end;


К примеру у меня это не "Сеть Microsoft Windows" а "Microsoft Windows Network"


 
Дмитрий Ботвин   (2004-08-17 10:16) [5]

Согласен, Rouse_  а про параметр WNNC_NET_LANMAN где нарыл???


 
Rouse_ ©   (2004-08-17 10:21) [6]

> [5] Дмитрий Ботвин   (17.08.04 10:16)
MSDN
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wnet/wnet/wnetgetprovidername.asp

там есть строка:
You can find a complete list of network types in the header file Winnetwk.h.

просмотрел его, поискал эти типы опять же на MSDN и вышел на их описание:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/secauthn/security/npgetcaps.asp

:)


 
Дмитрий Ботвин   (2004-08-17 10:29) [7]

Век живи - век учись!!!! :-)))



Страницы: 1 вся ветка

Текущий архив: 2004.10.24;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.47 c
1-1097092018
Phantom_007
2004-10-06 23:46
2004.10.24
String в PChar


3-1096450101
Artem777
2004-09-29 13:28
2004.10.24
Слишком большое колличество курсоров


14-1096715369
roma
2004-10-02 15:09
2004.10.24
webbrowser1 &amp; skrolling


14-1096669667
GanibalLector
2004-10-02 02:27
2004.10.24
СУПЕРМАРКЕТ...


4-1095397484
drew
2004-09-17 09:04
2004.10.24
И опять com порт