Programming/Windows API
GetKeyboardState() 함수는 Keyboard의 Key입력이나 Mouse Button의 누름상태를 반환합니다.

Private Declare Function GetKeyboardState Lib "user32" Alias "GetKeyboardState" (ByVal pbKeyState() As Byte) As Integer
▶VB.NET 선언

Private VirKey(256) As Byte
GetKeyboardState(VirKey)

VirKey(X)

▶VB.NET 호출

[System.Runtime.InteropServices.DllImport("user32.dll")]
private static extern int GetKeyboardState(byte[] pbKeyState);
▶C# 선언

private byte[] VirKey = new byte[256];
GetKeyboardState(VirKey);

VirKey[X]

▶C# 호출

위 함수호출에서 배열부분에 X는 상태를 알고자 하는 Key의 배열번호를 의미합니다.

배열로 건네진 인수는 Byte배열인데 이 배열이 GetKeyboardState함수의 인수로 건네지게 되면 함수는 각 Byte에 해당하는 Key의 상태를 배열에 담게 되고 다시 이 배열의 값을 확인하게 되면 해당 key의 상태를 알 수 있게 되는 것입니다.(배열을 통하여 모든 Key의 상태를 한꺼번에 확인)

함수를 수행하고 난 후 배열의 값을 확인하면 0, 1, 128, 129의 값이 있을 수 있는데 1의 경우 해당 key가 한번 눌려졌음을 의미하며 이 상태에서 다시 key를 누르면 0으로 바뀌게 됩니다.(Toggle 상태)

128은 0상태일때 해당 Key가 계속눌려진채로 떨어지지 않은 상태를, 129는 1상태일때 해당 Key가 계속눌려진채로 떨어지지 않은 상태를 의미합니다.

Byte는 VB.NET일 경우 '&H01'부터, C#일 경우 '0x000'부터 시작하며 이 값들은 Key의 Windows(또는 기타 다른 운영체제) Ascii Code값과 일치하게 됩니다.

다음은 인수로 정해진 배열의 순서에 따라(Byte값) 자주쓰이는 Key의 종류를 나타낸 표입니다.(건너뛴 부분은 알수없거나 특수한 key의 용도로 사용되는데 자세한 부분은 Microsoft Homepage를 참조하시기 바랍니다.)

 배열  key
 1  mouse 왼쪽 button
 2  mouse 오른쪽 button
 4  mouse 가운데 button
 7  미 정의
 8  삭제
 9  tab
 10  enter
 11  미 정의
 12  미 정의
 13  shift
 14  ctrl
 15  alt
 16  pause
 17  caps lock
 18  IME Kana
 20  IME 한글
 21  미 정의
 22  IME junja
 23  IME final
 24  IME hanja
 25  IME kanji
 26  미 정의
 27  ESC
 28  IME 전환
 32  space bar
 33  page up
 34  page down
 35  end
 36  home
 37  left arrow
 38  up arrow
 39  right arrow
 40  down arrow
 44  print screen
 45  ins
 46  del
 48  0
 49  1
 50  2
 51  3
 52  4
 53  5
 54  6
 55  7
 56  8
 57  9
 58  미 정의
 64  미 정의
 65  A
 66  B
 67  C
 68  D
 69  E
 70  F
 71  G
 72  H
 73  I
 74  J
 75  K
 76  L
 77  M
 78  N
 79  O
 80  P
 81  Q
 82  R
 83  S
 84  T
 85  U
 86  V
 87  W
 88  X
 89  Y
 90  Z
 91  keyboard의 mouse제어시 왼쪽 button
 92  keyboard의 mouse제어시 오른쪽 button
 94  예약
 96  숫자 pad의 0
 97  숫자 pad의 1
 98  숫자 pad의 2
 99  숫자 pad의 3
 100  숫자 pad의 4
 101  숫자 pad의 5
 102  숫자 pad의 6
 103  숫자 pad의 7
 104  숫자 pad의 8
 105  숫자 pad의 9
 106  *
 107  +
 109  -
 111  /
 112  F1
 113  F2
 114  F3
 115  F4
 116  F5
 117  F6
 118  F7
 119  F8
 120  F9
 121  F10
 122  F11
 123  F12
 144  num lock
 145  scroll lock
 160  왼쪽 shift
 161  오른쪽 shift
 162  왼쪽 control
 163  오른쪽 control
 184  예약
 185  예약
 186  ;, :
 191  /, ?
 192  ~, `
 193  예약
 194  예약
 195  예약
 196  예약
 197  예약
 198  예약
 199  예약
 200  예약
 201  예약
 202  예약
 203  예약
 204  예약
 205  예약
 206  예약
 207  예약
 208  예약
 209  예약
 210  예약
 211  예약
 212  예약
 213  예약
 214  예약
 215  예약
 216  미 지정
 217  미 지정
 218  미 지정
 224  예약
 232  미 지정
0 0