![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как определить группу в которой находится юзер? [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, по имени в сети...