首页  编辑  

检测桌面是否已经锁定

Tags: /超级猛料/OS.操作系统/桌面/   Date Created:

检测桌面是否已经锁定

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;

---------------------------------------

接收桌面锁定消息通知

{++++ GERMAN +++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Diese Unit enth ält nur das nötigste, da die WTS Funktionen in der

Borland-Windows-Unit nicht enthalten sind.

Wer Wert auf vollständigkeit legt, sollte sich die aktuelle win32api

von http://members.chello.nl/m.vanbrakel2/ laden

!!! Dieses Beispiel funktioniert erst ab Windows XP !!!

++++ ENGLISH +++++++++++++++++++++++++++++++++++++++++++++++++++++++++

This unit only holds the smalles amount of needed functions, because

the WTS-Functions are not included in Borland's windows unit.

who wants to have an up-to-date win32api should check

http://members.chello.nl/m.vanbrakel2/

!!! The given example will only work on Windows XP or higher !!!

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}

// UNIT SIMPLEWTS START

unit simpleWTS;

interface

uses

 Windows;

function WTSRegisterSessionNotification(hWnd: HWND; dwFlags: DWORD): BOOL; stdcall;

function WTSUnRegisterSessionNotification(hWND: HWND): BOOL; stdcall;

const

 NOTIFY_FOR_ALL_SESSIONS  = 1;

 NOTIFY_FOR_THIS_SESSIONS = 0;

implementation

function WTSRegisterSessionNotification;

 external 'wtsapi32.dll' Name 'WTSRegisterSessionNotification';

function WTSUnRegisterSessionNotification;

 external 'wtsapi32.dll' Name 'WTSUnRegisterSessionNotification';

end.

// UNIT SIMPLEWTS EOF

{ Nun das Formular, das benachrichtigt werden soll }

{ Now the form that should be notified if the Status changed }

{ nicht vergessen die "simpleWTS" mit in die uses-Klausel aufzunehmen }

{ don't forget to "use" the simpleWTS-unit }

// UNIT UFRMMAIN START

unit UfrmMain;

interface

uses

  { ... everything else like Windows, SysUtils, Controls }, simpleWTS;

type

 TfrmMain = class(TForm)

   Label1: TLabel;

   procedure FormCreate(Sender: TObject);

 private

   FintLockedCount: Integer;    { speichert, wie oft der Rechner gesperrt wurde }

   { will save how often the Workstation got locked }

   procedure WndProc(var Message: TMessage); override;

   { wir benötigen eine eigene WndProc um die WTS-Messages abzufangen }

   { we need our own WndProc to catch all those WTS-Messages we need }

 public

 end;

var

 frmMain: TFrmMain;

implementation

procedure TfrmMain.WndProc(var Message: TMessage);

begin

 case Message.Msg of

   WM_WTSSESSION_CHANGE:

     begin

       if Message.wParam = WTS_SESSION_LOCK then

       begin

         Inc(FintLockedCount);

       end;

       if Message.wParam = WTS_SESSION_UNLOCK then

       begin

         Label1.Caption := 'Die Session wurde bereits ' +

           IntToStr(FintLockedCount) + ' mal gesperrt.';

       end;

     end;

 end;

 inherited;

end;

procedure TfrmMain.FormCreate(Sender: TObject);

begin

 WTSRegisterSessionNotification(Handle, NOTIFY_FOR_ALL_SESSIONS);

 FintLockedCount := 0;

end;

end.

// UNIT UFRMMAIN EOF