我正在尝试创建一个安装全局钩子并捕获键盘输入的小程序。 现在,我试图将每个输入更改为“X”。 因此,如果我在任何地方写“你好”,它实际上会写“XXXXX”。 我成功地挂钩甚至停止传递我的钩子的任何输入,但我无法弄清楚如何改变输入。
相关方法:
IntPtr HookCallBack(int nCode, IntPtr wParam, IntPtr lParam)
{
// Trying to change the input.
Marshal.WriteInt32(lParam, 88);
// Locked down
if (isKeyboardLockedDown)
return new IntPtr(1); // A non-zero return value blocks additional processing of key strokes.
// Not locked down.
else
return NativeMethods.CallNextHookEx(hookId, nCode, wParam, lParam);
}
如上所述 - 如果我理解正确 - lParam是存储输入密钥的地址。 因此我用“X”覆盖它。 该方法由于某种原因不起作用。 有什么建议吗?
答案 0 :(得分:0)
如果输入为X:
调用CallNextHookEx()
否则
不要调用CallNextHookEx()。而是调用SendInput发布X。
合成击键,鼠标移动和按钮点击。
注意:一般来说,不调用CallNextHookEx()是不明智的。然后,用X替换所有输入通常是不明智的: - )
答案 1 :(得分:0)
HookProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if(flag){
flag = FALSE;
return CallNextHookEx(NULL, nCode, wParam, lParam);}
else{
flag = TRUE;
keybd_event(what ever you want);
return 0;}
}