2012-08-17 2 views
3

저는 영숫자 키를 제외한 모든 키를 막기 위해 사용하는 WinAPI 하위 레벨 키보드 후크가 포함 된 C# 응용 프로그램을 작성했습니다.전체 로우 레벨 키보드 후크 - 경쟁 조건

문제는 다른 프로그램 (로그인 할 때 시작하는 프로그램)도 키보드 후크 (계산기, 브라우저 등의 응용 프로그램을 시작하는 데 사용)입니다. 이러한 프로그램은 내 후크 콜백에 도달하기 전에 이미 이러한 응용 프로그램을 열었으므로이 작업을 중지 할 방법이 없습니다.

다른 것들보다 먼저 내 후크를 호출 할 수있는 방법이 있습니까?


편집

는 혼란을 정리하기 - 내 응용 프로그램에는 설치가없는 단일 실행 파일입니다. 그것은 요구에 따라 실행됩니다.

다른 후크를 대신 할 수 있어야합니다. 즉, 내 후크 콜백을 먼저 호출하도록 할 수 있어야합니다. 다른 사람들이 이미 SetWindowsHookEx 메서드를 호출 했음에도 불구하고 말입니다.

+2

호기심, 왜 이걸 필요합니까? –

+0

@HassanBoutougha : 왜 스파이라고합니까? 내 게시물 명확하게 내가 키 입력을 방지하고있다. –

+1

@ L.B : 제 아기가 아무런 문제없이 키보드에 타이핑 할 수있는 응용 프로그램을 작성했습니다. 그는 브라우저와 계산기를 열어두고 있습니다. –

답변

0

당신은

[HKEY_CURRENT_USER \ 소프트웨어 \ 마이크로 소프트 \ 윈도우 \ CurrentVersion \ 실행]

레지스트리 값을 편집하여 설치 프로그램을 사용할 수 없습니다? 나는 명시 적으로 당신이하려고하는 것을 명시 적으로 시도한 적이 없다 ... 나는 당신이 설치자로부터이 키 값들을 재주문 할 수 있는지 확신 할 수 없지만 이것은 일찌기 잡아야한다. ...

또는 다음 중 하나를 [HKEY_LOCAL_MACHINE \ 소프트웨어 \ 마이크로 소프트 \ 윈도우 \ CurrentVersion \ 실행] [HKEY_LOCAL_MACHINE \ 소프트웨어 \ 마이크로 소프트 \ 윈도우 \ CurrentVersion \하여 runonce] [HKEY_LOCAL_MACHINE \ 소프트웨어 \ 마이크로 소프트 \ 윈도우 \ CurrentVersion \ RunServices] [HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows \ CurrentVersion \ RunServicesOnce] [HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows NT \ CurrentVersion \ Winlogon \ Userinit]

+0

실용적이지 않습니다. 내 응용 프로그램이 설치되지 않았습니다. 필요에 따라 실행되는 단일 실행 파일입니다. 내 응용 프로그램이 실행 중일 때만 후크 콜백에서 우선적으로 실행되도록하는 무언가가 필요합니다. –

1

프로그래밍 방식으로 할 때, 우리가 다른 각도에서 오는 경우 특정 문제에 대한 수용 가능한 해결책이있을 수 있습니다 ...

값싼 USB 키보드를 구입하는 것은 어떨까요? 아들이 쓰고 싶지 않은 열쇠에 연결 고리를 끼워 넣으시겠습니까? 그런 다음 USB를 기존 키보드의 USB 포트에 연결하고 아들이 놀 때 키보드를 방해하지 마십시오.

그가 완료되면 아들의 키보드를 분리하고 다시 제자리로 옮깁니다.

그렇지 않으면 키보드 메시지가 다른 후크로 전달되기 전에 WH_DEBUG 후크를 설치해야 할 수도 있습니다.

DebugProc 기능

시스템은 후크의 모든 유형과 관련된 후크 절차 를 호출하기 전에이 함수를 호출합니다. 시스템은 에 대한 정보를 호출 할 DebugProc 후크 프로 시저에 전달합니다.이 프로 시저는 정보를 검사하고 후크 호출 허용 여부를 결정합니다.

DebugProc는 (귀하의 경우 WH_KEYBOARD_LL)의 wParam에 호출되는 훅의 유형 및 후크 체인에 전달 될 실제 WH_KEYBOARD_LL 후크 정보를 포함 lParam의에서 DEBUGHOOKINFO 구조를 전달 받게됩니다.

+0

감사합니다. 목표는 빠른 애플리케이션을 작성하고 입력하고 텍스트를 저장 한 다음 이메일을 닫은 다음 정상적으로 돌아가는 것입니다. 당신의 제안은 너무 오래 걸릴 것이고 결코 그것을하지 않을 것입니다. –

+0

WH_DEBUG hook에 관해서는 - 명확하지 않은 것이 하나 있습니다. '시스템이 후크를 호출하지 못하도록하려면 ...'은 무엇을 의미합니까? 모든 후크를 건너 뛰고 (그리고 키를 누를 수있게합니까?) 또는'WH_KEYBOARD_LL' 훅처럼 키 입력을 취소합니까? –

+0

사실상 디버거입니다. 후크 이전에 알림을 받고, 허용하면 후크에 전달 될 데이터에 대한 액세스 권한을 갖습니다. – GalacticJello