본문 바로가기

프로그래밍/MFC , WinAPI

GetAsyncKeyState 함수와 GetKeyState 에 대해서 알아보자.


[ GetAsyncKeyState ]

이 함수는 특정 키가 눌려졌을 때(down)나 떨어졌을 때(up) 호출됩니다. GetAsyncKeyState 함수는 비 동기로 처리가 됩니다.  호출된 시점에서 키상태를 조사하여 바로 리턴을 해줍니다.  


SHORT WINAPI GetAsyncKeyState(
  _In_ int vKey
);


인자 값 으로는 내가 검사하고 싶은 키값을 넘겨줍니다. 예를 들어 엔터가 눌린게 알고 싶으면 

if ( GetAsyncKeyState(VK_RETURN) & 0x08000)


이런식으로 호출을 해주시면 됩니다.  키에 대한 정보값은 아래 사이트를 참고 해주세요.

https://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx


GetAsyncKeyState 반환값 은 short형이고 최상위 비트는 현재 눌린지를 말해주고

최하위비트는 이전에 눌럿던 적이 있는지 말해줍니다.


0:            이전에 누른 적이 없고 호출시점에 안 눌린 상태   (2진수 : 0000 0000 0000 0000)
0x8000:    이전에 누른 적이 없고 호출시점에 눌린 상태       (2진수 : 1000 0000 0000 0000)
0x8001:    이전에 누른 적이 있고 호출시점에 눌린 상태       (2진수 : 1000 0000 0000 0001)
1:            이전에 누른 적이 있고 호출시점에 안 눌린 상태   (2진수 : 0000 0000 0000 0001)


여기서 "이전" 이란 GetAsyncKeyState 호출 후 또 다시 GetAsyncKeyState 호출하기 직전까지다..


[ GetKeyState ]

이 함수는 특정키의 상태를 찾아옵니다. 키가 눌렸을때 떨어졌을 때 토글의 ON,OFF상태

GetAsyncKeyState 함수와는 다르게 메시지큐에서 읽어서 리턴합니다. 



SHORT WINAPI GetKeyState(
  _In_ int nVirtKey
);

반환 값은 키가 눌린(down) 상태는 최상위 비트가 1이고  떨어진 상태면 0을 반환합니다.
토글이 ON이면 최하위 비트가 1이고 UP이면 0입니다. 

여기서 토글이란 Caps Lock, Num Lock 등과 같이 모든 키는 한번 누를때 마다 토글이 온,오프 됩니다.
예를 들어서 엔터늘 누르면 엔터에 대한 토글이 켜지고 한번더 누르면 꺼집니다.
엔터에 대한 토글이 꺼진 상태에서 엔터를 누르고 있으면 최상위 반환값은 1 그리고  토글도 켜질테니깐 
최하위비트는도 1 , 엔터를 때면 최상위 0 최하위 1 ,이런식으로 값을 반환합니다.  


'프로그래밍 > MFC , WinAPI' 카테고리의 다른 글

CreateProcess 함수란 무엇인가?  (0) 2018.04.04
FindWindow 함수란 무엇인가?  (0) 2018.03.18
MSG 구조체 란?  (0) 2018.03.14
PreTranslateMessage 함수란 무엇인가?  (0) 2018.03.14
LoadImage 함수란 무엇인가.  (0) 2018.03.12