我可以使用SetWindowsHookEx函数挂钩自定义KeyboardProc。在钩子程序中,我可以返回1
来阻止键盘输入到达应用程序,但我正在尝试做的事实上是修改数据。例如。用户点击了密钥A
,我想用密钥B
替换它。
但是我对WPARAM
和LPARAM
参数所做的任何修改似乎都没有对应用程序产生任何影响,它仍然会收到原始密钥。例如。显示一个小伪代码:
LRESULT KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
memset(&wParam, 0, sizeof(WPARAM));
memset(&lParam, 0, sizeof(LPARAM));
// call the next procedure
return CallNextHookEx(keyHook, nCode, wParam, lParam);
}
无论我对这两个参数进行了哪些修改,它都不起作用,一旦应用程序读取WM_KEYDOWN
消息,它就会在点击时收到原始密钥。
有什么方法可以实际修改密钥吗?
答案 0 :(得分:0)
解决方案是使用SendInput
,但仅当lParam
- 应该类型转换为KBDLLHOOKSTRUCT*
时) - {{1}中有LLKHF_INJECTED
标志}} field。
以下是我的一个项目逐字复制的D language代码:
flags