CAFE

vb6 api

키보드 후킹

작성자올란도|작성시간09.11.27|조회수1,711 목록 댓글 2

출처:http://kin.naver.com/detail/detail.php?d1id=1&dir_id=10107&docid=9064594&qb=xbC6uLXlIMjExbc=&enc=euc-kr&section=kin.qna&rank=4&sort=0&spq=0

 

a, b, c와 같은 키들은 Form의 속성 중 KeyPreview를 True로 설정한 후..

----------------------

Private Sub Form_KeyPress(KeyAscii As Integer)
    If KeyAscii = Asc("a") Or KeyAscii = Asc("b") Then KeyAscii = 0
End Sub

----------------------

와 같이 코딩을 하면 폼내에 a와 b의 문자는 모두 차단됩니다.

 

shift와 F10, F11을 무력화 시키는 것은 키보드 후킹을 통해 가능합니다.(조금 복잡합니다.)

다음 예제를 참조하세요.

먼저 모듈에다..

----------------------

Option Explicit

Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Public Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
Public Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal nCode As Long, ByVal wParam As Long, lParam As Any) As Long
Public Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
Public Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer

Public Const WM_KEYDOWN = &H100
Public Const WM_KEYUP = &H101
Public Const WM_SYSKEYDOWN = &H104
Public Const WM_SYSKEYUP = &H105

Public Const WH_KEYBOARD_LL = 13

Public Const VK_F10 = &H79
Public Const VK_F11 = &H7A
Public Const VK_SHIFT = &H10


Public Type KBDLLHOOKSTRUCT
    vkCode As Long
    scanCode As Long
    flags As Long
    time As Long
    dwExtraInfo As Long
End Type

Dim p As KBDLLHOOKSTRUCT

Public Function LowLevelKeyboardProc(ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Dim fEatKeystroke As Boolean
   
    If (nCode = 0) Then
        If wParam = WM_KEYDOWN Or wParam = WM_SYSKEYDOWN Or wParam = WM_KEYUP Or wParam = WM_SYSKEYUP Then
            CopyMemory p, ByVal lParam, Len(p)
           
            If GetKeyState(VK_SHIFT) And &HF0000000 Then
                fEatKeystroke = True
            End If
            If (p.vkCode = VK_F10) Or (p.vkCode = VK_F11) Then
                fEatKeystroke = True
            End If
        End If
    End If
   
    If fEatKeystroke Then
        LowLevelKeyboardProc = -1
    Else
        LowLevelKeyboardProc = CallNextHookEx(0, nCode, wParam, ByVal lParam)
    End If
End Function

----------------------

 

폼에다가는..

----------------------

Option Explicit

Dim hhkLowLevelKybd As Long

Private Sub Form_Load()
    hhkLowLevelKybd = SetWindowsHookEx(WH_KEYBOARD_LL, AddressOf LowLevelKeyboardProc, App.hInstance, 0)
End Sub

Private Sub Form_Unload(Cancel As Integer)
    If hhkLowLevelKybd <> 0 Then UnhookWindowsHookEx hhkLowLevelKybd
End Sub

다음검색
현재 게시글 추가 기능 열기

댓글

댓글 리스트
  • 작성자구르마 | 작성시간 12.01.13 가입하자마자 큰 도움 되네요 ^^ 감사 합니다.
  • 작성자하드가부족해 | 작성시간 13.04.12 한글 처리가..ㅠㅠ
댓글 전체보기
맨위로

카페 검색

카페 검색어 입력폼