본문 바로가기

자료

[C#/VB.NET]GetAsyncKeyState - 현재 Key상태 확인

728x90

[C#/VB.NET]GetAsyncKeyState - 현재 Key상태 확인


GetAsyncKeyState() 함수는 함수가 호출될때 함수의 인수에 지정한 Key가 눌려진 상태인지 혹은 눌려진 상태가 아닌지에 대한 값을 반환합니다. 또한 처음 GetAsyncKeyState()함수가 호출된 이 후 다시 GetAsyncKeyState()함수가 호출될때까지 해당 Key가 눌려진 상태에서 단 한번도 떨어지지 않았는가에 대한 여부도 판단할 수 있습니다.

Declare Function GetAsyncKeyState Lib "user32" Alias "GetAsyncKeyState" (ByVal vKey As Integer) As Integer

▶VB.NET 선언

GetAsyncKeyState(16) '16인수는 Shift Key Code

▶VB.NET 호출

[System.Runtime.InteropServices.DllImport("user32.dll")]
private static extern int GetAsyncKeyState(int vKey);

▶C# 선언

GetAsyncKeyState(16) //16인수는 Shift Key Code

▶C# 호출


처음 GetAsyncKeyState(16) 함수를 호출할때 만일 Keyboard에서 Shift(16) Key가 눌려진 상태라면 -32767을 눌려지지 않은 상태라면 0값을 반환합니다.

만일 첫번째 GetAsyncKeyState(16)함수를 호출할때 Shift Key가 눌려져 있었다면 두번째 GetAsyncKeyState(16)함수 호출할때 여전히 Shift Key의 눌려져 있는 상태가 지속되고 있으면 -32768 값을 반환합니다.

GetAsyncKeyState(16)함수 호출시 양수값을 얻고자 하신다면 다음과 같이 0x8000이나 0x8001을 And 연산하면 됩니다. 이는 함수가 해당 Key의 상황에 따라 0x8000 Bit 또는 0x8001 Bit를 0으로 하는가 1로 하는가의 차이에서 기인합니다.

GetAsyncKeyState(16) And &H8000 'Key가 눌려진 상태인가?
GetAsyncKeyState(16) And &H8001 'Key가 여전히 눌려진 상태인가?

▶VB.NET And 연산

GetAsyncKeyState(16) & 0x8000; //Key가 눌려진 상태인가?
GetAsyncKeyState(16) & 0x8001; //Key가 여전히 눌려진 상태인가?

▶C# And 연산


만일 확인해 보고자 하는 Key가 Shift Key가 아닌 다른 Key일 경우 해당 Key에 맞는 Code만 함수의 인수로 건네주면 될것입니다.

728x90