text1.setFocusFor j = 1 To Len(CrtStr)
        subKey = CByte(Asc(UCase(Mid(CrtStr, j, 1))))
        pressKey (subKey)
Next jtext2=text1该段代码是将一个字符串用模拟键盘输入的方式输入到text1,模拟输入没问题,但text2中却没反应(pressKey函数是用keybd_event做的输出一个字符的函数)如果将text2=text1移到一个Timer控件中执行却能成功,显然VB在模拟输入的循环结束之前执行了最后一行代码,不知哪位高手能指点一下!!!谢谢

解决方案 »

  1.   

    For j = 1 To Len(CrtStr)
            subKey = CByte(Asc(UCase(Mid(CrtStr, j, 1))))
            pressKey (subKey)
    Next j
    doeventstext2=text1
      

  2.   

    附上完整代码
    Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
    Public Function pressKey(ByVal myKey As Byte)  '模拟键盘
    Select Case myKey
      Case 65 To 90
        Call keybd_event(myKey, 0, 0, 0)
        Call keybd_event(myKey, 0, KEYEVENTF_KEYUP, 0)
      Case vbKeySpace
        Call keybd_event(vbKeySpace, 0, 0, 0)
        Call keybd_event(vbKeySpace, 0, KEYEVENTF_KEYUP, 0)
    End Select
    End FunctionPrivate Sub Command1_Click()
    Dim CrtStr As String
    Dim i As Integer
    Dim subKey As Byte
    i = 1
    CrtStr = "adsbsdfsd"
    Text1.SetFocus
    For i = 1 To Len(CrtStr)
      subKey = CByte(Asc(UCase(Mid(CrtStr, i, 1))))
      pressKey (subKey)
    Next i
    Timer1.Enabled = TrueEnd SubPrivate Sub Timer1_Timer()
    Text2 = Text1
    End Sub
    在2000和XP下均这样,98没测