我们通常的键盘输入时长按某个按键就会产生一连串重复的键盘事件(如按下A一三秒会收到一串"AAAAAAAAA"),如何用keybd_event模拟这种效果,当按键按下一会后就重复发送按键,直至按键松开呢?

解决方案 »

  1.   

    Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal Scan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
    Const KEYEVENTF_EXTENDEDKEY = &H1
    Const KEYEVENTF_KEYUP = &H2
    Private Sub Command1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
                keybd_event Asc("A"), 0, KEYEVENTF_EXTENDEDKEY , 0
    End SubPrivate Sub Command1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
                keybd_event Asc("A"), 0, KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0
    End Sub
      

  2.   

    Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal Scan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
    Const KEYEVENTF_EXTENDEDKEY = &H1
    Const KEYEVENTF_KEYUP = &H2
    Private Sub Command1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)Timer1.Enabled = True
    a = 0
    Text1.Text = ""End SubPrivate Sub Command1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Timer1.Enabled = False
    Text1.SetFocus
    For i = 0 To a
        
        keybd_event Asc("A"), 0, KEYEVENTF_EXTENDEDKEY, 0
        keybd_event Asc("A"), 0, KEYEVENTF_KEYUP, 0
    Next i
    End SubPrivate Sub Form_Load()
    Timer1.Interval = 1000
    Timer1.Enabled = False
    End SubPrivate Sub Timer1_Timer()
    a = a + 1
    End Sub再Module中设置a变量
      

  3.   

    谢谢 dongle2001,我不想用timmer来实现。我想应该有底层技术的支持来实现这个功能的
      

  4.   

    timer有何不好?
    如果不用timer,那你需要看看一直按某个按键时系统都收发了那些消息。
      

  5.   

    如果不用Timer,那就用HOOK吧。按键消息在长按时,会发出以40开头的消息,在放开时,会发出以C开头的消息。在按下时,会发出放开消息去掉C的消息。
      

  6.   

    循环行不行?定义一个boolean变量aaado while aaa
        doevents
        keybd_event .....
    loop停的时候使aaa=true这样应该行吧