Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как определить группу в которой находится юзер? [D7, WinXP]


Matrex ©   (2004-12-25 23:31:00) 

Как определить группу в локальной сети в которой находится юзер?


Яичница   (2004-12-26 04:10:00) [1]

Код написан не кошерно, надо приводить в порядок...Но думаю. что в качестве толчка в нужном направлении сойдет. -)

type
 TForm1 = class(TForm)
   Button1: TButton;
   ListBox1: TListBox;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
   end;
type
   GROUP_USERS_INFO_0 = record
   grui0_name:PWideChar;
   end;
var
  LibHandle: LongWord;
  NetUserGetGroup:function(
      lpwServer: PWideChar;
      lpwUser : PWideChar;
      level:DWORD;
      bufptr:PBYTE;
      prefmaxlen:DWORD ;
      var entriesread:DWORD ;
      var totalentries :DWORD
      ):cardinal stdcall;

    Form1: TForm1;
  function GetUserGroups(lpwServer,lpwUser : PWideChar) :Cardinal;

implementation

{$R *.dfm}
function GetUserGroups(lpwServer,lpwUser : PWideChar) :Cardinal;
type
   TUserGroupArray = array of GROUP_USERS_INFO_0;
var
   pBuffer : Pointer;
   dwRead, dwTotal, i : Cardinal;
   dwErr : integer;
   UserGroupArray : array [0..100] of GROUP_USERS_INFO_0;
begin
   pBuffer:=@UserGroupArray;
   dwRead:=0;
   ZeroMemory(pBuffer,SizeOf(UserGroupArray));
// здесь навести порядок!!!
//   надо использовать NetApiBufferAlloc
//Pointer to the buffer in which the data set with the level parameter is stored.
//The buffer passed in must have been previously allocated with NetApiBufferAlloc.
// The returned buffer should be deallocated using the NetApiBufferFree function.
   @NetUserGetGroup := nil;
   LibHandle:=LoadLibrary('NETAPI32.DLL');

 if LibHandle = 0 then
    begin
// Обработать ошибку и выйти
     end
  else
  begin
       @NetUserGetGroup:=GetProcAddress(LibHandle,'NetUserGetGroups');
       if @NetUserGetGroup <> nil then
       begin
           Result:=NetUserGetGroup(lpwServer,lpwUser,0,pBuffer,255,dwRead,dwTotal);
           if Result = 0 then
           for i:=0 to dwRead-1 do
//ну, это уж совсем не кошерно -)
               Form1.ListBox1.Items.Add(WideCharToString(TUserGroupArray(pBuffer^)[i].grui0_name));
       end;
   end;
//    NetApiBufferFree(pBuffer); - здесь навести порядок
   FreeLibrary(LibHandle);
end;
//Пример использования
procedure TForm1.Button1Click(Sender: TObject);
var s,u: widestring;
   Err: cardinal;
begin
   s:=WideString('Server');
   u:=WideString('User');
   Err:=GetUserGroups(@s[1],@u[1]);
   .....
end;

end.


Matrex   (2004-12-25 23:34:00) [2]

Сори... Добавлю: Подойдел любой вариант - по IP, по имени в сети...


Наверх

Титульная страница Поиск, карта сайта Написать письмо