Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.48 MB
Время: 0.051 c
4-1083753623
faith
2004-05-05 14:40
2004.06.13
Не работает перехват сообщения


1-1086069212
din
2004-06-01 09:53
2004.06.13
Как работает функция DayOfWeek


6-1082774639
Graf
2004-04-24 06:43
2004.06.13
Счетчик траффика


14-1085575633
AlexG
2004-05-26 16:47
2004.06.13
Давайте разберемся....


1-1085895664
MadAngel
2004-05-30 09:41
2004.06.13
Инфо о файле