2012-04-04 3 views
0

여기에는 터치 패드 가상 키보드 버튼이 있습니다. 화면에서 'TOUCH'를 누르면 'ab'가 표시됩니다. TOUCH 버튼을 누른 직후에 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을 던집니다. –

+0

@HansPassant : Thx 정보입니다. 내 코드는 컴파일하려고 할 때 오류가 없습니다. 그러나'Thread.Sleep (2000)'시대에는 사용자의 입력을 여전히받을 수 있습니다. 그것을 고칠 수있는 방법을 보여줄 수 있습니까? – hakunabean

+0

이 (UI?) 스레드에서 절전 모드를 사용하지 말고 배경 작업자를 사용하십시오. –

답변

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을 반환하십시오. 주의를 기울이십시오 - 장치에 대한 모든 입력을 비활성화하여 몇 초 후에 훅을 중지하거나 몇 가지 중요한 프로세스에 대한 후킹을 제외시킬 수 있습니다.

관련 문제