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; 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.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, 'ÆÐ½º¿öµå°¡ Ʋ·È½À´Ï´Ù.', 'Password', MB_ICONWARNING or MB_OK); end; procedure TDlgLockScreen.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := caFree; end; end.