⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hkedit.pas

📁 HOOK
💻 PAS
📖 第 1 页 / 共 4 页
字号:
    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 + -