找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 26602|回复: 10

[问题求助] vbs 模拟按键

[复制链接]
发表于 2014-5-13 10:59:12 | 显示全部楼层 |阅读模式
工作中需实现以下功能
一个软件(全屏的)和execl类似,也是表格
我的目的是要复制每一行的内容到 abc.txt
可该软件只能一次复制一行,不能全选
具体手动流程是
鼠标选中第一行,ctr+c 复制,粘贴到 abc.txt
在回到该软件,按 向下键选中第二行,复制、、粘贴。。
。。。。。。。。。。
一共有300多行
于是我想能否用vbs的模拟按键来执行呢?
拼凑了一堆代码,在记事本中测试能行,可在软件中却只是把第一行复制了300次。
继续测试时发现在 任务管理器界面,根本没有按 向下键的动作
我的代码如下,求各位达人帮忙。。。

  1. Dim ws
  2. set ws=createobject("wscript.shell")
  3. WScript.Sleep 10000           '延时10秒

  4. Dim Form, TextBox
  5. Const ForAppending = 8
  6. For i = 1 to 5 step 1
  7.         ws.Sendkeys ("^c")            '模拟按键 crtl+c
  8.         WScript.Sleep 200
  9.         '获取剪贴板内容
  10.         'Dim Form, TextBox
  11.         Set Form = CreateObject("Forms.Form.1")
  12.         Set TextBox = Form.Controls.Add("Forms.TextBox.1").Object
  13.         TextBox.MultiLine = True
  14.         If TextBox.CanPaste Then
  15.                 TextBox.Paste
  16.                 str=TextBox.Text
  17.         End If

  18.         '追加文本文件一行内容,文件不存在的话会自动创建
  19.         'Const ForAppending = 8
  20.         Set var = CreateObject("Scripting.FileSystemObject")
  21.         Set num = var.OpenTextFile ("库存报表.txt", ForAppending, True)
  22.         num.WriteLine(str)
  23.         num.Close

  24.         ws.Sendkeys "{DOWN}"          '模拟下箭头
  25.         WScript.Sleep 200
  26. Next
  27. Wscript.Echo("复制完成")
复制代码
 楼主| 发表于 2014-5-13 11:40:21 | 显示全部楼层
我猜想是不是因为写入文本后焦点到了记事本上,按向下键的时候焦点不在软件上面,有什么办法控制焦点吗?
发表于 2014-5-13 13:23:53 | 显示全部楼层
回复 2# FOR
  1. objShell.Appactivate "窗口标题"
复制代码
试试
 楼主| 发表于 2014-5-13 13:35:10 | 显示全部楼层
回复 3# Batcher


    之前在网上找过这个,试了还是不行
我是加在这个位置
ws.appactivate "windows 任务管理器"     
ws.Sendkeys "{DOWN}"          '模拟下箭头
WScript.Sleep 200
 楼主| 发表于 2014-5-13 19:54:58 | 显示全部楼层
真是奇怪了,下面代码在记事本中测试,能顺利的按10下  向下键,但在任务管理器中就是不动,是咋回事呢?

  1. Dim ws
  2. set ws=createobject("wscript.shell")
  3. WScript.Sleep 5000           '延时10秒

  4. For i = 1 to 10 step 1
  5.         ws.Sendkeys "{DOWN}"          '模拟下箭头
  6.         WScript.Sleep 500
  7. Next
  8. Wscript.Echo("复制完成")
复制代码
 楼主| 发表于 2014-5-13 20:20:59 | 显示全部楼层
更奇怪的事发生了
我测试是双击 a.vbs ,然后用鼠标切换当前窗口任务管理器,结果没任何反应
可我如果用 bat 来启动 a.vbs 则一切正常了
Dim ws
set ws=createobject("wscript.shell")
WScript.Sleep 5000           '延时10秒
ws.Sendkeys "{DOWN}"          '模拟下箭头
ws.Sendkeys "{DOWN}"          '模拟下箭头
ws.Sendkeys "{DOWN}"          '模拟下箭头
ws.Sendkeys "{DOWN}"          '模拟下箭头
ws.Sendkeys "{DOWN}"          '模拟下箭头
ws.Sendkeys "{DOWN}"          '模拟下箭头
ws.Sendkeys "{DOWN}"          '模拟下箭头
发表于 2014-5-13 20:33:55 | 显示全部楼层
话说不能用批吗?
 楼主| 发表于 2014-5-13 20:59:15 | 显示全部楼层
回复 7# CrLf


    用 cmd 吗?
  求代码
发表于 2014-5-13 21:02:33 | 显示全部楼层
回复 8# FOR


    好吧,当我没说,没看到 “不能全选”
 楼主| 发表于 2014-5-14 14:31:41 | 显示全部楼层
用 按键精灵 搞定了,谢谢各位。
发表于 2014-6-14 12:04:40 | 显示全部楼层
VBS的按键功能的确很弱,比按键差远了,不过可以直接调用按键精灵的大漠插件,效果还可以。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 15:17 , Processed in 0.020818 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表