中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 如何调用 Windows 图形界面应用程序及模拟按键(已解决)
« [1] [2] »
作者:
标题: 如何调用 Windows 图形界面应用程序及模拟按键(已解决) 上一主题 | 下一主题
kafen
初级用户





积分 97
发帖 43
注册 2005-7-25
状态 离线
『楼 主』:  如何调用 Windows 图形界面应用程序及模拟按键(已解决)

有个 Windows 图形界面应用程序打开后可以填入一个任意数字,然后点击确定即可,我想写个批处理来调用打开它并能填入指定的数字再自动完成确定,请问如何写这个批处理?多谢啦!

[ Last edited by kafen on 2006-12-19 at 09:54 PM ]

2006-12-17 00:25
查看资料  发短消息 网志   编辑帖子  回复  引用回复
redtek
金牌会员





积分 2902
发帖 1147
注册 2006-9-21
状态 离线
『第 2 楼』:  

如果是命令行工具,兄可以参考如下两个贴子中的示例代码~:)



如何用管道的命令把多个结果输入到后一个程序里
http://www.cn-dos.net/forum/viewthread.php?tid=25707&fpage=2


如何用debug 编出一个回车的命令?
http://www.cn-dos.net/forum/viewthread.php?tid=25691&fpage=2




如果是调用 Windows 图形界面应用程序并发送数字以及模拟按键,则参考:


在CMD下如何用批处理模拟按键 (下面链接的第7楼示例代码)
http://www.cn-dos.net/forum/view ... p;highlight=sendkey


谁能帮忙编个VBS做一件不可能的事 (见贴子第5楼通过剪辑板实现发送信息)
http://www.cn-dos.net/forum/view ... p;highlight=sendkey

[ Last edited by redtek on 2006-12-16 at 11:37 AM ]



    Redtek,一个永远在网上流浪的人……

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
2006-12-17 00:31
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
jmz573515
银牌会员




积分 1212
发帖 464
注册 2006-12-13
状态 离线
『第 3 楼』:  

set ws=wscript.createobject("wscript.shell")
ws.run "calc.exe" '这是你要运行的程序,写上完整路径。
wscript.sleep 2000
ws.sendkeys "12321" '这里是你要填入的数字。
ws.sendkeys "~"

   此帖被 +5 点积分      点击查看详情   
评分人:【 redtek 分数: +5  时间:2006-12-17 02:26


2006-12-17 00:55
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
kafen
初级用户





积分 97
发帖 43
注册 2005-7-25
状态 离线
『第 4 楼』:  



  Quote:
Originally posted by redtek at 2006-12-17 00:31:
如果是命令行工具,兄可以参考如下两个贴子中的示例代码~:)



如何用管道的命令把多个结果输入到后一个程序里
[url]http://www.cn-dos.net/ ...

@echo off
echo set WshShell = CreateObject("WScript.Shell") >>sendkey.vbs
echo WshShell.AppActivate %1 >>sendkey.vbs
echo WshShell.SendKeys "%2"       >>sendkey.vbs
:other
if "%3" == "" start sendkey.vbs & exit
echo WshShell.SendKeys "%3"       >>sendkey.vbs
shift
goto other
参数一:要发送按键的程序的标题,注意用引号括起来。
参数2-9:要发送的按键。可以发送一些功能键,如ALT,ESC,CTRL等等。。。

因是新手,故对于下面的解释有点看不懂,能否具体以实例解说一下,多谢了!

2006-12-17 01:09
查看资料  发短消息 网志   编辑帖子  回复  引用回复
redtek
金牌会员





积分 2902
发帖 1147
注册 2006-9-21
状态 离线
『第 5 楼』:  

3楼jmz573515兄给出的示例代码非常详细易懂~:)
下面就把jmz573515兄给出的代码解释一下:
set ws=wscript.createobject("wscript.shell")
ws.run "calc.exe" '这是你要运行的程序,写上完整路径。

'    上面这句是运行一个要接收你发送键值的应用程序。上面是启动windows计算器。


wscript.sleep 2000

'    上面是延时(就是等待)2秒钟。那个2000是指毫秒-1秒等于1000毫秒。


ws.sendkeys "12321" '这里是你要填入的数字。

'    上面 ws.SendKey 是发送模拟按键的指令,发送12321这串数字到计算器中。
'    同样也可以发送模拟的按键,如回车等……

ws.sendkeys "~"
兄可以将3楼代码存成一个名为  计算器.VBS  的文件,然后鼠标双击执行。

另:兄5楼所提及代码先不要试验,那是用批处理将VBS代码写成VBS脚本。
  所以里面又包含了批处理文件操作技巧,反而又增加了学习难度。

建议只试验3楼代码,先从Windows计算器开始,然后再试着记事本,再试着其它更复杂应用程序的控制。


下面是VBS所能发送的健值代码举例:

(下面键值列表的部分内容取自互联网某网站,原作者不详)

  Quote:
对于SendKeys这个命令可以send什么,我们可以看下面的列表:

BACKSPACE {BACKSPACE}, {BS}, or {BKSP}
BREAK {BREAK}
CAPS LOCK {CAPSLOCK}
DEL or DELETE {DELETE} or {DEL}
DOWN ARROW {DOWN}
END {END}
ENTER {ENTER}or ~
ESC {ESC}
HELP {HELP}
HOME {HOME}
INS or INSERT {INSERT} or {INS}
LEFT ARROW {LEFT}
NUM LOCK {NUMLOCK}
PAGE DOWN {PGDN}
PAGE UP {PGUP}
PRINT SCREEN {PRTSC}
RIGHT ARROW {RIGHT}
SCROLL LOCK {SCROLLLOCK}
TAB {TAB}
UP ARROW {UP}
F1 {F1}
F2 {F2}
F3 {F3}
F4 {F4}
F5 {F5}
F6 {F6}
F7 {F7}
F8 {F8}
F9 {F9}
F10 {F10}
F11 {F11}
F12 {F12}
F13 {F13}
F14 {F14}
F15 {F15}
F16 {F16}

SHIFT +
CTRL ^
ALT %





    Redtek,一个永远在网上流浪的人……

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
2006-12-17 01:24
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
kafen
初级用户





积分 97
发帖 43
注册 2005-7-25
状态 离线
『第 6 楼』:  

多谢楼上两位,试用计算器和记事本成功,接下来再多试试别的,多谢了,我得好好学学啦!

2006-12-17 01:36
查看资料  发短消息 网志   编辑帖子  回复  引用回复
kafen
初级用户





积分 97
发帖 43
注册 2005-7-25
状态 离线
『第 7 楼』:  

可能是涉及到这个应用程序要指定输入框定位问题,还是无法实现,请帮我看看吧。

[ Last edited by kafen on 2006-12-17 at 02:43 AM ]

2006-12-17 02:06
查看资料  发短消息 网志   编辑帖子  回复  引用回复
wydos
中级用户





积分 304
发帖 117
注册 2006-4-4
状态 离线
『第 8 楼』:  

可以用tab键定位指定输入框,按下tab键,看按几下定位到你要的输入框
下面代码是 按tab键按6次
wshshell.sendkeys("{TAB 6}")

   此帖被 +3 点积分     点击查看详情   
评分人:【 redtek 分数: +3  时间:2006-12-17 02:26


2006-12-17 02:23
查看资料  发送邮件  发短消息 网志  OICQ (327337973)  编辑帖子  回复  引用回复
kafen
初级用户





积分 97
发帖 43
注册 2005-7-25
状态 离线
『第 9 楼』:  



  Quote:
Originally posted by wydos at 2006-12-17 02:23:
可以用tab键定位指定输入框,按下tab键,看按几下定位到你要的输入框
下面代码是 按tab键按6次
wshshell.sendkeys("{TAB 6}")

真的好感谢大家,这里高手真多呀!
因为我上面是用ws.sendkeys,所以这里只能用ws.sendkeys("{TAB 6}"),否则会出现错误提示:找不到wshshell对象。谢谢你的指导!


因为大家的耐心指导,我已解决了问题,感谢jmz573515兄和wydos兄,特别是redtek兄的悉心指导!

set ws=wscript.createobject("wscript.shell")
ws.run "tcpPatch.exe" '这是你要运行的程序,写上完整路径。
wscript.sleep 2000 '这里设置延时时间为2秒钟。
ws.sendkeys("{TAB 1}")  '按一下TAB键定位鼠标位置,以此类推!
ws.sendkeys "300" '这里是你要填入的数字。
ws.sendkeys("{TAB 2}")  '再按两下TAB键定位应用按钮。
ws.sendkeys "~"  '按回车确定应用。
ws.sendkeys("{ESC}") '按ESC退出该程序。

[ Last edited by kafen on 2006-12-17 at 02:51 AM ]

2006-12-17 02:32
查看资料  发短消息 网志   编辑帖子  回复  引用回复
redtek
金牌会员





积分 2902
发帖 1147
注册 2006-9-21
状态 离线
『第 10 楼』:  

set ws=wscript.createobject("wscript.shell")

上面的 set ws= 大概含义是:将创建的 "wscript.shell” 对象的 引用 赋给变量 ws

所以,你下面就可以引用这个对象来操作一些东东了:)

ws.run "calc.exe"

如果你将变量设置为 set redtek= …………
那么下面就当然是使用 redtek.run …… 什么了:)


(注: 上面我解释的不完全正确,没学过VBS,大概是这个意思,更详细兄再多查些更准确的解释与资料)



    Redtek,一个永远在网上流浪的人……

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
2006-12-17 02:46
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
kafen
初级用户





积分 97
发帖 43
注册 2005-7-25
状态 离线
『第 11 楼』:  

我晕,为什么以上的方法在做Flash Player 9.0 for IE批处理安装时无法实现?
Flash Player 9.0 for IE下载地址为:http://nj.onlinedown.net/soft/14968.htm

大家帮我看看好吗?谢谢了!


这是这样写的:
set ws=wscript.createobject("wscript.shell")
ws.run "flashIE.exe"
wscript.sleep 1000
ws.sendkeys "~"


存为.vbs文件后运行,安装完无法关闭界面!

[ Last edited by kafen on 2006-12-19 at 09:54 AM ]

2006-12-19 09:51
查看资料  发短消息 网志   编辑帖子  回复  引用回复
electronixtar
铂金会员





积分 7493
发帖 2672
注册 2005-9-2
状态 离线
『第 12 楼』:  

1. 下载我提取的文件
2. 把它复制到 system32\ 文件夹
3. 运行 regsvr32 Flash9b.ocx

代码
copy /y Flash9b.ocx "%windir%\system32\"
regsvr32 Flash9b.ocx


2006-12-19 11:07
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
kafen
初级用户





积分 97
发帖 43
注册 2005-7-25
状态 离线
『第 13 楼』:  



  Quote:
Originally posted by electronixtar at 2006-12-19 11:07:
1. 下载我提取的文件
2. 把它复制到 system32\ 文件夹
3. 运行 regsvr32 Flash9b.ocx
...

谢谢回复,但是我试了,提示错误。我看到别人有个VBS转成的EXE,只是不知他加了什么代码可以安装完退出。我写的那个代码应当跟他差不多,就只是哪里差了一点。
哦,忘记了说一下,我不是在DOS下运行这些的。

[ Last edited by kafen on 2006-12-19 at 11:24 AM ]

2006-12-19 11:21
查看资料  发短消息 网志   编辑帖子  回复  引用回复
redtek
金牌会员





积分 2902
发帖 1147
注册 2006-9-21
状态 离线
『第 14 楼』:  

不知道kafen兄试验时所提示的是什么错误?(这个有可能对解决这问题很关键)

如果安装程序都装完了但它自己不会退出(或是无法正常被.sendkey发送的退出等按键所控置),
如果是这样,干脆把那个安装程序用 TaskList 查出来,再用 TaskKill 杀掉~:)



    Redtek,一个永远在网上流浪的人……

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
2006-12-19 11:42
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lisiyuan
初级用户





积分 21
发帖 28
注册 2006-12-15
状态 离线
『第 15 楼』:  

yun晕  看不懂  以后要努力学习了

2006-12-19 11:59
查看资料  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: