gpt4 book ai didi

c - 如何模拟按键到任何当前聚焦的窗口?

转载 作者:行者123 更新时间:2023-12-04 07:10:10 25 4
gpt4 key购买 nike

我正在尝试更改键盘发送到应用程序的键。我已经创建了一个全局 Hook 并且可以阻止我想要的 key ,但我现在想发送一个新 key 。这是我的钩子(Hook)过程:

LRESULT __declspec (dllexport) HookProc(int nCode, WPARAM wParam, LPARAM lParam)
{
int ret;

if(nCode < 0)
{
return CallNextHookEx(hHook, nCode, wParam, lParam);
}

kbStruct = (KBDLLHOOKSTRUCT*)lParam;

printf("\nCaught [%x]", kbStruct->vkCode);

if(kbStruct->vkCode == VK_OEM_MINUS)
{
printf(" - oem minus!");
keybd_event(VK_DOWN, 72, KEYEVENTF_KEYUP, NULL);
return -1;
}
else if(kbStruct->vkCode == VK_OEM_PLUS)
{
printf(" - oem plus!");
keybd_event(VK_UP, 75, KEYEVENTF_KEYUP, NULL);
return -1;
}

return CallNextHookEx(hHook, nCode, wParam, lParam);
}

我已经尝试将 SendMessage 和 PostMessage 与 GetFocus() 和 GetForegroudWindow() 一起使用,但无法弄清楚如何为 WM_KEYUP 或 WM_KEYDOWN 创建 LPARAM。我还尝试了 keybd_event(),它确实模拟了键(我知道是因为这个钩子(Hook) proc 捕获了模拟的按键),包括 5 或 6 个不同的扫描代码,但没有任何影响我的前台窗口。

我基本上是想将我的 ms3200 上的缩放栏变成滚动控件,所以我什至可能发送了错误的键(向上和向下)。

最佳答案

调用 keybd_event 是正确的。如果您所做的只是按键,则窗口可能会处理按键消息。您确实需要先发送一个键,然后再发送一个键:

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

或者,更好的是,当 OEM key 下降时将 key 向下发送,当 OEM key 上升时将 key 向上发送。您可以通过 kbStruct->flags & LLKHF_UP 来判断 down/up 状态。

关于c - 如何模拟按键到任何当前聚焦的窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/497720/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com