본문 바로가기
[ ★ ]Study/Programming

GetAsyncKeyState 함수와 GetKeyState 함수의 차이

by nroses-taek 2020. 3. 13.
반응형

Keylogger를 만들면서 키 입력에 대해 고민할 때 두 가지 함수를 접하게 되었다.
MSDN에서는 키보드 하드웨어 값을 알고 싶을 땐 GetAsyncKeyState을 사용하라고 한다.
그러면 의문이 하나 생긴다. 둘다 똑같이 키 입력을 받아오는데
GetKeyState 이 함수는 언제 사용할 것인가?

GetKeyState함수는 '눌렸는가?', '토글상태는 무엇인가?' 를 알아낼 때 사용한다.
키의 토글이란 Num Lock, Caps Lock 등의 키가 한 번 눌리면 불이 켜지고 꺼지는 것을 볼 수 있다.
이런거라고 생각하면 이해가 빠를 것이다. 물론 사실 다른 키들도 토글 상태를 가진다.
이 토글 상태를 GetKeyState함수로 알아낼 수 있다.
GetKeyState 함수의 리턴 값은 키가 눌려있으면 음수, 그 외에는 키가 눌리지 않은 상태이다.

GetAsyncKeyState함수는 0x8000 현재 키가 눌려져 있는지 상태 값을 확인하게 되며
0x0001은 저번 호출 시점과 이번 호출 사이에 키가 눌려진 적이 있는지 확인하기 위한 값이다.

GetAsyncKeyState 같은 경우는
if (GetAsyncKeyState(VK_LCONTROL) & 0x8000) 이런식으로 많이 사용된다.

핵심적으로 MSDN에서는 GetAsyncKeyState 이 함수 사용을 권장하고 있다. 실제 키보드 값을 가져오기 때문인데
GetKeyState 이 함수는 메시지큐에 따라 값이 변할 수 있다고 한다.

 

아래는 MSDN 참고자료이다.

https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getasynckeystate

 

GetAsyncKeyState function (winuser.h) - Win32 apps

Determines whether a key is up or down at the time the function is called, and whether the key was pressed after a previous call to GetAsyncKeyState.

docs.microsoft.com

https://docs.microsoft.com/ko-kr/windows/win32/api/winuser/nf-winuser-getkeystate

 

GetKeyState function (winuser.h) - Win32 apps

Retrieves the status of the specified virtual key. The status specifies whether the key is up, down, or toggled (on, off—alternating each time the key is pressed).

docs.microsoft.com

 

반응형

'[ ★ ]Study > Programming' 카테고리의 다른 글

파이썬 웹 크롤링(Web Crawler)  (0) 2020.08.01
gcc make : Nothing to be done for 'all' Error  (0) 2020.07.13
PROCESSENTRY32 구조체  (0) 2020.03.06
HINSTANCE와 HMODULE차이  (0) 2020.03.06
HANDLE 이란  (0) 2020.03.06

댓글