'키보드'에 해당되는 글 5건

  1. 2009.05.21 키보드 스캔코드
  2. 2008.11.04 DDK 다운로드, Windbg 사용... 2
  3. 2008.07.28 MSDN 키보드 입력 작동 방식 스크랩
  4. 2008.07.24 키보드 키의 상태값을 알아오기
  5. 2007.05.11 "'마이너리티 리포트' 속 장면이 현실로..." 어디까지 발전하는거야? 2
2009. 5. 21. 15:59

키보드 스캔코드



키보드 스캔코드 값이다.
인터넷에 떠도는거 대충 스크랩해온 것임..
키보드 작업할 때 유용하게 사용하고 있는데, 자꾸 찾기 귀찮아서 여기에 밖아놓으려구.. ^^;

Const SCANKEY_ESC = 1(0x01)

Const SCANKEY_1 = 2(0x02)               ' 1
Const SCANKEY_2 = 3(0x03)               ' 2
Const SCANKEY_3 = 4(0x04)               ' 3
Const SCANKEY_4 = 5(0x05)               ' 4
Const SCANKEY_5 = 6(0x06)               ' 5
Const SCANKEY_6 = 7(0x07)               ' 6
Const SCANKEY_7 = 8(0x08)               ' 7
Const SCANKEY_8 = 9(0x09)               ' 8
Const SCANKEY_9 = 10(0x0A)             ' 9
Const SCANKEY_0 = 11(0x0B)             ' 0
Const SCANKEY_MINUS = 12(0x0C)        ' -
Const SCANKEY_EQUAL = 13(0x0D)        ' =
Const SCANKEY_BS = 14(0x0E)           ' ←

Const SCANKEY_TAB = 15((0x0F)          'TAB
Const SCANKEY_Q = 16(0x10)            ' Q
Const SCANKEY_W = 17(0x11)            ' W
Const SCANKEY_E = 18(0x12)            ' E
Const SCANKEY_R = 19(0x13)            ' R
Const SCANKEY_T = 20(0x14)            ' T
Const SCANKEY_Y = 21(0x15)            ' Y
Const SCANKEY_U = 22(0x16)            ' U
Const SCANKEY_I = 23(0x17)            ' I
Const SCANKEY_O = 24(0x18)            ' O
Const SCANKEY_P = 25(0x19)            ' P
Const SCANKEY_SQUARE_OPEN = 26(0x1A)  ' [
Const SCANKEY_SQUARE_CLOSE = 27(0x1B) ' ]
Const SCANKEY_ENTER = 28(0x1C)        ' ENTER

Const SCANKEY_CTRL = 29(0x1D)         ' CTRL
Const SCANKEY_A = 30(0x1E)            ' A
Const SCANKEY_S = 31(0x1F)            ' S
Const SCANKEY_D = 32(0x20)            ' D
Const SCANKEY_F = 33(0x21)            ' F
Const SCANKEY_G = 34(0x22)            ' G
Const SCANKEY_H = 35(0x23)            ' H
Const SCANKEY_J = 36(0x24)            ' J
Const SCANKEY_K = 37(0x25)            ' K
Const SCANKEY_L = 38(0x26)            ' L
Const SCANKEY_SEMICOLON = 39(0x27)    ' ;
Const SCANKEY_QUOTATION = 40(0x28)    ' '

Const SCANKEY_QUOTATION2 = 41(0x29)   ' `
Const SCANKEY_LSHIFT = 42(0x2A)       ' LEFT SHIFT
Const SCANKEY_WON = 43(0x2B)          ' \

Const SCANKEY_Z = 44(0x2C)            ' Z
Const SCANKEY_X = 45(0x2D)            ' X
Const SCANKEY_C = 46(0x2E)            ' C
Const SCANKEY_V = 47(0x2F)            ' V
Const SCANKEY_B = 48(0x30)            ' B
Const SCANKEY_N = 49(0x31)            ' N
Const SCANKEY_M = 50(0x32)            ' M
Const SCANKEY_COMMA = 51(0x33)        ' ,
Const SCANKEY_PERIOD = 52(0x34)       ' .
Const SCANKEY_SLASH = 53(0x35)        ' /
Const SCANKEY_RSHIFT = 54(0x36)       ' RIGHT SHIFT

Const SCANKEY_PRTSC = 55(0x37)        ' PRINT SCREEN SYS RQ
Const SCANKEY_ALT = 56(0x38)          ' ALT
Const SCANKEY_SPACE = 57(0x39)        ' SPACE
Const SCANKEY_CAPS = 58(0x3A)         ' CAPS
Const SCANKEY_F1 = 59(0x3B)           ' F1
Const SCANKEY_F2 = 60(0x3C)           ' F2
Const SCANKEY_F3 = 61(0x3D)           ' F3
Const SCANKEY_F4 = 62(0x3E)           ' F4
Const SCANKEY_F5 = 63(0x3F)           ' F5
Const SCANKEY_F6 = 64(0x40)           ' F6
Const SCANKEY_F7 = 65(0x41)           ' F7
Const SCANKEY_F8 = 66(0x42)           ' F8
Const SCANKEY_F9 = 67(0x43)           ' F9
Const SCANKEY_F10 = 68(0x44)          ' F10
Const SCANKEY_NUM = 69(0x45)          ' NUM ROCK
Const SCANKEY_SCROLL = 70(0x46)       ' SCROLL ROCK

Const SCANKEY_GRAY_HOME = 71(0x47)    ' 키패드
Const SCANKEY_GRAY_UP = 72(0x48)
Const SCANKEY_GRAY_PGUP = 73(0x49)
Const SCANKEY_GRAY_MINUS = 74(0x4A)
Const SCANKEY_GRAY_LEFT = 75(0x4B)
Const SCANKEY_GRAY_CENTER = 76(0x4C)
Const SCANKEY_GRAY_RIGHT = 77(0x4D)
Const SCANKEY_GRAY_PLUS = 78(0x4E)
Const SCANKEY_GRAY_END = 79(0x4F)
Const SCANKEY_GRAY_DOWN = 80(0x50)
Const SCANKEY_GRAY_PGDN = 81(0x51)
Const SCANKEY_GRAY_INS = 82(0x52)
Const SCANKEY_GRAY_DEL = 83(0x53)

Const SCANKEY_F11 = 87(0x54)          ' F11
Const SCANKEY_F12 = 88(0x55)          ' F12





'Windows > Device Driver' 카테고리의 다른 글

어플리케이션과 드라이버간의 통신 방법 - DeviceIoControl()  (0) 2009.06.09
시스템 장치별 CLASS GUID  (0) 2009.02.17
DDK 다운로드, Windbg 사용...  (2) 2008.11.04
DriverEntry()  (0) 2008.09.04
DEVICE_OBJECT  (0) 2008.09.04
2008. 11. 4. 17:48

DDK 다운로드, Windbg 사용...


망할놈의 키보드 때문에 요즘 죽을 맛이다... -_-
이리 저리 웹에서 문서를 찾지만 뭔말인지 도대체 알아먹을 수가 없다. 
한마디로 XX것이다. 궁금한 것에 대해서 검색을 해도 원하는 정보가 없고, 또 여기 저기 관련 사이트에 질문을 해도 답을 해주는 이가 없을 때의 절망감이란...

그러다 우연하게 얻은 답변은 결국 디바이스 드라이버를 만들어야 하는 상황이 되어버린 것이다. 여기 저기 둘러보아도 알수 없는 이상한 나라에 온 기분이다.

일단 DDK라는 녀석을 받아서 설치를 했다. 전에 잠깐 필터 드라이버를 끄적인다고 WDM인가? 하는 녀석을 설치해서 잠깐 한 적이 있는데.. 그녀석의 이전 버전이라던데.. 여튼 그걸 깔았다.


까는 거야 iso 이미지를 데몬에 집어 넣으니깐 간단히 설명서 같은게 떠서 걍 따라했다. 잘 깔린다. 디버거라는 녀석도 깔았다... Windbg라나??

일단 구한 문서에서 Windbg로 뭘 하길래 따라해 볼겸 실행을 시켰다. 근데... 이거 어떻게 동작을 시켜야 하는지...ㅡ.ㅜ
대충 이리 저리 검색하고 하다가 비슷한 모냥새는 만들었다. 간단하게 Windbg 를 사용하는 방법이다.
먼저 Windbg를 실행한다.
시작 -> 모든 프로그램 -> Debugging Tools for Windows -> WinDbg

다음은 File -> Symbol File Path를 선택한 후 아래 그림과 같이 입력을 한다.
'Symbol path : '란에 'SRV*C:\Symbol*Http://msdl.microsoft.com/download/symbols' 라고 입력을 한 후 Reload를 체크한다. OK 버튼을 클릭하여 빠져 나온다.

File -> Kernel Debug를 실행한 후 Local 탭을 선택한다. 확인 버튼을 클릭한다.

다음과 같이 커널 디버거(?)가 실행되는 것을 볼 수 있다.
맨 아래 'lkd>' 라고 되어 있는 부분에 원하는 명령을 쳐 넣을 수도 있다 물론 결과는 흰색 바탕의 콘솔창에 나타나는 것이고... 아... 모르겠다 사실 ㅋㅋ


'Windows > Device Driver' 카테고리의 다른 글

키보드 스캔코드  (0) 2009.05.21
시스템 장치별 CLASS GUID  (0) 2009.02.17
DriverEntry()  (0) 2008.09.04
DEVICE_OBJECT  (0) 2008.09.04
DRIVER_OBJECT  (1) 2008.09.04
2008. 7. 28. 11:30

MSDN 키보드 입력 작동 방식 스크랩


키보드 입력 작동 방식

 

Windows Forms에서는 Windows 메시지에 대한 응답으로 키보드 이벤트를 발생시켜 키보드 입력을 처리합니다. 대부분의 Windows Forms 응용 프로그램에서는 키보드 이벤트를 처리하여 키보드 입력을 단독으로 처리합니다. 그러나 키가 컨트롤에 도달하기 전에 키를 가로채는 등의 고급 키보드 입력 시나리오를 구현하려면 키보드 메시지가 작동하는 방식을 알아야 합니다. 이 항목에서는 Windows Forms에서 인식하는 키 데이터 형식을 설명하고 키보드 메시지가 라우팅되는 방법에 대한 개요를 설명합니다. 키보드 이벤트에 대한 자세한 내용은 키보드 이벤트 사용을 참조하십시오.

 

키 형식

Windows Forms에서는 키보드 입력을 비트 Keys 열거형으로 나타내는 가상 키 코드로 식별합니다. Keys 열거형을 사용하면 눌려진 일련의 키를 결합하여 단일 값을 만들 수 있습니다. 이러한 값은 WM_KEYDOWN WM_SYSKEYDOWN Windows 메시지와 함께 제공되는 값에 해당합니다. KeyDown 또는 KeyUp 이벤트를 처리하여 실제로 눌려진 키를 대부분 감지할 수 있습니다. 문자 키는 Keys 열거형의 하위 집합이며 WM_CHAR WM_SYSCHAR Windows 메시지와 함께 제공되는 값에 해당합니다. 눌려진 키를 결합하여 문자가 만들어지는 경우에는 KeyPress 이벤트를 처리하여 해당 문자를 감지할 수 있습니다. 또는 Visual Basic 프로그래밍 인터페이스에서 노출되는 Keyboard를 사용하여 눌려진 키를 확인하고 키를 보낼 수 있습니다. 자세한 내용은 키보드에 액세스를 참조하십시오.

 

키보드 이벤트의 순서

앞에서 설명한 대로 한 컨트롤에서 발생할 수 있는 키보드 관련 이벤트는 세 가지입니다. 다음 시퀀스는 키보드 이벤트의 일반적인 순서를 보여 줍니다.

  • 사용자가 "a" 키를 누르면 해당 키가 전처리되고 디스패치된 다음 KeyDown 이벤트가 발생합니다.

  • 사용자가 "a" 키를 누르고 있으면 해당 키가 전처리되고 디스패치된 다음 KeyPress 이벤트가 발생합니다.

  • 이 이벤트는 사용자가 키를 누르고 있을 때 여러 차례 발생합니다.

  • 사용자가 "a" 키를 놓으면 해당 키가 전처리되고 디스패치된 다음 KeyUp 이벤트가 발생합니다.

 

키 전처리

다른 메시지와 마찬가지로 키보드 메시지는 폼이나 컨트롤의 WndProc 메서드에서 처리됩니다. 그러나 키보드 메시지를 처리하기 전에 PreProcessMessage 메서드는 특수 문자 키와 실제 키를 처리하도록 재정의할 수 있는 메서드를 하나 이상 호출합니다. 이러한 메서드를 재정의하여 컨트롤에서 메시지를 처리하기 전에 특정 키를 감지하고 필터링할 수 있습니다. 다음 표에서는 수행할 작업과 발생하는 관련 메서드를 메서드 발생 순서에 따라 보여 줍니다.

 

KeyDown 이벤트의 전처리

작업

관련 메서드

설명

액셀러레이터 키나 메뉴 바로 가기 같은 명령 키를 확인합니다.

ProcessCmdKey

이 메서드는 일반 키보다 우선되는 명령 키를 처리합니다. 이 메서드가 true를 반환하는 경우 키 메시지가 디스패치되지 않고 키 이벤트도 발생하지 않습니다. false를 반환하는 경우에는 IsInputKey가 호출됩니다.

전처리가 필요한 특수 키인지 아니면 KeyDown 이벤트를 발생시켜 컨트롤에 디스패치해야 하는 일반 문자인지 여부를 확인합니다.

IsInputKey

이 메서드가 true를 반환하는 경우에는 컨트롤이 일반 문자이고 KeyDown 이벤트가 발생합니다. false를 반환하는 경우에는 ProcessDialogKey가 호출됩니다.

Note참고

컨트롤에서 키나 키 조합을 받도록 하려면 PreviewKeyDown 이벤트를 처리한 다음 원하는 키나 키 조합에 대해 PreviewKeyDownEventArgsIsInputKeytrue로 설정합니다.

키가 탐색 키(Esc, Tab, Enter 또는 화살표 키)인지 여부를 확인합니다.

ProcessDialogKey

이 메서드는 컨트롤 내에서 컨트롤과 부모 컨트롤 간의 포커스 전환과 같은 특수 기능을 담당하는 실제 키를 처리합니다. 현재 컨트롤에서 키를 처리하지 않으면 ProcessDialogKey가 부모 컨트롤에서 호출되고 계층 구조의 최상위 컨트롤에까지 이같은 호출 방식이 적용됩니다. 이 메서드에서 true를 반환하면 전처리는 완료되지만 키 이벤트는 생성되지 않습니다. false를 반환하면 KeyDown 이벤트가 발생합니다.

 

KeyPress 이벤트의 전처리

작업

관련 메서드

설명

키가 컨트롤에서 전처리 되어야 하는 일반 문자인지 여부를 확인합니다.

IsInputChar

문자가 일반 문자인 경우 이 메서드는 true를 반환하고 KeyPress 이벤트가 발생하지만 추가적인 전처리 작업은 발생하지 않습니다. 일반 문자가 아닌 경우에는 ProcessDialogChar가 호출됩니다.

문자가 단추의 &OK와 같은 니모닉인지 여부를 확인 합니다.

ProcessDialogChar

이 메서드는 ProcessDialogKey와 비슷하게 컨트롤 계층 구조를 올라가며 호출됩니다. 컨트롤이 컨테이너 컨트롤인 경우 이 메서드는 컨트롤과 그 자식 컨트롤에 대해 ProcessMnemonic을 호출하여 니모닉을 확인합니다. ProcessDialogChartrue를 반환하는 경우 KeyPress 이벤트가 발생하지 않습니다.

 

키보드 메시지 전처리

폼이나 컨트롤의 WndProc 메서드에 도달한 키보드 메시지는 재정의할 수 있는 메서드 집합에 의해 처리됩니다. 이러한 메서드는 각각 키보드 메시지가 처리되어 컨트롤에서 사용되었는지 여부를 지정하는 Boolean 값을 반환합니다. 이러한 메서드 중 한 메서드에서 true가 반환되면 해당 메시지가 처리된 것으로 간주되므로 추가 처리를 위해 컨트롤의 기본 또는 부모에 메시지가 전달되지 않습니다. 그렇지 않은 경우에는 메시지가 메시지 큐에 유지되고 컨트롤의 기본 또는 부모의 다른 메서드에서 처리됩니다. 다음 표에서는 키보드 메시지를 처리하는 메서드를 보여 줍니다.

메서드

설명

ProcessKeyMessage

이 메서드는 컨트롤의 WndProc 메서드에서 받은 모든 키보드 메시지를 처리합니다.

ProcessKeyPreview

이 메서드는 키보드 메시지를 컨트롤의 부모에게 보냅니다. ProcessKeyPreviewtrue를 반환하면 키 이벤트가 생성되지 않고, 그렇지 않은 경우에는 ProcessKeyEventArgs가 호출됩니다.

ProcessKeyEventArgs

이 메서드는 KeyDown, KeyPress KeyUp 이벤트를 적절하게 발생시킵니다.

 

키보드 메서드 재정의

키보드 메시지를 전처리하고 처리할 때 재정의할 수 있는 여러 가지 메서드가 있지만 그 중 다음과 같은 메서드가 특히 많이 사용됩니다. 다음 표에서는 수행할 작업과 키보드 메서드를 재정의할 수 있는 가장 좋은 방법을 보여 줍니다.

작업

메서드

탐색 키를 가로채고 KeyDown 이벤트를 발생시킵니다. 예를 들어 Tab 키와 Enter 키를 텍스트 상자에서 처리해야 할 수 있습니다.

IsInputKey를 재정의합니다.

컨트롤에서 특수 입력 키나 탐색 키에 대한 처리를 수행합니다. 예를 들어, 목록 컨트롤에서 화살표 키를 사용하여 선택한 항목을 변경할 수 있습니다.

ProcessDialogKey를 재정의합니다.

탐색 키를 가로채고 KeyPress 이벤트를 발생시킵니다. 예를 들어, 스핀 상자 컨트롤에서 화살표 키를 여러 차례 눌러 항목 전체를 빠르게 진행할 수 있습니다.

IsInputChar를 재정의합니다.

KeyPress 이벤트 중 특수 입력 키나 탐색 키에 대한 처리를 수행합니다. 예를 들어, 목록 컨트롤에서 "r" 키를 누른 채로 r 문자로 시작하는 항목 사이를 건너뛸 수 있습니다.

ProcessDialogChar를 재정의합니다.

사용자 지정 니모닉 처리를 수행합니다. 예를 들어, 도구 모음에 포함된 소유자가 그린 단추의 니모닉을 처리할 수 있습니다.

ProcessMnemonic를 재정의합니다.

 

참고 항목

참조

My.Computer.Keyboard 개체
Keys
WndProc
PreProcessMessage

개념

키보드에 액세스
키보드 이벤트 사용

 


2008. 7. 24. 15:47

키보드 키의 상태값을 알아오기



키보드 관련된 작업을 Windows XP 에서 프로그래밍을 하고 있는 중이다.
아... 'OS' 관련 작업하다가 갑자기 몇년만에 'Windows Application' 작업을 하려니 적응이 안된다.
어찌 됐건 해야 하는 일이므로.. 이리 저리 자료를 찾고 있는 중이긴 하지만.. 빡쎄다... -_-

키보드 키의 상태값을 받아오는 방법에 대해 찾고 있던 도중 'Windows API'에 좋은 함수가 있다는 걸 알아버렸다.ㅋ

GetKeyState() 라는 함수인데.. 이녀석은 키가 눌린 상태인지.. 그리고 키가 토글상태가 무엇인지를 알아낼때 사용되는 함수이다.
쉽게 말해서 NumLock키의 경우 토글된 상태이면 NumLock LED에 불이 들어온다. 토글된 상태가 아니면 NumLock LED의 불이 꺼진다. 이런 상태를 받아오는 것이다.
이 함수는 다음과 같다.
SHORT GetKeyState(      
    int nVirtKey
);
parameter는 상태를 알고자하는 키의 Virtual Key값을 넣으면 되고, Return 되는 값은 상태를 알고자하는 Virtual Key값의 상태를 리턴한다.

쉽게 예를 들면, 음.. NumLock 키가 눌려져 있는지를 보려면.. 다음과 같이 해주면 될 것이다.
 
       int numlock_status = 0;

        ....

        if((::GetKeyState(VK_NUMLOCK) & 0x80000 ) > 0)
            numlock_status = 1;
        else
            numlock_status = 0;

이와 유사한 기능을 가지고 있는 함수로.. GetAsyncKeyState() 라는 함수가 있다.

MSDN에는 현재 하드웨어(키보드)의 상태값을 알아내고자 한다면.. GetAsyncKeyState() 를 사용하라고 한다.
GetKeyState() 는 메시지큐에 저장된 메시지에 따라 값이 변하기 때문이다. 메시지큐에 처리되지 않은 CTRL 키가 눌렸다는 메시지가 쌓여있을 때, 사용자가 CTRL 키를 더이상 누르지 않고 있다면... GetAsyncKeyState() 는 "키가 눌려있지 않음"을 반환하고, GetKeyState() 는 "키가 눌렸음"을 반환하기 때문이다.
(참고 : 러브러브 님의 블로그)

2007. 5. 11. 17:34

"'마이너리티 리포트' 속 장면이 현실로..." 어디까지 발전하는거야?


ZDNet 뉴스를 보던 중 주간 1위 기사로 랭크된 신기한 기사가 있어서 올려본다.
몇년 전인가? 톰크루즈 주연의 '마이너리티 리포트'란 영화가 있었다. 상당히 진보된 미래를 배경으로 한 범죄 방지 예언자 시스템을 사용하던 꽤 신기한 세상의 이야기(?)..

영화상에서 기계를 작동시킬 때 사용했던 장치는 마우스나 키보드가 아닌 화면에 손으로.. 음.. 대충 손으로 샥!샥!샥! 하는 그런 것이었다.


오홋!! 그런데 이게 이젠 정말 이게 현실화 되어 버린듯 하다.

관련기사 ZDNet : 영화「마이너리티 리포트」속 장면이 현실로

앞으로 다음은 어떤 영화의 미래 세상이 현실로 다가올 것인가??