상세 컨텐츠

본문 제목

MapVirtualKey - Virtual Keycode와 Scan Code의 상호 변환

.NET/Windows API for .NET

by 클리엘 클리엘 2019.08.12 11:45

본문

MapViraualKey함수는 Virtual Keycode를 Scan Code로 변환하거나 Scan Code를 Virtual Keycode로 변환하도록 합니다.

Declare Function MapVirtualKey Lib "user32" Alias "MapVirtualKeyA" (ByVal wCode As Integer, ByVal wMapType As Integer) As Integer

▶VB.NET 선언

MapVirtualKey(code, type)

▶VB.NET 호출

[DllImport("user32.dll")]
private static extern int MapVirtualKey(int wCode, int wMapType);

▶C# 선언

MapVirtualKey(code, type);

▶C# 호출


Code의 인수는 Virtual Keycode가 올 수 도 있고 Scan Code가 올 수 도 있으며 Type은 0~3까지의 값을 인수로 가질 수 있습니다.

Type에서 지정한 값에 따라 처리하는 방식은 다음과 같습니다.

   동작
 0  virtual keycode를 scan code로 변환합니다.
 1  scan code를 virtual keycode로 변환합니다.(이때 좌우측 key구분을 하지 않습니다.)
 2  virtual keycode를 문자값(대부분의 경우 ascii code값)으로 변환합니다.
 3  scan code를 virtual keycode로 변환합니다.(이때 좌우측 key를 구분합니다.)


Virtual Keycode는 Keys의 상수로 불러들일 수 있는데 이를 활용하여 Virtual Keycode를 Scan Code로 변환하는 경우 MapVirtualKey함수는 다음과 같이 호출할 수 있습니다.

MapVirtualKey(Keys.A, 0)

▶VB.NET (A Virtual Keycode를 Scan Code로 변환)

MapVirtualKey((int)Keys.A, 0);

▶C# (A Virtual Keycode를 Scan Code로 변환합니다.)


여기서 말하는 Virtual Keycode는 Windows에서 처리하는 Key처리의 단위입니다. 반면 Keyboard입장에서는 Windows와 다른(모든 Keyboard가 Windows OS에서만 작동하는 것은 아니므로) Code방식으로 처리하는데 그것이 바로 Scan Code인 것입니다.

MapVirtualKey함수는 동작에 실패하는 경우 0의 값을 반환힙니다.

관련글 더보기

댓글 영역