delphi 重复该功能,直到我释放CTRL按钮

wbgh16ku  于 2024-01-07  发布在  其他
关注(0)|答案(2)|浏览(149)

我需要一个代码,这将是不断按下箭头向上按钮时,我在键盘上按住按钮-模拟按钮(按下,直到我释放它)+箭头向上.代码我到目前为止:

  1. function LowLevelKeybdHookProc(nCode, wParam, lParam : integer) : integer; stdcall;
  2. var
  3. info : ^KeybdLLHookStruct absolute lParam;
  4. lpChar : word;
  5. kState : TKeyboardState;
  6. s:string;
  7. i:integer;
  8. inputArray: array[0..3] of TInput;
  9. begin
  10. result := CallNextHookEx(kHook, nCode, wParam, lParam);
  11. with info^ do
  12. case wParam of
  13. wm_keydown : begin
  14. GetKeyboardState(kState);
  15. if GetKeyState(VK_CONTROL) = 0 then
  16. begin
  17. inputArray[0].Itype := INPUT_KEYBOARD;
  18. inputArray[0].ki.wVk := VK_UP;
  19. inputArray[1].Itype := INPUT_KEYBOARD;
  20. inputArray[1].ki.wVk := VK_UP;
  21. inputArray[1].ki.dwFlags := KEYEVENTF_KEYUP;
  22. SendInput(length(inputArray), inputArray[0], sizeof(TInput));
  23. end;
  24. end;
  25. end;
  26. end;

字符串
我试着自己做,但有些东西不能正常工作-这就像一个奇怪的鼠标和键盘故障,这使得箭头按钮,有时甚至鼠标右键点击按下,只能在点击center +alt+delete时修复。我将感谢任何帮助。谢谢。

wsxa1bj1

wsxa1bj11#

这一个似乎是工作,但有某种延迟:

  1. function LowLevelKeybdHookProc(nCode, wParam, lParam : integer) : integer; stdcall;
  2. // possible wParam values: WM_KEYDOWN, WM_KEYUP, WM_SYSKEYDOWN, WM_SYSKEYUP
  3. var
  4. info : ^KeybdLLHookStruct absolute lParam;
  5. lpChar : word;
  6. kState : TKeyboardState;
  7. begin
  8. result := CallNextHookEx(kHook, nCode, wParam, lParam);
  9. with info^ do
  10. case wParam of
  11. wm_keydown : begin
  12. GetKeyboardState(kState);
  13. if GetKeyState(VK_CONTROL) < 0 then
  14. begin
  15. keybd_event(VK_UP, 0, 0, 0);
  16. keybd_event(VK_UP, 0, KEYEVENTF_KEYUP, 0);
  17. end;
  18. end;
  19. end;
  20. end;

字符串
就像我真的要按住控制键一段时间。我需要React更快的东西。

展开查看全部
fdbelqdn

fdbelqdn2#

您的代码的修订版本:

  1. function LowLevelKeybdHookProc(nCode, wParam, lParam: Integer): Integer; stdcall;
  2. var
  3. info: ^KeybdLLHookStruct absolute lParam;
  4. inputArray: array[0..1] of TInput;
  5. begin
  6. Result := CallNextHookEx(kHook, nCode, wParam, lParam);
  7. if nCode < 0 then Exit;
  8. with info^ do
  9. begin
  10. if wParam = WM_KEYDOWN then
  11. begin
  12. if (vkCode = VK_CONTROL) and ((GetKeyState(VK_UP) and $8000) <> 0) then
  13. begin
  14. inputArray[0].Itype := INPUT_KEYBOARD;
  15. inputArray[0].ki.wVk := VK_UP;
  16. inputArray[1].Itype := INPUT_KEYBOARD;
  17. inputArray[1].ki.wVk := VK_UP;
  18. inputArray[1].ki.dwFlags := KEYEVENTF_KEYUP;
  19. SendInput(Length(inputArray), inputArray[0], SizeOf(TInput));
  20. end;
  21. end;
  22. end;
  23. end;

字符串

展开查看全部

相关问题