📄 hkedit.pas
字号:
47: Result := vkT; // T
48: Result := vkU; // U
49: Result := vkV; // V
50: Result := vkW; // W
51: Result := vkX; // X
52: Result := vkY; // Y
53: Result := vkZ; // Z
54: Result := vkNumpad0; // Num 0
55: Result := vkNumpad1; // Num 1
56: Result := vkNumpad2; // Num 2
57: Result := vkNumpad3; // Num 3
58: Result := vkNumpad4; // Num 4
59: Result := vkNumpad5; // Num 5
60: Result := vkNumpad6; // Num 6
61: Result := vkNumpad7; // Num 7
62: Result := vkNumpad8; // Num 8
63: Result := vkNumpad9; // Num 9
64: Result := vkMultiply; // Num *
65: Result := vkAdd; // Num +
66: Result := vkSubtract; // Num -
67: Result := vkDecimal; // Num .
68: Result := vkDivide; // Num /
69: Result := vkF1; // F1
70: Result := vkF2; // F2
71: Result := vkF3; // F3
72: Result := vkF4; // F4
73: Result := vkF5; // F5
74: Result := vkF6; // F6
75: Result := vkF7; // F7
76: Result := vkF8; // F8
77: Result := vkF9; // F9
78: Result := vkF10; // F10
79: Result := vkF11; // F11
80: Result := vkF12; // F12
81: Result := vkF13; // F13
82: Result := vkF14; // F14
83: Result := vkF15; // F15
84: Result := vkF16; // F16
85: Result := vkF17; // F17
86: Result := vkF18; // F18
87: Result := vkF19; // F19
88: Result := vkF20; // F20
89: Result := vkF21; // F21
90: Result := vkF22; // F22
91: Result := vkF23; // F23
92: Result := vkF24; // F24
93: Result := vkNumlock; // Numlock
94: Result := vkScroll; // Scrolllock
95: Result := vkApps; // Application key
end;
end;
function TfrmHotkeyEdit.Modifiers(sHotkey: String): THKModifiers;
begin
Result := [];
if Pos('Ctrl', sHotkey) > 0 then Include(Result, hkCtrl);
if Pos('Alt', sHotkey) > 0 then Include(Result, hkAlt);
if Pos('Shift', sHotkey) > 0 then Include(Result, hkShift);
if Pos('Win', sHotkey) > 0 then Include(Result, hkExt);
end;
procedure TfrmHotkeyEdit.SysHotkeysHotKey(Sender: TObject; Index: Integer);
begin
HotkeyPressed(Index);
end;
procedure TfrmHotkeyEdit.FormDestroy(Sender: TObject);
var
i : integer;
begin
CommandLines.Free;
WindowList.Free;
ChangeClipboardChain(Handle, hwndClipViewer);
Clipboards.Free;
with TInifile.Create(ChangeFileExt(Application.ExeName, '.ini')) do
begin
WriteInteger('Settings', 'ClipboardCount', udClipboards.Position);
WriteInteger('EditorWindow', 'Width', Width);
WriteInteger('EditorWindow', 'Height', Height);
for i:=0 to lvHotkeys.Columns.Count-1 do
with lvHotkeys.Columns[i] do
WriteInteger('EWColumns', Caption, Width);
Free;
end;
end;
procedure TfrmHotkeyEdit.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if not Quitting then
begin
Action := caNone;
Hide;
end;
end;
procedure TfrmHotkeyEdit.mnuEditHotkeysClick(Sender: TObject);
begin
EditHotkeys;
end;
procedure TfrmHotkeyEdit.wmEditKeys(var Msg: TMessage);
begin
if Msg.wParam = WM_EDITKEYS then EditHotkeys;
end;
procedure TfrmHotkeyEdit.wmQuitHotK(var Msg: TMessage);
begin
if Msg.wParam = WM_QUITHOTK then Quit;
end;
procedure TfrmHotkeyEdit.EditHotkeys;
begin
WindowState := wsNormal;
Show;
SetWindowPos(Handle, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE or SWP_SHOWWINDOW);
SetForeGroundWindow(Handle);
end;
procedure TfrmHotkeyEdit.mnuExitClick(Sender: TObject);
begin
Quit;
end;
procedure TfrmHotkeyEdit.Quit;
begin
Quitting := True;
Close;
end;
procedure TfrmHotkeyEdit.SetChanged(Value: Boolean);
begin
if FChanged<>Value then
begin
FChanged := Value;
if FChanged then SysHotkeys.Clear;
btnApply.Enabled := FChanged;
end;
end;
procedure TfrmHotkeyEdit.btnApplyClick(Sender: TObject);
begin
SaveHotkeys;
end;
procedure TfrmHotkeyEdit.FormResize(Sender: TObject);
begin
cboHotkey.Width := ClientWidth - 376;
edtDescription.Width := ClientWidth - 184;
edtKeysToSend.Width := ClientWidth - 184;
cboActions.Width := ClientWidth - 184;
cboParams.Width := ClientWidth - 184;
cboClipboard.Width := ClientWidth - 184;
lblShow.Left := ClientWidth - 220;
cboShow.Left := ClientWidth - 185;
udClipboards.Left := ClientWidth - 107;
edtClipboards.Left := udClipboards.Left - edtClipboards.Width;
lblClipboards.Left := edtClipboards.Left - lblClipboards.Width - 5;
edtCommandLine.Width := ClientWidth - 310;
end;
procedure TfrmHotkeyEdit.wmGetMinMaxInfo(var Msg: TWMGETMINMAXINFO);
begin
Msg.MinMaxInfo^.ptMinTrackSize.X := 411;
Msg.MinMaxInfo^.ptMinTrackSize.Y := 244;
end;
procedure TfrmHotkeyEdit.wmDrawClipboard(var Msg: TMessage);
begin
DrawClipboardStatus(Clipboards.ActiveClipboard);
SendMessage(hWnd(Msg.lParam), Msg.Msg, Msg.wParam, Msg.lParam);
end;
procedure TfrmHotkeyEdit.wmChangeCBChain(var Msg: TMessage);
begin
if hWnd(Msg.wParam)=hwndClipViewer then
hwndClipViewer := hWnd(Msg.wParam)
else
SendMessage(hWnd(Msg.lParam), Msg.Msg, Msg.wParam, Msg.lParam);
end;
procedure TfrmHotkeyEdit.atiHotkeysEndAnimation(Sender: TObject);
begin
atiHotkeys.Style := tsNormal;
end;
procedure TfrmHotkeyEdit.mnuAboutClick(Sender: TObject);
begin
AboutBox;
end;
procedure TfrmHotkeyEdit.AboutBox;
begin
frmAbout.Show;
SetForeGroundWindow(frmAbout.Handle);
end;
procedure TfrmHotkeyEdit.ViewHotkeys;
begin
frmHotkeyList.Show;
SetForeGroundWindow(frmHotkeyList.Handle);
end;
procedure TfrmHotkeyEdit.mnuListHotkeysClick(Sender: TObject);
begin
ViewHotkeys;
end;
procedure TfrmHotkeyEdit.HotkeyMenuClick(Sender: TObject);
begin
HotkeyPressed(TMenuItem(Sender).Tag);
end;
function TfrmHotkeyEdit.GetDelay(var Sel: String): Integer;
var
P : Integer;
begin
P := Pos('D=', Sel);
if P=1 then
begin
Delete(Sel, 1, P+1);
P := Pos(';', Sel);
Result := StrToIntDef(Copy(Sel, 1, P-1), 0);
Delete(Sel, 1, P);
end
else
Result := -1
end;
function TfrmHotkeyEdit.NextItem(var Commands: String): String;
var
P : Integer;
begin
P := Pos(';', Commands);
if P>0 then
begin
Result := Copy(Commands, 1, P-1);
Delete(Commands, 1, P);
end
else
begin
Result := Commands;
Commands := '';
end;
end;
procedure TfrmHotkeyEdit.MultipleHotkeys(Command: String);
var
i,
iDelay,
iNDelay : Integer;
ItemID : String;
First : Boolean;
begin
iDelay := GetDelay(Command);
if iDelay = -1 then iDelay := 0;
ItemID := NextItem(Command);
First := True;
while ItemID<>'' do
begin
i := 0;
while i<lvHotkeys.Items.Count do
with lvHotkeys.Items[i] do
if SubItems[ITEM_ID]=ItemID then
begin
if First then First := False else Sleep(iDelay);
PerformAction(cboActions.Items.IndexOf(SubItems[ITEM_ACTION]), SubItems[ITEM_DATA], 0, True);
i := lvHotkeys.Items.Count;
end
else
inc(i);
iNDelay := GetDelay(Command);
if iNDelay<>-1 then iDelay := iNDelay;
ItemID := NextItem(Command);
end;
end;
function TfrmHotkeyEdit.WindowsVersion: DWord;
var
Version : TOSVersionInfo;
begin
Version.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
GetVersionEx(Version);
Result := Version.dwPlatformId;
end;
procedure TfrmHotkeyEdit.ExitWindowsCommand(Command: Integer);
const
Flags: array[0..2] of integer = (EWX_SHUTDOWN, EWX_LOGOFF, EWX_REBOOT);
var
OldPriv,
CurPriv : TTokenPrivileges;
TokenHandle,
CP : THandle;
PrivLen : DWord;
begin
if WindowsVersion = VER_PLATFORM_WIN32_NT then
begin
CP := GetCurrentProcess;
if OpenProcessToken(CP, DWord(TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY), TokenHandle) then
begin
if LookupPrivilegeValue(nil, 'SeShutdownPrivilege', CurPriv.Privileges[0].LUID) then
begin
CurPriv.PrivilegeCount := 1;
CurPriv.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(TokenHandle, False, CurPriv, 0, OldPriv, PrivLen);
end;
end;
end;
case Command of
0..2 : ExitWindowsEx(Flags[Command], 0);
3 : WinExec(PChar(ExtractFilePath(Application.ExeName) + 'HKRESTRT.EXE'), SW_SHOW);
4 : WinExec(PChar('HKTODOS.PIF'), SW_SHOW);
5 : SetSystemPowerState(True, False);
end;
end;
procedure TfrmHotkeyEdit.ExecProgram(Command: String);
const
ShowModes: array[0..2] of UINT = (SW_NORMAL, SW_SHOWMAXIMIZED, SW_SHOWMINIMIZED);
var
ShowMode: String;
P : Integer;
begin
P := Pos(';', Command);
if P=0 then
ShowMode := cboShow.Items[0]
else
begin
ShowMode := Copy(Command, P+1, Length(Command));
Delete(Command, P, Length(Command));
end;
WinExec(PChar(Command), ShowModes[cboShow.Items.IndexOf(ShowMode)]);
end;
procedure TfrmHotkeyEdit.DrawClipOnBmp(IcoBmp: TBitmap; sText: String);
var
iWidth, iHeight: Integer;
begin
with IcoBmp do
begin
Canvas.Font.Name := 'Small Fonts';
Canvas.Font.Size := 6;
Canvas.Font.Color := clWhite;
if Clipboards.DataOnClipboard then Canvas.Brush.Color := clBlue else Canvas.Brush.Color := clNavy;
Canvas.Pen.Style := psClear;
iHeight := Canvas.TextHeight(sText);
iWidth := Canvas.TextWidth(sText)+1;
Canvas.Ellipse(Width-iWidth-2, Height-iHeight-1, Width+1, Height+1);
Canvas.Brush.Style := bsClear;
Canvas.TextOut(Width- ((iWidth+2) div 2) - (Canvas.TextWidth(sText) div 2)-1, Height-iHeight, sText);
Canvas.Brush.Style := bsSolid;
end;
end;
procedure TfrmHotkeyEdit.DrawClipboardStatus(Index: Integer);
var
AndMask, XOrMask: TBitmap;
NewIcon : TIcon;
IconInfo : TIconInfo;
begin
{Create the "XOr" mask}
XOrMask := TBitmap.Create;
try
XOrMask.Width := imgIcon.Picture.Width;
XOrMask.Height := imgIcon.Picture.Height;
{Draw on the "XOr" mask}
imgIcon.Transparent := False;
XOrMask.Canvas.Draw(0, 0, imgIcon.Picture.Bitmap);
DrawClipOnBmp(XorMask, IntToStr(Index+1));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -