我需要一个代码,当我按住键盘上的 ctrl 按钮时,它将不断地按下向上箭头按钮 - 模拟 ctrl (按下直到我释放它)+向上箭头。 到目前为止我得到的代码:
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;
我尝试自己制作,但有些东西无法正常工作 - 就像一个奇怪的鼠标和键盘故障,它使箭头按钮,有时甚至鼠标右键单击保持按下状态,并且只有在单击 ctrl+alt+delete 时才能修复。我将不胜感激任何帮助。 谢谢你。
代码的修订版本:
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;