BSOne.SFC/Tocsg.Module/SunkAssister/EXE_SunkAssister/Lock/DLockScreen.pas

143 lines
3.4 KiB
Plaintext
Raw Permalink Blame History

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.