2012-04-04 131 views
0

這裏的一個觸摸板虛擬鍵盤按鈕。當我按下屏幕上的'TOUCH'時,將會顯示'ab'。我試圖使用了BlockInput防止鼠標和鍵盤的任何輸入在2秒內按下觸摸按鍵之後。但它不起作用,我認爲需要爲BlockInput設置一個定時器,any1知道該怎麼做?這裏是我的代碼:使用了BlockInput到方框鍵盤和鼠標輸入

public partial class TRY 
    { 
     [System.Runtime.InteropServices.DllImportAttribute("user32.dll", EntryPoint = "BlockInput")] 
     [return: System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.Bool)] 
     public static extern bool BlockInput([System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.Bool)] bool fBlockIt); 
    } 

public void TOUCH(string key) 
    { 
     if (key == "Press") 
     { 
      PressAndRelease("a"); 
      PressAndRelease("b"); 
      ReleaseKeys(); 

      TRY.BlockInput(true); 
      Thread.Sleep(2000); 
      TRY.BlockInput(false); 
     } 
    } 
+0

你是不是檢查錯誤,你忽略了BlockInput()的返回值。所以確定,你不知道爲什麼它不起作用。當它返回false時拋出一個Win32Exception。 – 2012-04-04 05:09:00

+0

@HansPassant:THX烏拉圭回合信息。當我嘗試編譯它時,我的代碼沒有錯誤。但是在'Thread.Sleep(2000)'的時候,仍然可以接收用戶的輸入。你能告訴我解決問題的方法嗎? – hakunabean 2012-04-04 06:32:15

+0

避免在此(UI?)線程中使用睡眠並使用後臺工作程序。 – 2012-04-04 11:27:26

回答

0

BlockInput()在觸摸設備上無法可靠工作,因爲鼠標消息通常作爲觸摸消息路由,反之亦然。有兩種方法來阻止觸摸輸入:

1)一種HID類過濾器驅動程序安裝,這將阻止來自HID設備來的所有觸摸的消息。過濾器驅動程序將需要開發並簽署同內核代碼簽名能力證書一個代碼將需要駕駛員將在非測試機安裝

2)鉤子的所有過程,32位和64位,並且在該時間塊包括一些觸摸此類郵件的所有消息:

hkKey = SetWindowsHookEx(WH_CALLWNDPROC, procTouchMsg, hInstHookDll, 0); 
    hkKey2 = SetWindowsHookEx(WH_CALLWNDPROCRET, procTouchMsg, hInstHookDll, 0); 
    hkKey3 = SetWindowsHookEx(WH_GETMESSAGE, procTouchMsg, hInstHookDll, 0); 

    hkKey4 = SetWindowsHookEx(WH_SYSMSGFILTER, procTouchMsg, hInstHookDll, 0); 
    hkKey5 = SetWindowsHookEx(WH_MSGFILTER, procTouchMsg, hInstHookDll, 0); 
    hkKey6 = SetWindowsHookEx(WH_MOUSE, procTouchMsg, hInstHookDll, 0); 
    hkKey7 = SetWindowsHookEx(WH_MOUSE_LL, procTouchMsg, hInstHookDll, 0); 
    hkKey8 = SetWindowsHookEx(WH_KEYBOARD, procTouchMsg, hInstHookDll, 0); 
    hkKey9 = SetWindowsHookEx(WH_KEYBOARD_LL, procTouchMsg, hInstHookDll, 0); 

然後,只需從procTouchMsg函數返回NULL。要小心 - 這可能禁用所有輸入到您的設備,以便要麼停止後勾幾秒鐘或通過掛鉤排除一些生命過程。