Текущий архив: 2004.06.13;
Скачать: CL | DM;
ВнизAccount information Найти похожие ветки
← →
-=DoN=- (2004-05-08 08:11) [0]Здрасте мастера.Может кто-нибудь знает как узнать инфу[имя,..] о юзере на локальном компе, GetUserName не подходит т.к. у сервиса спец. акаунт "SYSTEM" ?
← →
MasterA (2004-05-08 09:21) [1]Вот тебе парочка вырезок из кода. Мож поиожет.
----------------------------------------------------
Чтобы узнать имя, идентифицирующее компьютер в сети, на котором запущена Ваша программа, можно воспользоваться следующей функцией:
uses Windows;
function GetComputerNetName: string;
var
buffer: array[0..255] of char;
size: dword;
begin
size := 256;
if GetComputerName(buffer, size) then
Result := buffer
else
Result := ""
end;
----------------------------------------------------
Как узнать имя пользователя
Function GetUserFromWindows: string;
Var
UserName : string;
UserNameLen : Dword;
Begin
UserNameLen := 255;
SetLength(userName, UserNameLen);
If GetUserName(PChar(UserName), UserNameLen) Then
Result := Copy(UserName,1,UserNameLen - 1)
Else
Result := "Unknown";
End;
----------------------------------------------------
Ищем все компьютеры в сети.
Компилятор: Delphi 5 (или выше)
Ниже представлена функция FindComputers, которая заполняет StringList именами компьютеров:
unit FindComp;
interface
uses
Windows, Classes;
function FindComputers: DWORD;
var
Computers: TStringList;
implementation
uses
SysUtils;
const
MaxEntries = 250;
function FindComputers: DWORD;
var
EnumWorkGroupHandle, EnumComputerHandle: THandle;
EnumError: DWORD;
Network: TNetResource;
WorkGroupEntries, ComputerEntries: DWORD;
EnumWorkGroupBuffer, EnumComputerBuffer: array[1..MaxEntries] of TNetResource;
EnumBufferLength: DWORD;
I, J: DWORD;
begin
Computers.Clear;
FillChar(Network, SizeOf(Network), 0);
with Network do
begin
dwScope := RESOURCE_GLOBALNET;
dwType := RESOURCETYPE_ANY;
dwUsage := RESOURCEUSAGE_CONTAINER;
end;
EnumError := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, @Network, EnumWorkGroupHandle);
if EnumError = NO_ERROR then
begin
WorkGroupEntries := MaxEntries;
EnumBufferLength := SizeOf(EnumWorkGroupBuffer);
EnumError := WNetEnumResource(EnumWorkGroupHandle, WorkGroupEntries, @EnumWorkGroupBuffer, EnumBufferLength);
if EnumError = NO_ERROR then
begin
for I := 1 to WorkGroupEntries do
begin
EnumError := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, @EnumWorkGroupBuffer[I], EnumComputerHandle);
if EnumError = NO_ERROR then
begin
ComputerEntries := MaxEntries;
EnumBufferLength := SizeOf(EnumComputerBuffer);
EnumError := WNetEnumResource(EnumComputerHandle, ComputerEntries, @EnumComputerBuffer, EnumBufferLength);
if EnumError = NO_ERROR then
for J := 1 to ComputerEntries do
Computers.Add(Copy(EnumComputerBuffer[J].lpRemoteName, 3, Length(EnumComputerBuffer[J].lpRemoteName) - 2));
WNetCloseEnum(EnumComputerHandle);
end;
end;
end;
WNetCloseEnum(EnumWorkGroupHandle);
end;
if EnumError = ERROR_NO_MORE_ITEMS then
EnumError := NO_ERROR;
Result := EnumError;
end;
initialization
Computers := TStringList.Create;
finalization
Computers.Free;
end.
Поищи через посковик.
← →
Игорь Шевченко © (2004-05-08 21:10) [2]-=DoN=- (08.05.04 08:11)
Юзеров на компьютере может быть много, какой тебе нужен ?
← →
-=DoN=- (2004-05-09 17:49) [3]Игорь Шевченко © (08.05.04 21:10)[2]
Нужен мне тот юзер у которого тип логона равен 2 и который активен.
MasterA (08.05.04 09:21) [1]
Да не нужен мне GetUserName а ответ я уже нашел:
interface
type
LUID = record
LowPart: DWORD;
HighPart: Longint;
end;
PLUID = ^LUID;
TOKEN_USER = record
User: SID_AND_ATTRIBUTES;
end;
LSA_UNICODE_STRING = record
Length: WORD;
MaximumLength: WORD;
Buffer: PWideChar;
end;
SECURITY_LOGON_SESSION_DATA = record
Size: DWORD;
LogonId: LUID;
UserName: LSA_UNICODE_STRING;
LogonDomain: LSA_UNICODE_STRING;
AuthenticationPackage: LSA_UNICODE_STRING;
LogonType: DWORD;
Session: DWORD;
Sid: PSID;
LogonTime: LARGE_INTEGER;
LogonServer: LSA_UNICODE_STRING;
DnsDomainName: LSA_UNICODE_STRING;
Upn: LSA_UNICODE_STRING;
end;
PSECURITY_LOGON_SESSION_DATA = ^SECURITY_LOGON_SESSION_DATA;
function LsaEnumerateLogonSessions(LogonSessionCount, LogonSessionList: Pointer): LongInt; stdcall; external "Secur32.dll";
function LsaFreeReturnBuffer(Buffer: Pointer): LongInt; stdcall; external "Secur32.dll";
function LsaGetLogonSessionData(LogonId: PLUID;ppLogonSessionData:PPSECURITY_LOGON_SESSION_DATA): LongInt; stdcall; external "Secur32.dll";
implementation
procedure TForm1.Button1Click(Sender: TObject);
Var Session_count: DWORD;
Buffer, sess_inf: PLUID;
P: PChar;
i: integer;
sess_data: PSECURITY_LOGON_SESSION_DATA;
begin
LsaEnumerateLogonSessions(@session_count,@buffer);
except
if GetLastError<>0 then messagedlg(SYSerrormessage(GetLastError),mtError,[mbOk],0);
end;
P:=PChar(buffer);
try
for i:=0 to session_count-1 do
begin
sess_inf:= PLUID(p + i*SizeOf(LUID));
LsaGetLogonSessionData(sess_inf,@sess_data);
memo1.Lines.Add(WideCharToString(sess_data^.UserName.Buffer));
memo2.Lines.Add(IntToStr(sess_data^.LogonType));
memo3.Lines.Add(WideCharToString(sess_data^.LogonServer.Buffer));
end;
finally
LsaFreeReturnBuffer(sess_data);
LsaFreeReturnBuffer(buffer);
end;
end;
Страницы: 1 вся ветка
Текущий архив: 2004.06.13;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.026 c