想实现的效果如下
(1)点击“屏蔽按钮”之后,键盘的windows按键就无法触发开始菜单了
vb新手
求高手给出完整代码 

解决方案 »

  1.   

    停用Windows徽标键
    标准Windows键盘上都有一个Windows徽标键(即键盘上带有窗口图案的键),它的作用是和其他键配合完成一些针对Windows的快捷操作,如“Windows徽标键+D”可以立即显示桌面,“Windows徽标键+L”可以快速锁定计算机(针对Windows XP)等,为我们使用计算机提供了更为快捷的方法。
        不过,有些用户并不喜欢Windows徽标键,那么你可以通过修改注册表来停用Windows徽标键:打开注册表编辑器,依次展开 [HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Keyboard Layout]分支,然后在右侧窗口中找到或者新建一个名为“Scancode Map”的“REG_BINARY(二进制)”子项,双击该子项,将其键值设置为00 00 00 00 00 00 00 00 02 00 00 00 00 00 5b e0 00 00 00 00)
      两个都锁了:
      00 00 00 00 00 00 00 00 03 00 00 00 00 00 5b e0 00 00 5c e0 00 00 00 00
      然后关掉注册表,
      "开始"-->"注销"
      ok!!,左边的win键被屏蔽了,右边那个工作正常!
    Windows Registry Editor Version 5.00[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
    "Scancode Map"=hex:00,00,00,00,00,00,00,00,02,00,00,00,00,00,5b,e0,00,00,00,00
      

  2.   

    要编译成exe文件才能出效果。'***************************
    '模块代码Module1
    '***************************
    Option ExplicitPrivate Declare Function CallNextHookEx Lib "user32" _
       (ByVal hHook As Long, _
        ByVal nCode As Long, _
        ByVal wParam As Long, _
        lParam As Any) As Long
        
    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
        
    Private Declare Function UnhookWindowsHookEx Lib "user32" _
       (ByVal hHook As Long) As Long
       
    Private Declare Sub CopyMemory Lib "kernel32" _
        Alias "RtlMoveMemory" _
       (Destination As Any, _
        Source As Any, _
        ByVal Length As Long)Private Type PKBDLLHOOKSTRUCT
        vkCode As Long
        scanCode As Long
        flags As Long
        time As Long
        dwExtraInfo As Long
    End TypePrivate Const WM_KEYDOWN = &H100
    Private Const WM_SYSKEYDOWN = &H104
    Private Const WM_KEYUP = &H101
    Private Const WM_SYSKEYUP = &H105Private Const VK_LWIN = &H5B
    Private Const VK_RWIN = &H5CPrivate Const HC_ACTION = 0
    Private Const WH_KEYBOARD_LL = 13Private Const VK_CONTROL = &H11
    Private Const VK_ESCAPE = &H1B
    Private Const VK_MENU = &H12
    Private Const VK_TAB = &H9
    Private Const VK_Delete = &H2E
    Private lngHook As Long'使用底层KeyboardHook拦截按键消息
    Public Function LowLevelKeyboardProc(ByVal nCode As Long, _
                                         ByVal wParam As Long, _
                                         ByVal lParam As Long) As Long
        Dim blnHook As Boolean
        Dim p As PKBDLLHOOKSTRUCT
        
        If nCode = HC_ACTION Then
            Select Case wParam
                Case WM_KEYDOWN, WM_SYSKEYDOWN, WM_KEYUP, WM_SYSKEYUP
                    Call CopyMemory(p, ByVal lParam, Len(p))
                    If p.vkCode = VK_LWIN Or p.vkCode = VK_RWIN Then blnHook = True '按下了左/右Win键
                    If p.vkCode = VK_CONTROL Or p.vkCode = VK_ESCAPE Then blnHook = True '按下了Ctrl+Esc键
                    If p.vkCode = VK_MENU Or p.vkCode = VK_TAB Then blnHook = True '按下了Alt+Tab键
                Case Else
                    'do nothing
            End Select
        End If
        
        If blnHook Then
            LowLevelKeyboardProc = 1
        Else
            Call CallNextHookEx(WH_KEYBOARD_LL, nCode, wParam, lParam)
        End If
    End FunctionPublic Sub HooK()
        lngHook = SetWindowsHookEx(WH_KEYBOARD_LL, _
                                   AddressOf LowLevelKeyboardProc, _
                                   App.hInstance, _
                                   0)
    End SubPublic Sub UnHooK()
        Call UnhookWindowsHookEx(lngHook)
    End Sub'***************************
    '窗体代码Form1
    '***************************Private Sub Form_Load()
         Call   HooK       '屏蔽Win键
    End SubPrivate Sub Form_Unload(Cancel As Integer)
           Call UnHooK           '取消屏蔽Win键
    End Sub这只是简单的屏蔽了几个键,当然如果要屏蔽更多的键,只要在模块的LowLevelKeyboardProc函数中设置你想要拦截键盘键值过滤掉就可以了。
      

  3.   

    http://www.m5home.com/bbs/thread-517-1-6.html用键盘HOOK做的,老代码了....
      

  4.   


    'API CallNextHookEx
    Public Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal ncode As Long _
    , ByVal wParam As Long, lParam As Any) As Long琢磨CallNextHookEx的参数含义 和函数功能中
    Being dizzy.......
      

  5.   


    Public Sub HooK()
    lngHook = SetWindowsHookEx(WH_KEYBOARD_LL, _
                                   AddressOf LowLevelKeyboardProc, _
                                   App.hInstance, _
                                   0)
    End SubMSDN上,SetWindowsHookEx函数说明是英文版的,看起来颇费力。
    求教高手
    (1)WH_KEYBOARD_LL 这个 常量在 API浏览器中找不着,请问这个参数代表什么?
    (2)Address Of LowLevelKeyboardProc, 这个参数的意思是什么?按Windows键的时候
    LowLevelKeyboardProc的值会被 赋值成 “1”,那 Address Of  “1”
     (3)App.hInstance msdn上说这个是 “返回应用程序的事例”,这也忒抽象了。请高手参照监视表
    简单说下App.hInstance的意思吧(4)0 as long. - - 求解释
      

  6.   

    参考AutoHotKey源代码http://www.autohotkey.com
      

  7.   

    1,这个常量代表低级键盘HOOK.类似的还有wh_mouse_ll,是用于鼠标HOOK的.
        给你个参考: http://www.m5home.com/blog/article.asp?id=2452,这个意思你直接在addressof上按F1就有答案了,除非你没装MSDN.
        它是取得后面所跟的公共函数或过程的地址,一般用于API回调.3,App.hInstance也如上一条一样,按F1就会有详细的答案.
        既然你还未到不使用MSDN的地步,建议还是装上吧.4,我不知道你这段代码在哪里,没看明白.