이것 저것 내가 쓰고싶은 것을 쓴다.
by 마음은함께
GetAsyncKeyState와 GetKeyState의 차이점
GetAsyncKeyState와 GetKeyState는 둘 다 키의 상태값을 알아내는 함수이다.
하지만 이 둘 사이에는 차이점이 있는데 다음과 같은 것들이다.

GetAsyncKeyState는 "키가 눌렸는가?"와 "언제부터 눌렸는가?"를 알아낼 때 사용한다.
키가 눌렸을 때 GetAsyncKeyState는 0x8000 bit가 1이된다.
그리고, 이전에 GetAsyncKeyState가 호출되었을 때부터 이번에 GetAsyncKeyState가 호출될 때까지
중간에 끊기지 않고 계속 눌려있는 상태라면 0x0001 bit는 0이 되고, 그렇지 않은 경우는 1이 된다.

1) CTRL 키가 눌린 상태이다.
2) GetAsyncKeyState(VK_CONTROL)를 호출하면 0x8001을 리턴한다.
3) GetAsycnKeyState(VK_CONTROL)을 한번 더 호출하면 0x8000을 리턴한다.

1) CTRL 키가 눌린 상태이다.
2) GetAsyncKeyState(VK_CONTROL)를 호출하면 0x8001을 리턴한다.
3) CTRL 키를 뗬다가 다시 눌렸다.
4) GetAsycnKeyState(VK_CONTROL)을 한번 더 호출해도 0x8001을 리턴한다.

키가 눌리지 않았을 때, GetAsyncKeyState는 항상 0x0000을 리턴한다.


GetKeyState는 "키가 눌렸는가?"와 "키의 토글상태가 무엇인가?"를 알아낼 때 사용한다.
키의 토글 상태란 Caps Lock, Num Lock의 키가 한번 누르면 불이 켜지고
다시 한번 누르면 불이 꺼지는 것을 생각하면 이해가 빠를것 같다.
키보드 상에는 위에서 말한 키만 불이 켜졌다 꺼졌다하면서 토글상태를 알려주고 있지만
다른 키들도 토글 상태를 갖고 있으며 단지 우리 눈에 보이지 않을 뿐이다.
이 토글 상태를 GetKeyState 함수로 알아낼 수 있다.

GetKeyState의 리턴값은 SHORT가 아닌 CHAR로 생각된다.
리턴값을 살펴보면 0xffffff81, 0xffffff80, 0x00000001, 0x00000000이
되는 것을 볼 수 있기 때문이다.
참고로 같은 SHORT형을 리턴하는 GetAsyncKeyState의 리턴값은 다음과 같다.
0xffff8001, 0xffff8000, 0x00000000 셋 중 하나

** MSDN에는 현재 하드웨어(키보드)의 상태값을 알아내길 원한다면
GetAsyncKeyState를 사용하라고 나와있다. GetKeyState는
메시지큐에 저장된 메시지에 따라 값이 변하기 때문이다.
메시지큐에 처리되지 않은 CTRL키가 눌렸다는 메시지가 쌓여있을 때,
사용자가 CTRL키를 더이상 누르지 않고 있다면.
GetAsyncKeyState는 "키가 눌리지 않았음"을,
GetKeyState는 "키가 눌렸음"을 리턴할 것이다.

by mashedon | 2004/08/04 16:48 | Programming | 트랙백 | 덧글(1)
트랙백 주소 : http://mashedon.egloos.com/tb/658138
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Commented by 지나가다 at 2011/07/07 10:10
현재 안눌린 상태여도...과거에 눌려진 적이 있으면
최하위 비트가 1입니다.

:         :

:

비공개 덧글



<< 이전 페이지 다음 페이지 >>


카테고리
이전블로그
이글루링크
최근 등록된 덧글
현재 안눌린 상태여도.....
by 지나가다 at 07/07
혹시,완전단순하지만,WS..
by 지나가다 at 06/24
나 상처받았어;; ( -)y-..
by 마음은함께 at 07/27
음.. 제가 보기에는.. 더 ..
by sdmanga at 07/25
도대체 무슨 소리가 듣구 싶..
by ????? at 07/25
--;; 너 땜메 안딲이자나!! ..
by 마음은함께 at 07/21
아... 한가지 더 주의 해야..
by ????? at 07/21
깽쑤! 니나 잘해ㅋㅋ
by 마음은함께 at 07/20
인생에 마(魔)가 꼈꾼요...
by ????? at 07/20
그건 영화에서도 똑같은데...
by 마음은함께 at 07/04
태그
rss

skin by 이글루스