用VB操作一个另外一个程序的页面,并且控制程序向该页面一个文本框输入字符,这里的文本框是用坐标的形式定位的,现在我要输入的是:“E:\2\3.JPG”下面是用VB写的部分原代码:
tmp = SetCursorPos(307, 552)’设定操作的文本框的坐标
 mouse_event MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 0, 0, 0, 0'实现鼠标左键单击事件
 keybd_event 70, 0, 0, 0
 keybd_event 70, 0, KEYEVENTF_KEYUP, 0 '模拟键盘输入F
 
 keybd_event 16, 0, 0, 0 '模拟键盘输入shift
 keybd_event 186, 0, 0, 0 '模拟键盘按下“:”键  
 keybd_event 186, 0, KEYEVENTF_KEYUP, 0   '模拟键盘弹起“:”键
 keybd_event 16, 0, KEYEVENTF_KEYUP, 0   '模拟键盘弹起shift keybd_event 220, 0, 0, 0
 keybd_event 220, 0, KEYEVENTF_KEYUP, 0 '模拟键盘输入“\”
 keybd_event 98, 0, 0, 0
 keybd_event 98, 0, KEYEVENTF_KEYUP, 0 '模拟键盘输入“2”
  keybd_event 220, 0, 0, 0
 keybd_event 220, 0, KEYEVENTF_KEYUP, 0 '模拟键盘输入“\”
 keybd_event 99, 0, 0, 0
 keybd_event 99, 0, KEYEVENTF_KEYUP, 0 '模拟键盘输入“3”
 keybd_event 110, 0, 0, 0
 keybd_event 110, 0, KEYEVENTF_KEYUP, 0 '模拟键盘输入“.”
 keybd_event 74, 0, 0, 0
 keybd_event 74, 0, KEYEVENTF_KEYUP, 0 '模拟键盘输入“J”
 keybd_event 80, 0, 0, 0
 keybd_event 80, 0, KEYEVENTF_KEYUP, 0 '模拟键盘输入“P”
 keybd_event 71, 0, 0, 0
 keybd_event 71, 0, KEYEVENTF_KEYUP, 0 '模拟键盘输入“G”
上述程序代码执行以后输出的结果是:“F:|2|3.JPG”好像模拟shift按键弹起的那句话没有起作用,从按下以后就再也没有弹起来,这是为什么,求高手指点。

解决方案 »

  1.   

    试试:Const KEYEVENTF_KEYUP = &H2
    Const VK_TAB = &H9keybd_event VK_TAB, 0, 0, 0
    keybd_event VK_TAB, 0, KEYEVENTF_KEYUP, 0
      

  2.   

    keybd_event 16, 42, 0, 0 '模拟键盘输入shift 
    keybd_event 16, 42, KEYEVENTF_KEYUP, 0  '模拟键盘弹起shift 
    其中42由MapVirtualKey(16, 0)得到
      

  3.   

    搞错了,我的代码是 Tab 键。
      

  4.   

    你的代码在我这里测试:f:\2\3.jpg
      

  5.   

    楼上几位的方式我都试了一下,还是不好使,出来的结果还是F:|2|3.JPG,我换了一台电脑用还是这个结果,不知道什么原因,郁闷死了!!!我把这个窗体的代码都贴出啦,高手再帮忙分析吧
    Private Sub Command1_Click()
    Dim winHwnd As Long
    Dim kk
    Dim RetVal As LongwinHwnd = FindWindow(vbNullString, "全国计算机应用技术证书考试(NIT) -- 网页对话框")
    winHwnd = GetWindow(winHwnd, GW_child)
    Debug.Print winHwndIf winHwnd <> 0 ThenRetVal = BringWindowToTop(winHwnd)
     tmp = SetCursorPos(307, 552)
     mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
      mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
     keybd_event 70, 0, 0, 0
     keybd_event 70, 0, KEYEVENTF_KEYUP, 0 '模拟键盘输入F
     
     keybd_event 16, 42, 0, 0 '模拟键盘输入shift
     keybd_event 186, 0, 0, 0  '模拟键盘按下:186键
      
     keybd_event 186, 0, KEYEVENTF_KEYUP, 0  '模拟键盘弹起:键 keybd_event 16, 42, KEYEVENTF_KEYUP, 0   '模拟键盘弹起shift keybd_event 220, 0, 0, 0
     keybd_event 220, 0, KEYEVENTF_KEYUP, 0 '模拟键盘输入\
     keybd_event 98, 0, 0, 0
     keybd_event 98, 0, KEYEVENTF_KEYUP, 0 '模拟键盘输入2
      keybd_event 220, 0, 0, 0
     keybd_event 220, 0, KEYEVENTF_KEYUP, 0 '模拟键盘输入\
     keybd_event 99, 0, 0, 0
     keybd_event 99, 0, KEYEVENTF_KEYUP, 0 '模拟键盘输入3
     keybd_event 110, 0, 0, 0
     keybd_event 110, 0, KEYEVENTF_KEYUP, 0 '模拟键盘输入.
     keybd_event 74, 0, 0, 0
     keybd_event 74, 0, KEYEVENTF_KEYUP, 0 '模拟键盘输入J
     keybd_event 80, 0, 0, 0
     keybd_event 80, 0, KEYEVENTF_KEYUP, 0 '模拟键盘输入P
     keybd_event 71, 0, 0, 0
     keybd_event 71, 0, KEYEVENTF_KEYUP, 0 '模拟键盘输入G
    If RetVal = 0 ThenMsgBox "置入消息错误!"End IfElseMsgBox "查找控件没有打开!"End IfEnd Sub
      

  6.   

    估计网页或浏览器的问题。
    用 TextBox 或 WebBrowser 的简单网页测试都能输入:
    f:\2\3.jpg
      

  7.   

    我觉得楼主最好用PostMessage函数,直接就将字符串以一个一个字符的形式传送过去就可以了。当然使用键盘模拟也可以。我有一个不太成熟的例子,也许对你有帮助:
    http://download.csdn.net/source/1273325
      

  8.   

    我用上述代码尝试向文本文档中模拟键盘消息,出来的结果还是一样F:|2|3.JPG,不知道为什么,就是不好使,大家看看什么原因啊
      

  9.   

    告诉我邮箱,我把我的源程序发给你,或者你把你试验的发给我[email protected]。我参考一下,谢谢了
      

  10.   

    告诉我邮箱,我把我的源程序发给你,或者你把你试验的发给我[email protected]。我参考一下,谢谢了
      

  11.   

    可能你的键盘与我们的不一样,所以不能直接用常量 220,应该用 VkKeyScan 取得字符 "\" 的 virtual-key code。