c# 후킹 예제

조: 물론, http://support.microsoft.com/kb/318804 알아요. 예제에서는 마우스 이벤트를 트래피션하지만 키보드 이벤트에 대한 코드는 비슷합니다. 웹을 검색하는 경우 많은 추가 예제를 찾을 수 있습니다. 마우스 이벤트를 청취하기 위해 제공한 다른 예제와 함께 코드를 사용하여 Windows 양식 앱이 현재 사용 중인지 여부를 감지합니다. 내 앱 / 프로세스의 이벤트에만 관심이 있지만 현재 스레드의 스레드 ID를 전달하면 후크가 작동하지 않습니다. 내 질문 : 파일이 특정 간격 사이에 비어 있도록 타이머를 구현할 수 있습니까 (예 : 10 분마다 파일이 비워집니다). HookCallback()에서는 아무 것도 반환하지 않거나 원래 값을 반환하는 대신 다른 키 값을 반환하는 방법은 무엇입니까? 예를 들어 `j`를 눌렀다면 어떻게 `k`를 눌렀는지 변경할 수 있습니까? 또한 위의 샘플이 모든 코너 케이스를 catch하지는 않습니다. 예를 들어, 키SPressed 및 keyLPressed는 사용자가 컨트롤 또는 Alt 키를 계속 유지하면서도 True로 유지됩니다. 현재 프로세스에 대해서만 후크를 설정하는 예는 http://support.microsoft.com/kb/318804 참조하세요. 예를 들어, WINKEY + SPACE를 누를 때 인쇄 공간을 피하기 위해 키 버퍼를 지우고 몇 가지 작업을 수행해야합니다… 안녕하세요, 나는 그것이 예를 들어, de 키를 변경하도록 후크를 “수정”할 수 있는지 보고 싶었다 : 나는 “a”를 누르면, 그것은 “b”를 표시합니다 … 감사! 100 의 첫 번째 작업 후크 예제.

나는 누군가가 C #로 낮은 수준의 키보드 후크를 설정하는 예를 물어 오늘 질문에 대답했다. 실제로 관리되는 디버깅 도우미에 대한 2006년 5월 MSDN 매거진 문서에서 이러한 작업을 수행하는 예제가 있지만, 이 예제는 특정 MDA의 동작을 설명하기 위해 의도적으로 버그가 있습니다. MouseHook은 특정 스레드의 창에 마우스 메시지가 있을 때 코드를 알림을 받을 수 있는 특정 유형의 Windows 후크입니다. 이 예제에서는 마우스 후크를 사용하여 5버튼 마우스의 두 탐색 단추에 대한 단추 위로 메시지를 캡처합니다. 응용 프로그램의 기본 Form은 마우스 후크를 사용하여 현재 입력 포커스가 있는 자식 컨트롤에 관계없이 마우스를 통한 탐색을 제어할 수 있습니다. 5 버튼 마우스가 없는 경우 데모가 매우 흥미롭지는 않지만 코드는 기본 개념을 보여 줍니다. 다음은 버그가 없는 예제(콘솔 응용 프로그램으로 컴파일): Win32의 SendInput 함수 또는 Windows Forms의 SendKeys.Send 메서드와 같은 표준 창 메커니즘 및 메시지를 사용하여 모든 앱에 키 입력을 보낼 수 있습니다. Bob에서는 user32.dll의 GetKeyState를 사용하여 시프트 키의 상태를 확인할 수 있습니다. 예를 들어 메모장이 실행 중이고 필터가 여기에서 만든 MouseHook 클래스와 같은 작업을 수행하는 경우 특정 종류의 Windows 후크의 복잡성을 추상화하는 파생 클래스의 한 예일 뿐입니다. MSDN 샘플 코드의 CbtLocalHook 클래스도 포함시켰습니다. 나는 후킹 때문에 새로운 증권 문제로 인해 몇 가지 문제가 있기 때문에 그렇게 생각하지 않습니다. 개인 공유 _proc 로 새로운 낮은 수준키보드Proc (주소의 후크 콜백) 윈도우 후크콜백 기능을 사용 하 여 구현 됩니다.

콜백 프로시저는 SendMessage API와 유사한 서명을 가지고 있으므로 Windows 후크는 매우 일반적이며 다양한 유형의 Windows 메시지 처리 방법을 확장하는 데 사용됩니다(아래 참조). 이 라이브러리는 Windows Forms 응용 프로그램에서 사용할 수 있는 후크 프로시저 주위에 C# 래퍼를 제공합니다.