Entwickler-Ecke

Windows API - Windows-Anmeldung abfragen


webbi - Do 27.04.06 08:31
Titel: Windows-Anmeldung abfragen
Hallo!

Ich möchte einen kleinen Dienst coden, der bei jeder Anmeldung reagiert.
Das ist eine RDP-Session die immer getrennt und wieder verbunden wird...

Aber wie frage ich ab, ob die Session grade aktiv ist oder nicht?

mfG

Webbi


nullplan001 - Do 27.04.06 18:38

Öh.. Tja, spontan würde ich sagen, der Nutzer ist angemeldet, wenn es beim öffnen des Registry-Schlüssels HKCU zu keinem Fehler kommt. Weil, wenn der User nicht angemeldet ist, gibt es keinen Current User. Weis aber nicht, ob Windows den Schlüssel bei der Abmeldung immer unmountet, oder nur bei Neuanmeldung den alten überschreibt... Halt, ich Trottel. Jeder User hat seine User.dat. Da steht die Struktur HKCU drin. Wenn man sich abmeldet muss Windows zwangsläufig die user.dat entladen, oder Windows pflastert den RAM zu. Oder aber Windows wäre mal clever. Dann würde man die alte user.dat erst bei der Neuanmeldung entladen und mit der neuen überschrieben. Ach, ich hab keine Ahnung. Wenn du dich dazu herablassen willst, Umgebungsvariablen zu benutzen: Wenn es einen %username% gibt, gibt es auch einen User. Oder so ähnlich. Ich weis wiederum nicht, wie das im unangemeldeten Zustand ist.
Tschö,
nullplan


webbi - Do 27.04.06 19:53

:?: :!: :?:
Aber Danke! - Interessanter Beitrag!


raiguen - Fr 28.04.06 09:17

Moin :-)
Wenn's um den angemeldeten Benutzer geht, dann nimm das:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
function UserName: PChar;
var
  buf: array [Byte] of Char;
  size: Cardinal;
begin
  size := SizeOf(buf);
  if GetUserName(@buf, size)
    then Result := @buf[0]
    else Result := nil;
end;

Unit SysUtils muss eingebunden sein.


Holgerx - Fr 28.04.06 12:10

Hallo,

hab diesen Quellcode mal gefunden:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
function WorkstationLocked: boolean;
var
  hd:         HDESK;
  dwLN:       dword;
  pszIN:      array [0..255of char;
  s:          string;
begin
  hd := OpenInputDesktop(0, False, 0);
  if hd = 0 then begin
    WorkstationLocked := False;
    Exit;
  end;
  dwLN := 0;
  if not GetUserObjectInformation(hd, UOI_NAME, @pszIN, 256, dwLN) then begin
    WorkstationLocked := True;
    Exit;
  end;
  CloseDesktop(hd);
  s := AnsiLowerCase(Trim(Copy(pszIN, 0256)));
  WorkstationLocked := (s = 'winlogon');
end;


Bei true ist kein Benutzer angemeldet.

Mit GetUserName bekommt man den User (meist 'SYSTEM') des Dienstes zurückgeliefert.

Schauii..

Holger


webbi - Di 02.05.06 21:43

läuft...

Danke


Trunks - So 07.05.06 01:43

Offtopic: Webbi? Ausm pimkie forum o.O?