vbs经典回顾之[键盘输入方法]wshShell.SendKeys

本文介绍VBS脚本中的SendKeys方法,详细解释了如何模拟键盘操作,并提供了多个实际应用场景示例,如自动刷新桌面、启动任务管理器等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[键盘输入方法]wshShell.SendKeys 方法探析(2010-09-30 14:35:11)
 
模拟键盘操作,将一个或多个按键指令发送到指定Windows窗口来控制应用程序运行, 
其使用格式为:object.SendKeys(string) 

“object”:表示WshShell对象 
“string”:表示要发送的按键指令字符串,需要放在英文双引号中。

Dim wshShell
Set wshShell = CreateObject("Wscript.Shell")
wshShell.SendKeys "{ENTER}"     '模拟键盘操作回车

-----------------------------------
1.基本键 

  一般来说,要发送的按键指令都可以直接用该按键字符本身来表示,例如要发送字母“x”,使用“WshShell.SendKeys "x"”即可。当然,也可直接发送多个按键指令,只需要将按键字符按顺序排列在一起即可,例如,要发送按键“happy”,可以使用“ WshShell.SendKeys "happy" ”。

2.特殊功能键 

  对于需要与Shift、Ctrl、Alt三个控制键组合的按键,SendKeys使用特殊字符来表示: 

  Shift---------WshShell.SendKeys "+" 
  Ctrl---------WshShell.SendKeys "^" 
  Alt---------WshShell.SendKeys "%"  (注意:这样使用时,不用大括号括起这些特殊字符。)
  由于“+”、“^”这些字符用来表示特殊的控制按键了,如何表示这些”字符”的按键呢?只要用大括号括住这些字符即可。例如: 要发送加号“+”,可使用“WshShell.SendKeys "{+}"” 

另外对于一些不会生成字符的控制功能按键,也同样需要使用大括号括起来按键的名称。--如果发送是基本字符用“”括起来。
例如要发送回车键,需要用“ WshShell.SendKeys "{ENTER}" ”表示;
发送向下的方向键用“ Wshshell.SendKeys "{DOWN}" ”表示。 

Space---------WshShell.SendKeys 
Enter---------WshShell.SendKeys "{ENTER}" 
←---------WshShell.SendKeys "{RIGHT}" 
↑---------WshShell.SendKeys "{UP}" 
F1---------WshShell.SendKeys "{F1}" 

按键                代码    
BACKSPACE     {BACKSPACE}, {BS}, 或 {BKSP}    
BREAK         {BREAK}    
CAPS LOCK     {CAPSLOCK}    
DEL or Delete {Delete} 或 {DEL}    
DOWN ARROW    {DOWN}    
END           {END}    
ENTER         {ENTER}或    
ESC           {ESC}    
HELP          {HELP}    
HOME          {HOME}    
INS or Insert {Insert} 或 {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}

Tips:如果需要发送多个重复的单字母按键,不必重复输入该字母,SendKeys允许使用简化格式进行描述,使用格式为“{按键 数字}”。例如要发送10个字母“x”,则输入“WshShell.SendKeys "{x 10}"”即可。

实际应用举例:
-----------------------------------
按下F5刷新桌面 

Dim WshShell,Path,i 
Set WshShell Wscrīpt.CreateObject("Wscrīpt.Shell") 
WshShell.SendKeys "{F5}" 
---------------------------------------------------- 
电脑的自动重启 

set WshShell CreateObject("Wscrīpt.Shell") 
WshShell.SendKeys "^{ESC}u" 
WshShell.SendKeys "R" 
---------------------------------------------------- 
启动任务管理器 

set WshShell CreateObject("Wscrīpt.Shell") 
WshShell.SendKeys "^+{ESC}" 
---------------------------------------------------- 
QQ消息连发 

Dim WshShell 
Set WshShell= Wscrīpt.createObject("Wscrīpt.Shell") 
WshShell.AppActivate "bomb" 
for i=1 to 60 
Wscrīpt.Sleep 800 
WshShell.SendKeys "What do you say" 
WshShell.SendKeys 
WshShell.SendKeys "%s" 
next 
---------------------------------------------------- 
自动到百度搜索歌曲:white flag 

Dim WshShell,Path,i 
Set WshShell Wscrīpt.CreateObject("Wscrīpt.Shell") 
WshShell.Run("IEXPLORE.EXE") 
Wscrīpt.Sleep 2000 
WshShell.AppActivate "about:blank-Microsoft Internet Explorer" 
WshShell.SendKeys "+{TAB}" 
WshShell.SendKeys "http://mp3.baidu.com
Wscrīpt.Sleep 800 
WshShell.SendKeys "{ENTER}" 
Wscrīpt.Sleep 3000 
WshShell.SendKeys "white flag" 
Wscrīpt.Sleep 800 
WshShell.SendKeys "{ENTER}" 
---------------------------------------------------- 
自动关机

Dim WshShell
Set WshShell=Wscrīpt.CreateObject("Wscrīpt.Shell")
Wscrīpt.Sleep 2000
WshShell.Run "shutdown -r -t 120"
wscrīpt.sleep 6000
WshShell.Run "shutdown -a"
---------------------------------------------------- 
在记事本中输入Happy Birthday!并保存为birth.txt 

Dim WshShell 
Set WshShell=Wscrīpt.CreateObject("Wscrīpt.Shell") 
WshShell.Run "notepad" 
Wscrīpt.Sleep 1500 
WshShell.AppActivate "无标题 记事本" 
WshShell.SendKeys "H" 
Wscrīpt.Sleep 500 
WshShell.SendKeys "a" 
Wscrīpt.Sleep 500 
WshShell.SendKeys "p" 
Wscrīpt.Sleep 500 
WshShell.SendKeys "p" 
Wscrīpt.Sleep 500 
WshShell.SendKeys "y" 
Wscrīpt.Sleep 500 
WshShell.SendKeys 
Wscrīpt.Sleep 500 
WshShell.SendKeys "B" 
Wscrīpt.Sleep 500 
WshShell.SendKeys "i" 
Wscrīpt.Sleep 500 
WshShell.SendKeys "r" 
Wscrīpt.Sleep 500 
WshShell.SendKeys "t" 
Wscrīpt.Sleep 500 
WshShell.SendKeys "h" 
Wscrīpt.Sleep 500 
WshShell.SendKeys "d" 
Wscrīpt.Sleep 500 
WshShell.SendKeys "a" 
Wscrīpt.Sleep 500 
WshShell.SendKeys "y" 
Wscrīpt.Sleep 500 
WshShell.SendKeys "!" 
Wscrīpt.Sleep 500 
WshShell.SendKeys "%FS" 
Wscrīpt.Sleep 500 
WshShell.SendKeys "b" 
Wscrīpt.Sleep 500 
WshShell.SendKeys "i" 
Wscrīpt.Sleep 500 
WshShell.SendKeys "r" 
Wscrīpt.Sleep 500 
WshShell.SendKeys "t" 
Wscrīpt.Sleep 500 
WshShell.SendKeys "h" 
Wscrīpt.Sleep 500 
WshShell.SendKeys "%S" 
Wscrīpt.Sleep 500 
WshShell.SendKeys "%FX" 
---------------------------------------------------- 
制作能自动定时存盘的记事本 

'第一部分:定义变量和对象 

Dim WshShell, AutoSaveTime, TXTFileName 
AutoSaveTime=300000 
Set WshShell=Wscrīpt.CreateObject("Wscrīpt.Shell") 
TXTFileName=InputBox("请输入你要创建的文件名(不能用中文和纯数字):") 

'第二部分:打开并激活记事本 

WshShell.Run "notepad" 
Wscrīpt.Sleep 200 
WshShell.AppActivate "无标题 记事本" 

'第三部分:用输入的文件名存盘 

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

---------------------------------------------------- 

自动死机o(∩_∩)o...

DIM WSHSHELL 
SET WSHSHELL=Wscrīpt.CreateOBJECT("Wscrīpt.SHELL") 
'WSHSHELL.RUN 
'Wscrīpt.SLEEP 1000 
WSHSHELL.SENDKEYS "{ENTER}" 
'Wscrīpt.SLEEP 1000 
WSHSHELL.SENDKEYS "{ENTER}" 
'Wscrīpt.SLEEP 1000 
WSHSHELL.SENDKEYS "{ENTER}" 
'Wscrīpt.SLEEP 1000 
WSHSHELL.SENDKEYS "{ENTER}" 
'Wscrīpt.SLEEP 1000 
WSHSHELL.SENDKEYS "{ENTER}" 


转自:http://www.cnblogs.com/xhyang110/archive/2011/03/25/1995327.html


<think>好的,我现在需要帮助用户用VBS代码实现打开特定路径的Doubao.exe,并检查是否有实例在运行,如果有的话就最小化它。首先,我得回顾用户之前的问题和我的回答,确保这次回答的一致性和准确性。 用户之前已经得到了Python和Batch的解决方案,现在需要VBS版本。VBS的语法和功能与Python不同,我需要回忆VBS如何处理进程检查和窗口操作。用户提到的引用内容里有关于豆包插件的使用指南,可能对代码实现没有直接影响,但需要确保代码兼容性。 首先,打开指定路径的exe文件,这在VBS中可以用WScript.Shell对象的Run方法。检查进程是否存在可能需要使用WMI查询,也就是Win32_Process类。然后,如何最小化已存在的窗口呢?可能需要使用AppActivate来激活窗口,然后发送快捷键,比如ALT+空格加N,这通常是窗口最小化的快捷键组合。 不过,用户之前的问题中,Python方案用了win32gui来最小化窗口,但VBS可能没有直接访问窗口句柄的方法。所以需要用模拟按键的方式。这可能存在窗口焦点的问题,如果当前有其他窗口在前台,可能会干扰。不过这是VBS的常见做法,虽然不够稳定,但可能是唯一的方法。 接下来,编写代码结构。首先检查进程是否存在,如果存在,就最小化;否则启动程序。进程检查部分,用GetObject("winmgmts:")获取WMI对象,然后执行ExecQuery查询Name为Doubao.exe的进程。如果计数大于0,说明存在实例。 然后,最小化部分,用WshShell.AppActivate获取窗口焦点,然后发送ALT+空格和N键。需要注意,AppActivate的参数可以是窗口标题或者进程ID,但VBS中可能只能通过标题匹配,而标题可能不固定,所以可能需要用户知道窗口标题的一部分,比如“豆包”或者“Doubao”。这里用户给的路径是Doubao.exe,可能窗口标题包含“Doubao”,所以在代码中使用通配符*Doubao*来匹配。 测试时可能会遇到窗口标题不正确的情况,需要用户根据实际情况调整。此外,启动新实例时,可能需要指定窗口状态为最小化,但Run方法的第三个参数是窗口样式,1是正常,3是最大化,7是最小化?需要确认参数是否正确。或者,启动时直接最小化,可以设置第三个参数为7,但可能有些程序不支持,所以可能需要保持正常启动,或者根据情况调整。 另外,用户引用的内容中提到豆包有新的AI功能,但可能对代码本身没有影响,但需要确保代码不会干扰这些功能,比如正确的最小化操作不会导致插件异常。 最后,代码中的注意事项,比如杀毒软件可能拦截模拟按键操作,需要用户允许。或者,进程名是否正确,路径是否有空格需要引号包裹等。用户提供的路径是D:\应用\豆包\Doubao\Doubao.exe,中间有空格吗?“应用”和“豆包”是中文目录,VBS处理应该没问题,但最好用双引号包裹路径,避免空格问题。但在这个例子里,路径中没有空格,所以可能不需要。 综上,整理出VBS代码,先检查进程,存在则最小化,不存在则启动。最小化用模拟按键,可能不够可靠,但VBS的限制下可行。提醒用户注意窗口标题和可能的杀毒软件拦截。</think>根据您的要求,这里提供一个包含进程检查和窗口最小化功能的VBS脚本解决方案: ```vbscript Set objWMIService = GetObject("winmgmts:\\.\root\cimv2") Set colProcesses = objWMIService.ExecQuery("SELECT * FROM Win32_Process WHERE Name='Doubao.exe'") If colProcesses.Count > 0 Then Set WshShell = WScript.CreateObject("WScript.Shell") ' 通过窗口标题匹配最小化 WshShell.AppActivate("*Doubao*") WshShell.SendKeys "% { }n" ' ALT+空格后按N键 Else Set objShell = CreateObject("WScript.Shell") objShell.Run """D:\应用\豆包\Doubao\Doubao.exe""", 1, False End If ``` ### 代码解析 1. **进程检查**:通过WMI查询`Win32_Process`表,统计`Doubao.exe`的进程数量[^1] 2. **窗口最小化**: - `AppActivate`通过通配符匹配包含"Doubao"的窗口标题 - `SendKeys`模拟键盘输入`ALT+空格`打开系统菜单后发送`N`键触发最小化 3. **路径处理**:使用三重双引号确保含空格路径的正确解析[^2] ### 注意事项 1. 窗口标题需要包含"Doubao"关键字(可根据实际窗口标题修改通配符) 2. 需允许脚本访问WMI服务(默认已开启) 3. 部分安全软件可能拦截`SendKeys`操作[^3]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值