143 lines
3.4 KiB
Plaintext
143 lines
3.4 KiB
Plaintext
unit DLockScreen;
|
||
|
||
interface
|
||
|
||
uses
|
||
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
|
||
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls,
|
||
System.Generics.Collections, Vcl.ExtCtrls;
|
||
|
||
type
|
||
TDlgLockScreen = class(TForm)
|
||
pnClient: TPanel;
|
||
tCheckTk: TTimer;
|
||
pnPass: TPanel;
|
||
edPass: TEdit;
|
||
btnOk: TButton;
|
||
procedure FormClose(Sender: TObject; var Action: TCloseAction);
|
||
procedure btnOkClick(Sender: TObject);
|
||
procedure tCheckTkTimer(Sender: TObject);
|
||
private
|
||
{ Private declarations }
|
||
LsList_: TList<TDlgLockScreen>;
|
||
procedure OnLockScreenNotify(Sender: TObject; const Item: TDlgLockScreen; Action: TCollectionNotification);
|
||
procedure SetPosition(aMonitor: TMonitor);
|
||
public
|
||
{ Public declarations }
|
||
Constructor Create(aOwner: TComponent); override;
|
||
Destructor Destroy; override;
|
||
|
||
procedure DoLockScreen;
|
||
end;
|
||
|
||
var
|
||
DlgLockScreen: TDlgLockScreen;
|
||
|
||
implementation
|
||
|
||
uses
|
||
DAstMain, Tocsg.Process;
|
||
|
||
{$R *.dfm}
|
||
|
||
Constructor TDlgLockScreen.Create(aOwner: TComponent);
|
||
begin
|
||
Inherited Create(aOwner);
|
||
LsList_ := TList<TDlgLockScreen>.Create;
|
||
end;
|
||
|
||
Destructor TDlgLockScreen.Destroy;
|
||
begin
|
||
FreeAndNil(LsList_);
|
||
{$IFDEF DEBUG}
|
||
if DebugHook = 0 then
|
||
{$ENDIF}
|
||
begin
|
||
keybd_event(VK_ESCAPE, 0, KEYEVENTF_KEYUP, 0);
|
||
keybd_event(VK_LWIN, 0, 2, 0);
|
||
keybd_event(VK_RWIN, 0, 2, 0);
|
||
keybd_event(VK_LMENU, $B8, 2, 0);
|
||
keybd_event(VK_RMENU, $B8, 2, 0);
|
||
keybd_event(VK_CONTROL, $9D, 2, 0);
|
||
keybd_event(VK_LCONTROL, $9D, 2, 0);
|
||
keybd_event(VK_RCONTROL, $9D, 2, 0);
|
||
gMain.KeyMon.SetDisableKey_ESC(false);
|
||
gMain.KeyMon.SetDisableKey_Win(false);
|
||
gMain.KeyMon.SetDisableKey_Alt(false);
|
||
gMain.KeyMon.SetDisableKey_Ctrl(false);
|
||
end;
|
||
Inherited;
|
||
end;
|
||
|
||
procedure TDlgLockScreen.OnLockScreenNotify(Sender: TObject; const Item: TDlgLockScreen; Action: TCollectionNotification);
|
||
begin
|
||
case Action of
|
||
cnAdded: ;
|
||
cnRemoved: Item.Close;
|
||
cnExtracted: ;
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgLockScreen.DoLockScreen;
|
||
var
|
||
i: Integer;
|
||
dlg: TDlgLockScreen;
|
||
begin
|
||
for i := 0 to Screen.MonitorCount - 1 do
|
||
begin
|
||
if Screen.Monitors[i].Primary then
|
||
begin
|
||
{$IFDEF DEBUG}
|
||
if DebugHook = 0 then
|
||
{$ENDIF}
|
||
begin
|
||
gMain.KeyMon.SetDisableKey_ESC(true);
|
||
gMain.KeyMon.SetDisableKey_Win(true);
|
||
gMain.KeyMon.SetDisableKey_Alt(true);
|
||
gMain.KeyMon.SetDisableKey_Ctrl(true);
|
||
end;
|
||
|
||
tCheckTk.Enabled := true;
|
||
SetPosition(Screen.Monitors[i]);
|
||
Show;
|
||
end else begin
|
||
dlg := TDlgLockScreen.Create(Self);
|
||
dlg.pnClient.Visible := false;
|
||
dlg.SetPosition(Screen.Monitors[i]);
|
||
dlg.Show;
|
||
end;
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgLockScreen.SetPosition(aMonitor: TMonitor);
|
||
begin
|
||
Left := aMonitor.Left;
|
||
Top := aMonitor.Top;
|
||
Width := aMonitor.Width;
|
||
Height := aMonitor.Height;
|
||
|
||
pnPass.Left := (Width div 2) - (pnPass.Width div 2);
|
||
pnPass.Top := (Height div 2) - (pnPass.Height div 2);
|
||
end;
|
||
|
||
procedure TDlgLockScreen.tCheckTkTimer(Sender: TObject);
|
||
begin
|
||
TerminateProcessByName('taskmgr.exe');
|
||
end;
|
||
|
||
procedure TDlgLockScreen.btnOkClick(Sender: TObject);
|
||
begin
|
||
edPass.Text := Trim(edPass.Text);
|
||
if edPass.Text = 'qkswl9748' then
|
||
Close
|
||
else
|
||
MessageBox(Handle, '<27>н<EFBFBD><D0BD><EFBFBD><EFBFBD>尡 Ʋ<>Ƚ<EFBFBD><C8BD>ϴ<EFBFBD>.', 'Password', MB_ICONWARNING or MB_OK);
|
||
end;
|
||
|
||
procedure TDlgLockScreen.FormClose(Sender: TObject; var Action: TCloseAction);
|
||
begin
|
||
Action := caFree;
|
||
end;
|
||
|
||
end.
|