2012-06-11 2 views
4

Windows 폼에 대한 질문이 있지만 콘솔에서 작동하지 않거나 적어도 작동하지 못한다는 것을 알고 있습니다. 콘솔에 포커스가 없더라도 키를 눌러야합니다.콘솔에서 포커스가없는 키 캡처 캡처

+0

당신은 어떤 종류의 키로거를 계획하고 있습니까? – saluce

+0

"작동하지 않습니다"는 적절한 문제 설명이 아닙니다. 코드를 복사/붙여 넣기하는데 20 초를 소비 할 수있는 프로그래머에게는 완전히 부적절한 유료 고객에게만 적합합니다. –

+0

@saluce : 글로벌 키보드 후크 (물론 불법적 인 것들)는 합법적 인 이유가 많이 있습니다. –

답변

12

콘솔 응용 프로그램에서도 글로벌 키보드 훅을 만들 수 있습니다.

여기 완료의, 작업 코드 :

http://blogs.msdn.com/b/toub/archive/2006/05/03/589423.aspx

당신은 콘솔 응용 프로그램을 만들 수 있지만 System.Windows.Forms이 작동하려면에 대한 참조를 추가해야합니다. 콘솔 앱이 그 dll을 참조 할 이유가 없습니다.

방금이 코드를 사용하여 콘솔 앱을 만들고 콘솔 앱에 포커스가 있는지 여부에 관계없이 각 키를 가져 왔는지 확인했습니다.

편집

주요 스레드는 Application.Run() 응용 프로그램이 종료 될 때까지, 예를 들어, 실행됩니다 Application.Exit()에 대한 호출을 통해. 다른 작업을 수행하는 가장 간단한 방법은 새 작업을 시작하여 해당 작업을 수행하는 것입니다. 다음은 콘솔 응용 프로그램 예를 종료 할 수있는 수단을 제공하는이

public static void Main() 
{ 
    var doWork = Task.Run(() => 
     { 
      for (int i = 0; i < 20; i++) 
      { 
       Console.WriteLine(i); 
       Thread.Sleep(1000); 
      } 
      Application.Exit(); // Quick exit for demonstration only. 
     }); 

    _hookID = SetHook(_proc); 

    Application.Run(); 

    UnhookWindowsHookEx(_hookID); 
} 

참고 아마도

을 수행 링크 된 코드로부터 홈페이지()의 수정 된 버전입니다 특정 요구에 따라 특수 키 조합을 누르면 에서

+0

왜 downvote입니까? 그것은 질문에 답하고 제대로 작동하는지 확인합니다. –

+0

감사합니다. – Oztaco

+0

응용 프로그램이 Application.Run() 행에 멈추었습니다. 키 스트로크를 기다리지 않고이 기능을 기존 콘솔 앱에 어떻게 통합 할 수 있습니까? –