'GetKeyState'에 해당되는 글 1건

  1. 2008.07.24 키보드 키의 상태값을 알아오기
2008. 7. 24. 15:47

키보드 키의 상태값을 알아오기



키보드 관련된 작업을 Windows XP 에서 프로그래밍을 하고 있는 중이다.
아... 'OS' 관련 작업하다가 갑자기 몇년만에 'Windows Application' 작업을 하려니 적응이 안된다.
어찌 됐건 해야 하는 일이므로.. 이리 저리 자료를 찾고 있는 중이긴 하지만.. 빡쎄다... -_-

키보드 키의 상태값을 받아오는 방법에 대해 찾고 있던 도중 'Windows API'에 좋은 함수가 있다는 걸 알아버렸다.ㅋ

GetKeyState() 라는 함수인데.. 이녀석은 키가 눌린 상태인지.. 그리고 키가 토글상태가 무엇인지를 알아낼때 사용되는 함수이다.
쉽게 말해서 NumLock키의 경우 토글된 상태이면 NumLock LED에 불이 들어온다. 토글된 상태가 아니면 NumLock LED의 불이 꺼진다. 이런 상태를 받아오는 것이다.
이 함수는 다음과 같다.
SHORT GetKeyState(      
    int nVirtKey
);
parameter는 상태를 알고자하는 키의 Virtual Key값을 넣으면 되고, Return 되는 값은 상태를 알고자하는 Virtual Key값의 상태를 리턴한다.

쉽게 예를 들면, 음.. NumLock 키가 눌려져 있는지를 보려면.. 다음과 같이 해주면 될 것이다.
 
       int numlock_status = 0;

        ....

        if((::GetKeyState(VK_NUMLOCK) & 0x80000 ) > 0)
            numlock_status = 1;
        else
            numlock_status = 0;

이와 유사한 기능을 가지고 있는 함수로.. GetAsyncKeyState() 라는 함수가 있다.

MSDN에는 현재 하드웨어(키보드)의 상태값을 알아내고자 한다면.. GetAsyncKeyState() 를 사용하라고 한다.
GetKeyState() 는 메시지큐에 저장된 메시지에 따라 값이 변하기 때문이다. 메시지큐에 처리되지 않은 CTRL 키가 눌렸다는 메시지가 쌓여있을 때, 사용자가 CTRL 키를 더이상 누르지 않고 있다면... GetAsyncKeyState() 는 "키가 눌려있지 않음"을 반환하고, GetKeyState() 는 "키가 눌렸음"을 반환하기 때문이다.
(참고 : 러브러브 님의 블로그)