HOOK sự kiện bàn phím trong VB6 !. (2 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

hungpecc1

Thành viên gắn bó
Tham gia
24/8/12
Bài viết
1,709
Được thích
2,304
Giới tính
Nam
Chúc tất cả thành viên GPE một buổi sáng tốt lành !
Hôm qua em có mày mò viết code Hook cho keyboard như sau:
Code trong moudle :
Mã:
Option Explicit
Public hKbdHook As Long
Private Const WH_KEYBOARD_LL As Integer = 13
Private Const HC_ACTION As Integer = 0
Private Const WM_KEYDOWN As Long = &H100
Private Const WM_KEYUP As Long = &H101
 
 
Private Type KBDLLHOOKSTRUCT
    vkCode As Integer
    scanCode As Integer
    flags As Integer
    time As Integer
    dwExtraInfo As Integer
    End Type
 
 
Private 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 UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
 
 
Private Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
 
 
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
 
 
Private Function LowLevelKeyboardProc(ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Integer
 
    Dim kbdllhs As KBDLLHOOKSTRUCT
    CopyMemory kbdllhs, ByVal lParam, Len(kbdllhs)
 
 
    If nCode = HC_ACTION Then
        LowLevelKeyboardProc = CallNextHookEx(hKbdHook, nCode, wParam, lParam)
 
 
        Select Case wParam
            Case WM_KEYDOWN
[B][COLOR=#b22222]                If kbdllhs.vkCode = 13 Then[/COLOR][/B]
[B][COLOR=#b22222]                    FrmMain.Show[/COLOR][/B]
[B][COLOR=#b22222]                Else[/COLOR][/B]
[B][COLOR=#b22222]                    FrmMain.Hide[/COLOR][/B]
[B][COLOR=#b22222]                End If[/COLOR][/B]
            Case WM_KEYUP
        End Select
 
Else: LowLevelKeyboardProc = CallNextHookEx(hKbdHook, nCode, wParam, lParam)
End If
 
End Function
 
Sub Main()
    hKbdHook = SetWindowsHookEx(WH_KEYBOARD_LL, AddressOf LowLevelKeyboardProc, App.hInstance, 0&)
    If hKbdHook = 0 Then
        MsgBox "Initialisation of keyboard hook failed.", vbCritical, "Keyboard Hook"
        Exit Sub
    End If
[COLOR=#ff0000][B]    FrmMain.Hide[/B][/COLOR]
End Sub

sau đó tạo 1 form có tên là frmMain và một cmd button ; code trong form như sau:
Mã:
Private Sub Form_Unload(Cancel As Integer)
    Call UnhookWindowsHookEx(hKbdHook)
End Sub
'--------------------------
Private Sub Command1_Click()
[COLOR=#ff0000][B]Call Main[/B][/COLOR]
End Sub

Vân đề em gặp lỗi ở đây là :
* Nếu goi thủ tục Sub main từ form FrmMain --> thì không nhận được bất kỳ sự kiện nào khi nhấn 1 phím từ keyboard
** Nếu gọi thủ tục trực tiếp là subMain ( Project Property : chọn sub Main() ) thì code trên ok !
Như vậy là do code của em sai, hay là thiếu sót chỗ nào ? mong các thành viên GPE giải thích cho mình hiểu rõ hơn !
Cảm ơn !
 

File đính kèm

Web KT

Bài viết mới nhất

Back
Top Bottom