中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-03 20:39
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 批处理如何模拟键盘按键动作? 查看 3,851 回复 15
楼 主 批处理如何模拟键盘按键动作? 发表于 2007-03-12 05:46 ·  中国 福建 福州 电信
初级用户
积分 92
发帖 26
注册 2007-03-10 07:44
19年会员
UID 81291
性别 男
状态 离线
父母都不太会电脑,所以准备写个批处理文件让父母一次性按一下就可以安装一些软件。但是在安装的过程中一般都出现如确定和下一步的许多命令,请问在批处理安装代码中如何让其自动完成确定或下一步的按键指令直到软件安装成功。
2 发表于 2007-03-12 12:48 ·  中国 北京 中国科学院研究生院
银牌会员
★★★
积分 1,187
发帖 555
注册 2006-12-21 07:35
19年会员
UID 74129
性别 男
状态 离线

@echo off
setlocal enabledelayedexpansion
set /p a="请输入你需要的操作(只限于单个字母,如a。不区分大小写):"

:condition
set mm=abcdefghijklmnopqrstuvwxyz
for /l %%. in (0,1,25) do (if /i "!a!" equ "!mm:~%%.,1!" set l=!mm:~%%.,1! & goto !l!-Operation)
goto :eof

:!l!-Operation

echo 你输入的是 !l!。
set/p k=" 将进行!l!(删除)操作。你确定不(y/n)?"
if /i "%k%" equ "y" ( echo 请等待任务完成!
rem 这里加入你要做的操作。
)
......
......
......
......
:!l!-Operation
echo 你输入的是 !l!。
set/p k=" 将进行!l!(Z)操作。你确定不(y/n)?"
if /i "%k%" equ "y" ( echo 请等待任务完成!
rem 这里加入你要做的操作。
)

echo 任务完成,将自动退出操作。
ping -n 6 127.1>nul

3 发表于 2007-03-12 12:54 ·  中国 广西 玉林 博白县 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
20年会员
UID 44210
状态 离线
scriptor好像没看明白LZ的要求,LZ要求是自动点击软件装过程中的按钮
4 发表于 2007-03-12 12:54 ·  中国 北京 中国科学院研究生院
银牌会员
★★★
积分 1,187
发帖 555
注册 2006-12-21 07:35
19年会员
UID 74129
性别 男
状态 离线
好久没有来了
发一个再说!
呵呵!~~~
5 发表于 2007-03-12 12:56 ·  中国 北京 中国科学院研究生院
银牌会员
★★★
积分 1,187
发帖 555
注册 2006-12-21 07:35
19年会员
UID 74129
性别 男
状态 离线
哦?!~~
不好意思啊

呵呵
6 发表于 2007-03-13 03:22 ·  中国 北京 联通
银牌会员
★★★★
[b]看你妹啊[/b]
积分 1,488
发帖 1,357
注册 2006-05-20 12:00
20年会员
UID 55770
状态 离线
倒塌
模拟按键操作....汗
7 发表于 2007-03-13 03:27 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
20年会员
UID 59080
状态 离线

  这个用脚本Auto3应该可以,不过我还不会。
8 发表于 2007-03-13 04:58 ·  中国 广西 玉林 博白县 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
20年会员
UID 44210
状态 离线
关键是如何确定每个软件安装时需要按键的次数、如何处理中间出现的选项等问题
9 发表于 2007-03-13 08:08 ·  中国 湖北 武汉 电信
初级用户
积分 76
发帖 38
注册 2007-03-13 02:54
19年会员
UID 81544
性别 男
状态 离线
呵呵有意思我也想知道哈
10 制作自动安装软件VBS脚本 发表于 2007-03-13 09:41 ·  中国 广东 广州 番禺区 电信
中级用户
★★
脚本爱好者
积分 238
发帖 93
注册 2007-03-11 13:38
19年会员
UID 81417
性别 男
来自 GZ
状态 离线
用VBS脚本很容易就完成,方法是用 SendKeys 命令模拟键盘操作。以下为模拟千千静听4.6.9的安装过程:

Set objShell = CreateObject("Wscript.Shell")
strCommandLine = "ttpsetup.exe" '启动安装程序
objShell.Run(strCommandLine)
set WshShell = CreateObject("WScript.Shell")
WScript.Sleep 3000 '延时3秒
WshShell.SendKeys "s" '模拟按下 S 键开始安装
WScript.Sleep 300 '延时0.3秒
WshShell.SendKeys "a" '模拟按下 A 键同意协议
WScript.Sleep 300
WshShell.SendKeys "{ENTER}" '模拟按下回车键执行下一步
WScript.Sleep 300
WshShell.SendKeys "{ENTER}" '模拟按下回车键执行下一步
WScript.Sleep 300
WshShell.SendKeys "{ENTER}" '模拟按下回车键执行下一步
WScript.Sleep 2000
WshShell.SendKeys "{TAB}" '模拟按下 Tab 键选择安装项目
WScript.Sleep 300
WshShell.SendKeys "{TAB}"
WScript.Sleep 300
WshShell.SendKeys " " '模拟按下空格键去除安装百度超级搜霸一行前的√号
WScript.Sleep 300
WshShell.SendKeys "{ENTER}" '模拟按下回车键完成最后一步

把以上代码复制到记事本中(右边的文字是说明,一起复制也不影响),再另存为 AutoSetup.vbs ,把此文件存放在千千静听安装执行程序(ttpsetup.exe)同一目录下,双击 AutoSetup.vbs 即可自动完成千千静听的安装。成功的关键是,你必须先安装一次千千静听,然后记住每一步的按键是什么,这个文件就可以拿去别的机上执行了。

[ Last edited by axi on 2007-4-8 at 09:50 AM ]
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
rokersong +2 2007-12-19 09:11
11 发表于 2007-03-13 10:21 ·  中国 广东 广州 番禺区 电信
中级用户
★★
脚本爱好者
积分 238
发帖 93
注册 2007-03-11 13:38
19年会员
UID 81417
性别 男
来自 GZ
状态 离线
SendKeys 的参数说明:

使用 SendKeys 方法可以将键击发送到无自动化界面的应用程序中。多数键盘字符都可用一个键击表示。某些键盘字符由多个键击组合而成(例如,CTRL+SHIFT+HOME)。要发送单个键盘字符,请将字符本身作为 string 参数发送。例如,要发送字母 x,则请发送 string 参数 "x"。

可使用 SendKeys 同时发送多个键击。为此,可将每个键击按顺序排列在一起,以此来创建表示一系列键击的复合字符串参数。例如,要发送键击 a、b 和 c,则需要发送字符串参数 "abc" 。SendKeys 方法将某些字符用作字符的修饰符(而不使用其本身的含义)。这组特殊的字符可包括圆括号、中括号、大括号,以及:

加号 "+"
插入记号 "^"
百分号 "%"
和“非”符号 "~"

用大括号 "{}" 括起这些字符可以发送它们。例如,要发送加号,请使用字符串参数 "{+}"。SendKeys中使用的中括号 "" 无任何特殊含义,但是必须把它们括在大括号中,以便容纳确实要赋予其特殊含义的应用程序(例如,对于动态数据交换 (DDE) 就是这样)。

要发送左中括号字符,请发送字符串参数 "{}"。
要发送左大括号字符,请发送字符串参数 "{{}";要发送右大括号字符,请发送字符串参数 "{}}"。

某些键击不生成字符(如 ENTER 和 TAB)。某些键击表示操作(如 BACKSPACE 和 BREAK)。要发送这些类型的键击,请发送下表中列出的参数:

空格键 " "
退格键 {BACKSPACE} 或 {BS} 或 {BKSP}
BREAK {BREAK}
DELETE {DELETE} 或 {DEL}
向下键 {DOWN}
向上键 {UP}
向左键 {LEFT}
向右键 {RIGHT}
END {END}
ENTER {ENTER} 或 ~
ESC {ESC}
TAB {TAB}
CAPS LOCK {CAPSLOCK}
HELP {HELP}
HOME {HOME}
INSERT {INSERT} 或 {INS}
NUM LOCK {NUMLOCK}
PAGE DOWN {PGDN}
PAGE UP {PGUP}
PRINT SCREEN {PRTSC}
SCROLL LOCK {SCROLLLOCK}

F1 {F1}
F2 {F2}
F3 {F3}
F4 {F4}
F5 {F5}
F6 {F6}
F7 {F7}
F8 {F8}
F9 {F9}
F10 {F10}
F11 {F11}
F12 {F12}

要发送由常规键击和 SHIFT、CTRL 或 ALT 组合而成的键盘字符,请创建表示该键击组合的复合字符串参数。可通过在常规键击之前添加一个或多个以下特殊字符来完成上述操作:

SHIFT +
CTRL ^
ALT %

注意:这样使用时,不用大括号括起这些特殊字符。
要指定在按下多个其他键时,按下 SHIFT、CTRL 和 ALT 的组合,请创建复合字符串参数,用括号括起其中的组合键。例如,要发送的组合键指定:

如果在按 e 和 c 的同时按 SHIFT 键,则发送字符串参数 "+(ec)"。
如果在按 e 时只按 c(而不按 SHIFT),则发送字符串参数 "+ec"。
可使用 SendKeys 方法发送一种在一行内重复按键的键击。为此,要创建复合字符串参数,以指定要重复的键击,并在其后指定重复次数。可使用 {键击 数字} 形式的复合字符串参数来完成上述操作。例如,如果要发送 10 次 "x",则需要发送字符串参数 "{x 10}"。请确保在键击和数字之间有一个空格。

注意:只可以发送重复按一个键的键击。例如,可以发送 10 次 "x",但不可发送 10 次 "Ctrl+x"。
注意:不能向应用程序发送 PRINT SCREEN 键 {PRTSC}。


例子1:关机脚本 (模拟按键为:Ctrl + Esc、u、u )

把以下代码复制至记事本,另存为 off.vbs

set WshShell = CreateObject("WScript.Shell")
WshShell.SendKeys "^{ESC}uu"


例子2:重启脚本 (模拟按键为:Ctrl + Esc、u、r )

把以下代码复制至记事本,另存为 reboot.vbs

set WshShell = CreateObject("WScript.Shell")
WshShell.SendKeys "^{ESC}ur"


例子3:切换输入法 (模拟同时按下:Shift Ctrl )

set WshShell = CreateObject("WScript.Shell")
WshShell.SendKeys "+(^)"


例子4:输入 cn-dos.net! 至记事本并保存为 CnDos.txt

Dim WshShell
Set WshShell=WScript.CreateObject("WScript.Shell")
WshShell.Run "notepad"
WScript.Sleep 1500
WshShell.AppActivate "无标题 - 记事本"
WshShell.SendKeys "c"
WScript.Sleep 200
WshShell.SendKeys "n"
WScript.Sleep 200
WshShell.SendKeys "-"
WScript.Sleep 200
WshShell.SendKeys "d"
WScript.Sleep 200
WshShell.SendKeys "o"
WScript.Sleep 200
WshShell.SendKeys "s"
WScript.Sleep 200
WshShell.SendKeys "."
WScript.Sleep 200
WshShell.SendKeys "n"
WScript.Sleep 200
WshShell.SendKeys "e"
WScript.Sleep 200
WshShell.SendKeys "t"
WScript.Sleep 200
WshShell.SendKeys "!"
WScript.Sleep 200
WshShell.SendKeys "%FS"
WScript.Sleep 500
WshShell.SendKeys "C"
WScript.Sleep 200
WshShell.SendKeys "n"
WScript.Sleep 200
WshShell.SendKeys "D"
WScript.Sleep 200
WshShell.SendKeys "o"
WScript.Sleep 200
WshShell.SendKeys "s"
WScript.Sleep 200
WshShell.SendKeys "%S"
WScript.Sleep 500
WshShell.SendKeys "%FX"


例子5:自动定时存盘的记事本(此脚本来自网上)

'第一部分:定义变量和对象
Dim WshShell, AutoSaveTime, TXTFileName
AutoSaveTime=(1000*60*1) '自动存盘时间为1分钟
Set WshShell=WScript.CreateObject("WScript.Shell")
TXTFileName=InputBox("给文本起名(不能用中文和纯数字):")

'第二部分:打开并激活记事本
WshShell.Run "notepad"
WScript.Sleep 200
WshShell.AppActivate "无标题 - 记事本"

'第三部分:用输入的文件名存盘
WshShell.SendKeys "^s"
WScript.Sleep 300
WshShell.SendKeys TXTFileName
WScript.Sleep 300
WshShell.SendKeys "%s"
WScript.Sleep AutoSaveTime

'第四部分:自动定时存盘
While WshShell.AppActivate (TXTFileName)=True
WshShell.SendKeys "^s"
WScript.Sleep AutoSaveTime
Wend
WScript.Quit

[ Last edited by axi on 2007-3-24 at 10:24 AM ]
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
vkill +8 2007-03-14 01:59
12 发表于 2007-03-14 02:01 ·  中国 甘肃 张掖 电信
金牌会员
★★★★
积分 4,103
发帖 1,744
注册 2006-01-20 13:00
20年会员
UID 49241
性别 男
来自 甘肃.临泽
状态 离线
楼上vbs 高人~顶

不过就论这个问题的结果,我觉得还不如自己做绿色文件,不用安装的,要全是绿色文件的话安装就很方便了,最多再用reg 注册就好
13 发表于 2007-03-14 02:06 ·  中国 广东 深圳 宝安区 电信
高级用户
★★★
积分 793
发帖 312
注册 2004-09-02 00:00
21年会员
UID 31104
性别 男
状态 离线
Originally posted by axi at 2007-3-13 09:41 AM:
用VBS脚本很容易就完成,方法是用 SendKeys 命令模拟键盘操作。以下为模拟千千静听4.6.9的安装过程:

Set objShell = CreateObject("Wscript.Shell")
strC ...

真是一名vbs高手。
14 发表于 2007-03-14 02:18 ·  中国 广西 玉林 博白县 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
20年会员
UID 44210
状态 离线
以前经常用SendKeys操作软件^_^
15 发表于 2007-04-10 13:43 ·  中国 广东 广州 白云区 电信
中级用户
★★
积分 259
发帖 112
注册 2006-09-18 04:55
19年会员
UID 62928
性别 男
状态 离线
对VBS开始感兴趣!
论坛跳转: