![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Имя компа [D6, Win2k]
Максим © (2004-08-09 07:03:00)как узнать имя компьютера и имя пользователя ???
Rouse_ (2004-08-09 10:07:00) [1]И как обычно забыл структуру (это уже становится плохой практикой :)
_WKSTA_USER_INFO_1 = record
wkui1_username: LPWSTR;
wkui1_logon_domain: LPWSTR;
wkui1_oth_domains: LPWSTR;
wkui1_logon_server: LPWSTR;
end;
WKSTA_USER_INFO_1 = _WKSTA_USER_INFO_1;
PWKSTA_USER_INFO_1 = ^_WKSTA_USER_INFO_1;
LPWKSTA_USER_INFO_1 = ^_WKSTA_USER_INFO_1;
Rouse_ (2004-08-09 10:05:00) [2]
function GetCompNameFromIP(const IP: String; var Report: String): String;
var
Host: PHostEnt;
Addr: Integer;
begin
Result := RES_UNKNOWN;
Addr := inet_addr(PChar(IP));
if Addr = INADDR_NONE then
begin
Report := SysErrorMessage(GetLastError);
Exit;
end;
Host := gethostbyaddr(@Addr, SizeOf(Addr), PF_INET);
if Assigned(Host) then
Result := Host.h_name
else
Report := SysErrorMessage(GetLastError);
end;
// Перечисляем всех залогиненных на машине пользователей
// начинаем перечисления со второго пользователя, потомчто
// первым будет "имя компьютера"$
function TMainForm.GetUsers(const CompName: String): String;
var
Buffer, tmpBuffer: Pointer;
PrefMaxLen : DWORD;
Resume_Handle : DWORD;
EntriesRead : DWORD;
TotalEntries : DWORD;
I, Size : Integer;
PSrvr : PWideChar;
begin
PSrvr := nil;
try
// Переводим имя компьютера типа PWideChar
Size := Length(CompName);
GetMem(PSrvr, Size * SizeOf(WideChar) + 1);
StringToWideChar(CompName, PSrvr, Size + 1);
PrefMaxLen := DWORD(-1);
EntriesRead := 0;
TotalEntries := 0;
Resume_Handle := 0;
Buffer := nil;
// Получаем список пользователей на компьютере из PSrvr
if NetWkstaUserEnum( PSrvr, 1, @Buffer, PrefMaxLen, @EntriesRead,
@TotalEntries, @Resume_Handle) = S_OK then
begin
tmpBuffer := Pointer(DWORD(Buffer) + SizeOf(WKSTA_USER_INFO_1));
for I := 1 to TotalEntries - 1 do
begin
Result := Result + WKSTA_USER_INFO_1(tmpBuffer^).wkui1_username + ', ';
tmpBuffer := Pointer(DWORD(tmpBuffer) + SizeOf(WKSTA_USER_INFO_1));
end;
end
else
ShowMessage(SysErrorMessage(GetLastError));
finally
if Result = '' then
Result := RES_UNKNOWN
else
Result := Copy(Result, 1, Length(Result) - 2);
NetApiBufferFree(Buffer);
FreeMem(PSrvr);
end;
end;
а также GetUserName, GetComputerName :)