Programming/Windows API
GetKeyNameText함수는 인수로 전달한 값에서 Scan Code에 해당하는 Bit와 맞는 key값을 토대로 Key의 명칭을 반환합니다.

Declare Function GetKeyNameText Lib "user32" Alias "GetKeyNameTextA" (ByVal lParam As Integer, ByVal lpBuffer As String, ByVal nSize As Integer) As Integer
▶VB.NET 선언

Dim iKey As Integer
Dim sName As String = Space(10)

iKey = 30 * 65536

GetKeyNameText(iKey, sName, 10)
sName

▶VB.NET 호출

[System.Runtime.InteropServices.DllImport("user32.dll")]
private static extern int GetKeyNameText(int lParam, StringBuilder lpBuffer, int nSize);
▶C# 선언

int iKey;
StringBuilder sName = new StringBuilder(10);

iKey = 30 * 65536;

GetKeyNameText(iKey, sName, 10);
sName

▶C# 호출

위 예제내용중 30 * 65536에서 30은 찾고자 하는 해당 Key의 Scan Code로서 'A' Key에 해당합니다.

각 Key의 Scan Code가 무엇인지 알아 보시려면 또 다른 API 함수인 MapVirtualKey함수를 사용합니다.

MapVirtualKey(65, 0) * 65536

65 는 'A'의 Ascii Code입니다.

자세한 것은 MapVirtualKey함수를 설명하는 글에서 설명드리도록 하겠습니다.

위에서는 Scan Code와 함께 65536를 곱하여 처리하고 있는데 이는 GetKeyNameText 함수에 전달할 인수의 Bit를 맞추기 위해서 입니다. bit를 구성하고 있는 각 부분 중에서 0~15자리는 사용하지 않는 Bit이며 16~23자리는 해당 Key의 Scan Code가 들어가고 24자리는 확장 Key(Keyboard에 표준 Key가 아닌 별도의 기능을 갖춘 특수한 Key에 대한 부분)에 대한 부분입니다. 마지막 25자리는 왼쪽과 오른쪽에 있는 Ctrl, Alt, Shift Key를 구분할지에 대한 Flag에 해당합니다.

GetKeyNameText 함수는 함수 실행에 실패할 경우 0 값을 반환합니다.
0 0