C#에서 SetWindowsHookEx를 사용하여 낮은 수준의 키보드 후크를 만들고 있는데, 질문은 어떻게 키보드 이벤트 함수를 주 스레드의 다른 스레드에서 실행할 수 있습니까? 또한 현재 스레드가 메인 스레드가 아닌 다른 스레드가 없으므로 키보드 후크 이벤트가 발생할 때까지 중단 할 수있는 방법을 어떻게 만들 수 있습니까?C#에서 다른 스레드로 키보드 후크를 만드는 방법은 무엇입니까?
답변
다음은 C# Keyboard hook의 코드입니다.
그냥 Hook.CreateHook (METHODNAMEHERE)를 호출하면됩니다. 새 스레드 (Thread 클래스 참조)에서.
당신이 윈도우 폼 응용 프로그램을 사용하는 경우, 추가 스레드를 사용하여 몇 가지 어획량이있다 : 새로운 스레드에 후크를 설정하는 방법에 대한 답변이있는 한
이 단지 질문의 두 번째 부분에 응답합니다. 폼 컨트롤과 통신하려면 Control.Invoke를 사용해야합니다.
이외의 "작업자"스레드를 시작하고 일부 ManualResetEvent 또는 AutoResetEvent를 기다립니다. 키보드 후크가 키 누름에 대한 알림을 받으면 "공유"필드를 사용하여 키를 배치 한 다음 이벤트를 다시 설정하면 "대기중인"스레드가이를 처리 할 수 있습니다.
"공유"필드 주위에 적절한 잠금을 구현하는 것을 잊지 마십시오.
귀하의 제안은 UI 스레드에서 이벤트 처리 중 일부를 실행하도록 제안합니다 ... 그다지 좋은 생각은 아닌 것 같습니다 ... –
별도의 스레드에서 후크를 설정하는 방법에 대한 답변이 이미있었습니다. 난 그냥 질문의 두 번째 부분에 대한 답변뿐만 아니라, 그냥 창문 양식 응용 프로그램에서 스레드를 사용하여 몇 가지 합병증을 지적합니다. –
별도의 스레드에 후크를 설정하는 방법에 대한 대답은 없습니다. –
Hook.CreateHook (METHODNAMEHERE); 후 새 스레드가 중지되면 어떻게됩니까? –