首先我打开一个文本文档。。然后按一下设定好的热键,就在文本中输出一个1,再按一下就输出一个2,如此循环,能否实现?

解决方案 »

  1.   

    我说的文本文档不是VB的TEXTBOX控件。是右键点击桌面---新键---文本文档!!(在这里用程序输入)
      

  2.   

    可以的
    先新建一个exe,写入以下代码Private Sub Command1_Click()
    Shell "notepad.exe", vbNormalFocus
    AddHook
    End SubPrivate Sub Form_Load()
    num = 1
    End SubPrivate Sub Form_Unload(Cancel As Integer)
    DelHook
    End Sub
    在新建一个模块,插入以下代码Public Type KEYMSGS
           vKey As Long          '虚拟码  (and &HFF)
           sKey As Long          '扫描码
           flag As Long          '键按下:128 抬起:0
    End Type
    Public keyMsg As KEYMSGS
    Public Const WH_KEYBOARD_LL = 13
    Public lHook As Long
    Public num As Long'消息
    Public Const HC_ACTION = 0
    Public Const HC_SYSMODALOFF = 5
    Public Const HC_SYSMODALON = 4
    '键盘消息
    Public Const WM_KEYDOWN = &H100
    Public Const WM_KEYUP = &H101
    Public Const WM_SYSKEYDOWN = &H104
    Public Const WM_SYSKEYUP = &H105Public 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
    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 Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
                                                                (lpvDest As Any, _
                                                                ByVal lpvSource As Long, _
                                                                ByVal cbCopy As Long)Public Sub AddHook()
    lHook = SetWindowsHookEx(WH_KEYBOARD_LL, AddressOf CallKeyHookProc, App.hInstance, 0)
    End SubPublic Sub DelHook()
      UnhookWindowsHookEx lHook
    End Sub
    Public Function CallKeyHookProc(ByVal code As Long, ByVal wParam As Long, ByVal lParam As Long) As Long    If code = HC_ACTION Then
            CopyMemory keyMsg, lParam, LenB(keyMsg)
            Select Case wParam
                Case WM_SYSKEYDOWN, WM_KEYDOWN:
                    If (keyMsg.vKey And &HFF) = vbKeyA Then '设置自定义按键
                        SendKeys num
                        num = num + 1
                        CallKeyHookProc = 1 '屏蔽按键
                    End If
                Case WM_SYSKEYUP, WM_KEYUP:
            End Select
            
        End If
                
        If code <> 0 Then
            CallKeyHookProc = CallNextHookEx(0, code, wParam, lParam)
        End IfEnd Function然后在窗体中加一个 button 按钮,就完成了运行后,点 按钮就把记事本打开,按 a键,就输入 123...把分给我啦,我已经没分下载东东了
      

  3.   

    如果是数组的话,就在
    Public num As Long
    下面定义一个
    Public yours(10) As Long
    把 Private Sub Form_Load()改为Dim n As Integer
    num = 0
    For n = 0 To 10
        yours(n) = n
    Next再把模块中的
    SendKeys num
    num = num + 1
    改为
    SendKeys yours(num)
    If (num < 10) Then num = num + 1
      

  4.   

    7楼是个钩子程序,可以对所有运行中程序的文本框进行操作,如果你只是在你自己的聊天窗口中进行的话,
    也用不着钩子吧,
    可以在窗口的KEYDOWN事件中检查热键,
    然后把数组中的内容显示到文本框。
      

  5.   

    取消11楼的问题!!重新问下:                    SendKeys yours(num)
    If (num < 10) Then num = num + 1
    ElseIf (num > 10) Then num = 0,我在这里加了这句。我的意思是想当它把数组中最后一个元素的数据输出时,再重新回到第一个元素继续输出,可是运行后,我发现我加的这句不起作用。。应该怎样改?
      

  6.   

    ElseIf (num >= 10) Then num = 0
      

  7.   

    把 If (num < 10) Then num = num + 1
    改为If (num < 10) Then 
        num = num + 1
    else
        num = 0
    EndIf
      

  8.   

    SORRY!!!很棒。没错,是我弄错了。VERY GOOD!马上结贴,给分!
      

  9.   

    把这句Case WM_SYSKEYDOWN, WM_KEYDOWN:下面的改为If (keyMsg.vKey And &HFF) = vbKeyA Then  '设置自定义按键A
                        kg = kg Xor 1
                    End If
                    If (keyMsg.vKey And &HFF) = vbKeyB And kg = 1 Then'设置自定义按键B
                        SendKeys yours(num)
                        If (num < 10) Then
                            num = num + 1
                        Else
                            num = 0
                        End If
                    CallKeyHookProc = 1 '屏蔽按键
                    End If
    再在Private Sub Form_Load()中加入kg = 1 '1代表 是开着的就行了,
    拿你分真不容易啊!
      

  10.   

    补充:
    还要在模块的顶部就是
    Public num As Long
    Public yours(10) As Long
    的下面定义这个
    Public kg As Integer
      

  11.   

    上面的程序是 按A键 就是开关,按B键 就输出yours数组的东西