키보드는 눌려지거나 떼어졌을 때 컴퓨터로 눌려지거나 떼어진 키 번호를 보낸다. 이 키 번호를 스캔코드(scan code)라고 한다.
그러나 scan code는 키보드 종류에 따라 다르다. 따라서 윈도우즈는 응용 프로그램 제작자들의 편의를 위해 이 스캔 코드를 가상키(virtual key)로 바꾸어준다.
MapVirtualKey API를 사용하면 가상키 값과 스캔코드 값에 대한 서로 대응 되는 값을 얻을수 있다.
다음 예는 스캔 코드 값을 상호 변환하는 예이다.
초기 화면 폼이다.
두자리 이하의 16진수 값을 입력하고 엔터를 입력하면 상호 변환된다.
다음은 위 작업에 대한 소스이다.
' 가상키값과 스캔코드값의 상호 변환, 16진수 두자리 이하 값을 입력하고 엔터 치변 상호 변환된다
Option Explicit
Private Declare Function MapVirtualKey Lib "user32" Alias "MapVirtualKeyA" (ByVal wCode As Long, ByVal wMapType As Long) As Long
Private Const MAPVK_VK_TO_VSC = 0
Private Const MAPVK_VSC_TO_VK_EX = 3
Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer) ' 가상키값을 스캔코드 값으로
If Not ValueCheck(Text1.Text, KeyCode) Then Exit Sub
Text2.Text = Hex(MapVirtualKey(CLng("&h" & Text1.Text), MAPVK_VK_TO_VSC))
End Sub
Private Sub Text2_KeyDown(KeyCode As Integer, Shift As Integer) ' 스캔 코드값을 가상키값으로
If Not ValueCheck(Text2.Text, KeyCode) Then Exit Sub
Text1.Text = Hex(MapVirtualKey(CLng("&h" & Text2.Text), MAPVK_VSC_TO_VK_EX))
End Sub
Private Function ValueCheck(KeyValue As String, ByVal KeyCode As Long) As Boolean
ValueCheck = False
If Not KeyCode = vbKeyReturn Then Exit Function
If Len(KeyValue) = 0 Then Exit Function
If CLng("&h" & Text1.Text) = 0 Then Exit Function
ValueCheck = True
End Function
키보드 관련 윈도우 메세지와, API 함수들 대부분은 가상키값이 사용된다.
'API' 카테고리의 다른 글
WM_PASTE 메세지, 클립보드를 사용한 복사 (0) | 2011.09.09 |
---|---|
InternetReadFile을 이용한 HTTP,FTP의 URL 응답 메시지 읽어오기 (0) | 2011.09.08 |
InternetOpenUrl을 사용한 FTP에서의 파일,디렉토리 존재 유무 확인 (0) | 2011.09.08 |
SetLayeredWindowAttributes와 픽처박스를 사용한 컨트롤 배경 투명화 (0) | 2011.09.04 |
SetLayeredWindowAttributes를 사용한 윈도우(폼)의 지정된 색을 투명으로 (0) | 2011.09.03 |