簡體   English   中英

使用全局掛鈎更改鍵盤事件不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM