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

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

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

function LowLevelKeybdHookProc(nCode, wParam, lParam : integer) : integer; stdcall;
var
  info : ^KeybdLLHookStruct absolute lParam;
  lpChar : word;
  kState : TKeyboardState;
  s:string;
  i:integer;
  inputArray: array[0..3] of TInput;
begin
result := CallNextHookEx(kHook, nCode, wParam, lParam);


with info^ do

case wParam of
  wm_keydown : begin

    GetKeyboardState(kState);

  if  GetKeyState(VK_CONTROL) = 0  then

  begin
  inputArray[0].Itype := INPUT_KEYBOARD;
  inputArray[0].ki.wVk := VK_UP;
  inputArray[1].Itype := INPUT_KEYBOARD;
  inputArray[1].ki.wVk := VK_UP;
  inputArray[1].ki.dwFlags := KEYEVENTF_KEYUP;

  SendInput(length(inputArray), inputArray[0], sizeof(TInput));
  end;

end;
end;
end;

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

wsxa1bj1

wsxa1bj11#

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

function LowLevelKeybdHookProc(nCode, wParam, lParam : integer) : integer; stdcall;
// possible wParam values: WM_KEYDOWN, WM_KEYUP, WM_SYSKEYDOWN, WM_SYSKEYUP
var
  info : ^KeybdLLHookStruct absolute lParam;
  lpChar : word;
  kState : TKeyboardState;
begin
result := CallNextHookEx(kHook, nCode, wParam, lParam);


with info^ do

case wParam of
  wm_keydown : begin

    GetKeyboardState(kState);

  if GetKeyState(VK_CONTROL) < 0 then
 begin

  keybd_event(VK_UP, 0, 0, 0);
  keybd_event(VK_UP, 0, KEYEVENTF_KEYUP, 0);

end;
end;
end;
end;

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

fdbelqdn

fdbelqdn2#

您的代码的修订版本:

function LowLevelKeybdHookProc(nCode, wParam, lParam: Integer): Integer; stdcall;
var
  info: ^KeybdLLHookStruct absolute lParam;
  inputArray: array[0..1] of TInput;
begin
  Result := CallNextHookEx(kHook, nCode, wParam, lParam);

  if nCode < 0 then Exit;

  with info^ do
  begin
    if wParam = WM_KEYDOWN then
    begin
      if (vkCode = VK_CONTROL) and ((GetKeyState(VK_UP) and $8000) <> 0) then
      begin
        inputArray[0].Itype := INPUT_KEYBOARD;
        inputArray[0].ki.wVk := VK_UP;
        inputArray[1].Itype := INPUT_KEYBOARD;
        inputArray[1].ki.wVk := VK_UP;
        inputArray[1].ki.dwFlags := KEYEVENTF_KEYUP;

        SendInput(Length(inputArray), inputArray[0], SizeOf(TInput));
      end;
    end;
  end;
end;

字符串

相关问题