nicht wirklich die beste Methode. In einem Service oder mit ausreichend Berechtigungen schlägt diese Prüfung fehl.
[Edit]
Über google hab ich grad folgende Windows-Message gefunden: WM_WTSSESSION_CHANGE
Ich glaub das dürfte die sein die du suchst.
Hab mal was zusammengetippt:
Delphi-Quellcode:
const
NOTIFY_FOR_ALL_SESSIONS = 1;
type
[...]
private
fRegisterSuccess: Bool;
procedure WMWTSSESSIONCHANGE(var AMsg: TMessage); message WM_WTSSESSION_CHANGE;
end;
function WTSRegisterSessionNotification(AHandle: HWND; AFlags: DWORD): Bool; stdcall external 'wtsapi32.dll';
function WTSUnRegisterSessionNotification(AHandle: HWND): Bool; stdcall external 'wtsapi32.dll';
[...]
implementation
procedure TForm1.WMWTSSESSIONCHANGE(var AMsg: TMessage);
begin
case AMsg.WParam of
WTS_SESSION_LOCK : Memo1.Lines.Add('Gesperrt um: ' + TimeToStr(Time()));
WTS_SESSION_UNLOCK: Memo1.Lines.Add('Entsperrt um: ' + TimeToStr(Time()));
end;
inherited;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
fRegisterSuccess := WTSRegisterSessionNotification(Self.Handle, NOTIFY_FOR_ALL_SESSIONS);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
if fRegisterSuccess then
WTSUnRegisterSessionNotification(Self.Handle);
end;
[/Edit]