Главная страница
    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.46 MB
Время: 0.033 c
14-1085827421
VEG
2004-05-29 14:43
2004.06.13
Есть ли у кого архивы форумов за 2001 год?


3-1084968307
tahion
2004-05-19 16:05
2004.06.13
как добыть(вспомнить) пароль от таблиц БД


3-1084915838
Yagoda
2004-05-19 01:30
2004.06.13
Помогите с SocketConnection


6-1082700117
thebatko
2004-04-23 10:01
2004.06.13
Сети


14-1085710974
Романов Р.В.
2004-05-28 06:22
2004.06.13
Американци посадили своего спамера на 7 лет!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский