restrict alt+tab and start menu from keyboard while program executing

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Swan
    New Member
    • Mar 2008
    • 27

    restrict alt+tab and start menu from keyboard while program executing

    How can I restrict alt+tab and start menu from keyboard while program executing(VB)?I am posting what I tried--

    form.frm

    Option Explicit
    Private Sub Form_Load()
    HookKeyboard
    End Sub
    Private Sub Form_Unload(Can cel As Integer)
    UnhookKeyboard
    End Sub


    module1.bas

    Option Explicit

    Public Declare Function UnhookWindowsHo okEx Lib "user32" _
    (ByVal hHook As Long) As Long
    Public Type KBDLLHOOKSTRUCT
    vkCode As Long
    scanCode As Long
    flags As Long
    time As Long
    dwExtraInfo As Long
    End Type

    ' Low-Level Keyboard Constants
    Public Const HC_ACTION = 0
    Public Const LLKHF_EXTENDED = &H1
    Public Const LLKHF_INJECTED = &H10
    Public Const LLKHF_ALTDOWN = &H20
    Public Const LLKHF_UP = &H80

    ' Virtual Keys
    Public Const VK_TAB = &H9
    Public Const VK_CONTROL = &H11
    Public Const VK_ESCAPE = &H1B
    Public Const VK_DELETE = &H2E

    Public Const WH_KEYBOARD_LL = 13&
    Public KeyboardHandle As Long

    Public KeyboardHook As KeyboardHook

    Public Declare Function SetWindowsHookE x Lib "user32" _
    Alias "SetWindowsHook ExA" (ByVal idHook As Long, _
    ByVal lpfn As Long, _
    ByVal hmod As Long, _
    ByVal dwThreadId As Long) As Long

    Public Declare Sub CopyMemory Lib "kernel32" _
    Alias "RtlMoveMem ory" _
    (pDest As Any, _
    pSource As Any, _
    ByVal cb As Long)

    Public Declare Function GetAsyncKeyStat e Lib "user32" _
    (ByVal vKey As Long) As Integer

    Public Declare Function CallNextHookEx Lib "user32" _
    (ByVal hHook As Long, _
    ByVal nCode As Long, _
    ByVal wParam As Long, _
    ByVal lParam As Long) As Long
    Public Sub HookedState(ByV al Hooked As Boolean, _
    ByVal Text As String)
    If (Hooked) Then Debug.Print Text
    End Sub
    ' Implement this function to block as many key combinations as
    ' you'd like
    Public Function IsHooked(ByRef Hookstruct As KBDLLHOOKSTRUCT ) _
    As Boolean
    If (KeyboardHook Is Nothing) Then
    IsHooked = False
    Exit Function
    End If

    ' Checks for Ctrl + Esc
    If (Hookstruct.vkC ode = VK_ESCAPE) And _
    CBool(GetAsyncK eyState(VK_CONT ROL) _
    And &H8000) Then

    IsHooked = KeyboardHook.Bl ockControlEscap e

    Call HookedState(IsH ooked, "Ctrl + Esc blocked")
    Exit Function
    End If

    ' Checks for Alt + Tab
    If (Hookstruct.vkC ode = VK_TAB) And _
    CBool(Hookstruc t.flags And _
    LLKHF_ALTDOWN) Then

    IsHooked = KeyboardHook.Bl ockAltTab

    Call HookedState(IsH ooked, "Alt + Tab blockd")
    Exit Function
    End If

    ' Checks for Alt + Esc
    If (Hookstruct.vkC ode = VK_ESCAPE) And _
    CBool(Hookstruc t.flags And _
    LLKHF_ALTDOWN) Then

    IsHooked = KeyboardHook.Bl ockAltEscape

    Call HookedState(IsH ooked, "Alt + Escape blocked")
    Exit Function
    End If

    End Function
    Public Function KeyboardCallbac k(ByVal Code As Long, _
    ByVal wParam As Long, ByVal lParam As Long) As Long

    Static Hookstruct As KBDLLHOOKSTRUCT

    If (Code = HC_ACTION) Then
    ' Copy the keyboard data out of the lParam (which is a pointer)
    Call CopyMemory(Hook struct, ByVal lParam, Len(Hookstruct) )

    If (IsHooked(Hooks truct)) Then
    KeyboardCallbac k = 1
    Exit Function
    End If

    End If

    KeyboardCallbac k = CallNextHookEx( KeyboardHandle, _
    Code, wParam, lParam)

    End Function
    Public Sub HookKeyboard()
    KeyboardHandle = SetWindowsHookE x( _
    WH_KEYBOARD_LL, AddressOf KeyboardCallbac k, _
    App.hInstance, 0&)

    Call CheckHooked
    End Sub
    Public Sub CheckHooked()
    If (Hooked) Then
    Debug.Print "Keyboard hooked"
    Else
    Debug.Print "Keyboard hook failed: " & Err.LastDllErro r
    End If
    End Sub
    Public Function Hooked()
    Hooked = KeyboardHandle <> 0
    End Function
    Public Sub UnhookKeyboard( )
    If (Hooked) Then
    Call UnhookWindowsHo okEx(KeyboardHa ndle)
    End If
    End Sub

    class.cls

    Public Function BlockAltEscape( ) As Boolean
    BlockAltEscape = True
    End Function
    Public Function BlockAltTab() As Boolean
    BlockAltTab = True
    End Function
    Public Function BlockControlEsc ape() As Boolean
    BlockControlEsc ape = True
    End Function

    (I got it from net,but its not working.Any new idea?)
    Thaking you!
  • debasisdas
    Recognized Expert Expert
    • Dec 2006
    • 8119

    #2
    You can't handle the Window key in VB.

    Comment

    • lotus18
      Contributor
      • Nov 2007
      • 865

      #3
      Why do you need to restrict these keys? For what purpose? What kind of application are you developing?

      Just look for the keyascii codes of these keys and if they hit these keys show a messagebox. be sure that your form is set to keypreview=true .

      Rey Sean

      Comment

      Working...