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..255] of 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, 0, 256))); 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?
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!