Hook(钩子)应该可以,具体不清楚,可查阅相关资料。

解决方案 »

  1.   

    if keyascii=64 then
        SendKeys vbKeyB
    end if
      

  2.   

    使用模拟按键的API函数
    截获按键不知道
    我也想学
      

  3.   

    如何拦截键盘输入 Option Explicit
    Declare Function SetWindowsHookEx Lib "user32" Alias _"SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, _ByVal hmod As Long, ByVal dwThreadId As Long) As LongDeclare Function UnhookWindowsHookEx Lib "user32" _(ByVal hHook As Long) As LongDeclare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, _ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long
    Public hnexthookproc As LongPublic Const HC_ACTION = 0Public Const WH_KEYBOARD = 2
    Public Sub UnHookKBD()If hnexthookproc <> 0 ThenUnhookWindowsHookEx hnexthookprochnexthookproc = 0End IfEnd SubPublic Function EnableKBDHook()If hnexthookproc <> 0 ThenExit FunctionEnd Ifhnexthookproc = SetWindowsHookEx(WH_KEYBOARD, AddressOf _MyKBHFunc, App.hInstance, 0)If hnexthookproc <> 0 ThenEnableKBDHook = hnexthookprocEnd IfEnd FunctionPublic Function MyKBHFunc(ByVal iCode As Long, _ByVal wParam As Long, ByVal lParam As Long) As Long'这叁个参数是固定的,不能动,而MyKBHFunc这个名称只要和'SetWindowsHookex()中 AddressOf後的名称一样便可,不一定叫什麽'wParam 是传入按了哪个key的virtual-key code
    '如果您将以下的两行un则所有键盘的输入皆没有作用'MyKBHFunc = 1 '吃掉讯息'Exit Function
    MyKBHFunc = 0 '讯息要处理If iCode < 0 ThenMyKBHFunc = CallNextHookEx(hnexthookproc, iCode, wParam, lParam)Exit FunctionEnd IfIf wParam = vbKeySnapshot Then '侦测 有没有按到PrintScreen键MyKBHFunc = 1 '在这个Hook便吃掉这个讯息Debug.Print "haha"ElseCall CallNextHookEx(hnexthookproc, iCode, wParam, lParam)End IfEnd Function
    '以下在FormPrivate Sub Form_Load()Call EnableKBDHookEnd Sub
    Private Sub Form_Unload(Cancel As Integer)Call UnHookKBDEnd Sub
      

  4.   


    非常感谢,可是还有问题:
    刚开始运行程序时,按下PrintScreen键,一切正常。
    当我切换到另一个程序,例如写字板,
    并按下PrintScreen键时,没有任何反映。
    再切换回来,按下PrintScreen键,没有任何反映,
    好像被屏蔽了一样。我看MSDN上说是如果要定义system scope 的 Hook,一定
    要将filter function放在一个Dll中,于是我将工程转换为ActiveX Dll,
    添加一个Class,然后编译成dll文件,再由另外一个Standard Exe引用,
    可问题依旧。
      

  5.   

    必须放入Win32 dll!而VB只能写ActiveX Dll,所以VB不能写全局钩子