如何修改KeyboardProc挂钩程序中的键?

时间:2014-02-21 08:20:08

标签: windows winapi hook

我可以使用SetWindowsHookEx函数挂钩自定义KeyboardProc。在钩子程序中,我可以返回1来阻止键盘输入到达应用程序,但我正在尝试做的事实上是修改数据。例如。用户点击了密钥A,我想用密钥B替换它。

但是我对WPARAMLPARAM参数所做的任何修改似乎都没有对应用程序产生任何影响,它仍然会收到原始密钥。例如。显示一个小伪代码:

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消息,它就会在点击时收到原始密钥。

有什么方法可以实际修改密钥吗?

1 个答案:

答案 0 :(得分:0)

解决方案是使用SendInput,但仅当lParam - 应该类型转换为KBDLLHOOKSTRUCT*时) - {{1}中有LLKHF_INJECTED标志}} field。

以下是我的一个项目逐字复制的D language代码:

flags