2012-10-25 3 views
4

현재 특정 키보드에서 HID를 사용하여 필터링 된 키 입력을 차단하는 프로그램을 만들고 있습니다. 나는 키 입력을 얻고이있는 키보드를 알 수 있습니다 :rawinput에서 낮은 수준의 키보드 후크 및 키 입력

이제 http://www.codeproject.com/Articles/17123/Using-Raw-Input-from-C-to-handle-multiple-keyboard

, 그것은 잘 작동 : 그래서 특정 장치에 의해 전송 된 어떤 키 입력을 알고, 나는이 위대한 튜토리얼에서 영감을 RawInput의 기술을 사용 그것을 생성했습니다.

내 프로젝트의 어려운 부분은이 특정 키보드의 키 입력을 가로 채고 차단하여 이러한 키 입력이 집중된 응용 프로그램에 도달하는 것을 방지하는 것입니다.

그래서 자연스러운 해결책은 창 핸들이있는 모든 현재 스레드에서 낮은 수준의 전역 후크였습니다.

내가 사용하고 그렇게이 페이지의 코드를 적용 : http://blogs.msdn.com/b/toub/archive/2006/05/03/589423.aspx

나는 내 작품에 혼란을 넣어 방지하기 위해 Visual Studio에서 새 프로젝트를 만들었습니다. 몇 가지 조사 후, 나는 콜백 함수의 값 (-1)를 반환하여, 모든 응용 프로그램에 키 입력을 차단 할 수 있었다 :

private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam) 
{ 
//Check if we have a key to pass 

if (
    nCode >= 0 && ( 
    (wParam == (IntPtr)WM_KEYDOWN) || (wParam == (IntPtr)WM_KEYUP)) 
    ) 
{ 
    int vkCode = Marshal.ReadInt32(lParam); 
    if ((Keys)vkCode == Form1.KeysToIgnore) 
    { 
     return (IntPtr)(-1); 
    } 
} 
return CallNextHookEx(_hookID, nCode, wParam, lParam); 
} 

이 모두 함께 넣어 (후크 프로 시저 및 키 입력 감지)하려면, I 최종 프로젝트에 두 개의 스레드를 만들 :

1 : 모든 창 및 블록 certains 후크 사용

을 키 입력 :

가 2 확인하고 장치에 각 키 입력을 연결하는 RawInput를 사용하여

스레드 1은 모든 윈도우 응용 프로그램에 전송 된 모든 메시지와 특정 키보드의 휴지통 키 스트로크를 읽는 스레드 2로 차단하기 위해 키 입력을 보내도록 설계되었습니다. 정확하게이 두 스레드가 동기화되어 있습니다.

문제는 Rawinput을 실행하기 전에 후크가 실행되는 것입니다. 따라서 키 입력을 보낸 키보드를 식별 할 수 없습니다. 나는 그 일을하는 법을 모른다. 아마 후크의 타입을 바꿀 수도있다. (낮은 레벨의 키보드 후크를 사용하지 말고, 사용자 공간 레벨의 키보드 후크를 사용한다.)

아니면 누군가 내가 원하는 것을하는 영리한 방법을 알고 있을까요?

저는이 요청이 실제로 복잡하다는 것을 알고 있습니다. 자세한 내용을 요청하는 것을 주저하지 마십시오.

+0

차단 라이브러리 사용을 고려해 보셨습니까? http://oblita.com/Interception.html –

+0

매우 멋져 보입니다. 나는이 방법 (감사)을 파헤 것이다! – Louisbob

답변

3

좋아, 침묵은 Dogood 나에게 좋은 단서를 얻을 :

도서관 차단 내 사용에 적합합니다. 당신은 여기에서 찾을 수 있습니다 : 나는 같은 소프트웨어에 의해 빨간색되는 입력으로 사용할 수 없습니다 (HID 키보드 에뮬레이션을 사용) 바코드 스캐너를 만들기위한 생각 할 노력하고있어

https://github.com/oblitum/Interception

2

.

나는 이걸 발견하지만 난 그게 전체 코드 아니라 내가 C 번호에 새로 온 이후로 난 당신이 날 수 있도록 도울 수 있기를 바랍니다, 그것을 사용하는 방법을 잘 모르는 :

Intercept keyboard

1

을 .net 응용 프로그램에서 이것을 구현하는 경우 개인적으로 EasyHook을 권장합니다. 이렇게하면 키 입력을 차단하는 것 이상을 할 수 있으며 사용하기가 매우 쉽습니다.