현재 특정 키보드에서 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을 실행하기 전에 후크가 실행되는 것입니다. 따라서 키 입력을 보낸 키보드를 식별 할 수 없습니다. 나는 그 일을하는 법을 모른다. 아마 후크의 타입을 바꿀 수도있다. (낮은 레벨의 키보드 후크를 사용하지 말고, 사용자 공간 레벨의 키보드 후크를 사용한다.)
아니면 누군가 내가 원하는 것을하는 영리한 방법을 알고 있을까요?
저는이 요청이 실제로 복잡하다는 것을 알고 있습니다. 자세한 내용을 요청하는 것을 주저하지 마십시오.
차단 라이브러리 사용을 고려해 보셨습니까? http://oblita.com/Interception.html –
매우 멋져 보입니다. 나는이 방법 (감사)을 파헤 것이다! – Louisbob