2010-01-14 9 views
12

Windows 콘솔에서 키 이벤트를 가져 오는 방법이 있습니까? GUI없이 keydown 및 keyup 이벤트를 빠르게 얻을 수있는 방법이 필요합니다. getch()를 사용하여 시도했지만 키 업을 얻지 못하고 키가 반환 될 때까지 기다립니다.C++ 콘솔 키보드 이벤트

+0

당신은 그러나 창에 (내가 아는) 대부분의 시간을 당신이 창 안에 콘솔을 사용하는 "는 GUI없이"말할 시도 할 수 있습니다. 창을 가지고있는 경우 그 창을 연결하여 메시지를 캡처 할 수 있습니다. – Zac

답변

7

GetKeyState 또는 GetAsyncKeyState을 사용할 수 있지만 keydown/keyup 이벤트는 제공하지 않습니다. 현재 어떤 키가 눌려 있는지 만 알려줍니다.

정말 keydown/keyup 이벤트를 가져올 필요가 있다면, 후크를 설치할 수 있습니다. 콘솔 창에는 Windows의 코드와 Windows의 코드 소유인 메시지 펌프가 소유 한 창 핸들이 있습니다.

당신은 그런 메시지가 콘솔 창에 보내는 동안 소리 SetWindowsHookEx를 사용하여 WH_CALLWNDPROC 후크를 설치 GetConsoleWindow를 사용하여 콘솔 창의의 창 핸들을 얻을 수 있습니다.

대신 WH_MSGFILTER 훅을 사용해보십시오. 콘솔 창에서 작동하는지 모르겠지만 작동하지 않으면 무시할 메시지가 적습니다.

8

ReadConsoleInput() API를 사용하십시오. 종류가 KEY_EVENT 인 이벤트를보십시오. 이것은 모든 keydown 이벤트 (Ctrl-key, Shift-key, Pause-key는 읽을 수 없음)에서 작동하지 않지만 대부분을 읽을 수 있습니다.

차단을 방지하려면 GetNumberOfConsoleInputEvents을 사용하십시오.

1

다양한 방법이 있습니다. GetKeyboardState는 가장 명백한 것 중 하나입니다.

2

나는 단지 호기심이 많았습니다. 그런 논리적 인 질문에 Google에 대한 설명이없는 이유는 무엇입니까? 그래서 여기에서 질문해야합니다. 그래서가 봤 : "키보드 이벤트 콘솔 응용 프로그램은" 및 먼저이 개 링크가 흥미 무슨 ... 생각 (하지만 불행히도, 귀하의 질문에 정확히 답변) :

+3

나는 같은 것을 추측했다. ...이 페이지를 가리키는 세 번째 링크. – avakar

관련 문제