Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Feststellen wann bei Windows An- und abgemeldet? (https://www.delphipraxis.net/94353-feststellen-wann-bei-windows-und-abgemeldet.html)

stoxx 20. Jun 2007 12:29


Feststellen wann bei Windows An- und abgemeldet?
 
wie kann man feststellen, ob sich der User gerade bei Windows mit (WinTaste+L) abmeldet, und wenn er sich dann wieder anmeldet?

Phoenix 20. Jun 2007 12:36

Re: Feststellen wann bei Windows An- und abgemeldet?
 
Zitat:

Zitat von stoxx
ob sich der User gerade bei Windows mit (WinTaste+L) abmeldet

Gar nicht, da das keine Abmeldung ist. Der Desktop wird nur gesperrt (L steht für 'Lock').

SirThornberry 20. Jun 2007 12:37

Re: Feststellen wann bei Windows An- und abgemeldet?
 
für was benötigst du das und unter welchem Betriebssystem soll es laufen?

stoxx 20. Jun 2007 14:45

Re: Feststellen wann bei Windows An- und abgemeldet?
 
Zitat:

Zitat von SirThornberry
für was benötigst du das und unter welchem Betriebssystem soll es laufen?

für WindowsXP .. ein bestimmtes Programm, was vor dem sperren auf 4 Monitore verteil war, ist nach dem Wiederanmelden auf einmal nur auf einem Bildschirm zu sehen.
Ist aber nur das eine Programm.. wollte es nach dem Anmelden quasi wieder herstellen.

Gruß

_frank_ 20. Jun 2007 15:08

Re: Feststellen wann bei Windows An- und abgemeldet?
 
wenn ich dich richtig verstehe, sollte dir das helfen:

Delphi-Quellcode:
function IsWorkstationLocked: Boolean;
var
  hDesktop: HDESK;
begin
  Result := False;
  hDesktop := OpenDesktop('default',
    0, False,
    DESKTOP_SWITCHDESKTOP);
  if hDesktop <> 0 then
  begin
    Result := not SwitchDesktop(hDesktop);
    CloseDesktop(hDesktop);
  end;
end;
Gruß Frank

SirThornberry 20. Jun 2007 15:15

Re: Feststellen wann bei Windows An- und abgemeldet?
 
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]

_frank_ 20. Jun 2007 15:40

Re: Feststellen wann bei Windows An- und abgemeldet?
 
Liste der Anhänge anzeigen (Anzahl: 1)
mal das Beispiel-Programm von
http://read.excode.ru/art3405.html

(ist evtl. was für die CodeLib)

bisschen umfangreicher als der Code von SirT

HTH Frank

SirThornberry 20. Jun 2007 15:43

Re: Feststellen wann bei Windows An- und abgemeldet?
 
beim link ist eben ein kompletter Quelltext zu finden und nicht nur die relevanten Teile. Zudem sind die Constanten neu definiert wurden.

stoxx 20. Jun 2007 15:43

Re: Feststellen wann bei Windows An- und abgemeldet?
 
Hi ! besten Dank, der Tip mit WM_WTSSESSION_CHANGE war der Richtige, habs dann auch selber bei SwissdelphiCenter gefunden :-)
funktioniert wunderbar.
Dankeschön !

http://www.swissdelphicenter.ch/de/showcode.php?id=1109

Zacherl 20. Jun 2007 15:55

Re: Feststellen wann bei Windows An- und abgemeldet?
 
Für XP gibts auch noch die Winlogon Notifier .. dürfte die Beste Lösung sein. Gibt da verschiedene Events, die aufgerufen werden .. musst du mal im PSDK suchen ..


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:22 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz