Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Library: Windows API / MS.NET Framework API (https://www.delphipraxis.net/20-library-windows-api-ms-net-framework-api/)
-   -   Delphi Sperrung des Desktops erkennen (https://www.delphipraxis.net/97244-sperrung-des-desktops-erkennen.html)

CalganX 7. Aug 2007 15:21


Sperrung des Desktops erkennen
 
Möchte man auf das Sperren und das Entsperren des Desktops (Windows + L) reagieren, muss man die Windows-Nachricht WM_WTSESSION_CHANGE (MSDN-Referenz) abfangen. Von SirThornberry kommt dazu folgender Quellcode:
Delphi-Quellcode:
const
  NOTIFY_FOR_ALL_SESSIONS = 1;

type
  TForm1 = class(TForm)
  { ... }
  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;
Man bedient sich dabei zweier Funktionen, die in der wtsapi32.dll definiert wurden. Diese sind jedoch nur in Windows XP und Vista verfügbar. Es ist dabei zu beachten, dass das statische Einbinden der Bibliothek bei anderen Windows-Versionen fehlschlagen wird - es empfiehlt sich das dynamische Einbinden der Bibliotheken.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:53 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