Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.06.13;
Скачать: [xml.tar.bz2];

Вниз

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 вся ветка

Форум: "WinAPI";
Текущий архив: 2004.06.13;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.045 c
9-1076844406
Poison man
2004-02-15 14:26
2004.06.13
Несколько вопросов от новичка


14-1085812324
kaif
2004-05-29 10:32
2004.06.13
Именование событий


1-1085729482
Leaner
2004-05-28 11:31
2004.06.13
Как правильно освободить память ?


4-1084017989
Learner
2004-05-08 16:06
2004.06.13
Сообщение от Screen Saver


3-1085300673
VflowerW
2004-05-23 12:24
2004.06.13
Работа с TreeView





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский