[英]Changing keyboard events with global hook doesn't work
我正在嘗試制作一個安裝全局鈎子並捕獲鍵盤輸入的小程序。 目前,我正在嘗試將每個輸入更改為“ X”。 因此,如果我在任何地方寫“ hello”,它將實際上寫為“ 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”覆蓋它。 出於某種原因,該方法不起作用。 有什么建議么?
如果輸入是X:
調用CallNextHookEx()
除此以外
不要調用CallNextHookEx()。 而是,調用SendInput發布X。
合成擊鍵,鼠標動作和按鈕單擊。
注意:通常,不調用CallNextHookEx()是不明智的。 再說一次,用X代替所有輸入通常是不明智的:-)
iv'在C中完成了類似的項目。無需更改數據即可生成輸入。 它工作流暢,並且不會減慢鍵入過程的速度。 我使用了全局標志。 我生成的輸入為True,用戶輸入的為false。 這幾乎是它的外觀:
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;}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.