用键盘模拟操作来实现另类关机方法-阿里云开发者社区

开发者社区> 开发与运维> 正文

用键盘模拟操作来实现另类关机方法

简介:

大家一定都知道批处理里面的shutdown,没错,是关机重启命令,快速关机可以用


  1. shutdown -s -t 0 -f 

当然重启可以这样写


  1. shutdown -r -t 0 -f 

两行代码中的-f,为强制关机。除了shutdown有没有想过其它的关机方法呢?不要和我说直接点开始关机,那样我们就不用在这里写博文了,halt?不对,那个是linux里面的关机命令,哈哈,不卖关子了,我们可以用批处理模拟一个关机操作,就是将我们平时的关机操作给记录下来,是不是觉得有点像键盘记录精灵,呵呵,差不多吧,来看看,代码很简单


  1. @echo off  
  2. mshta vbscript:createobject("wscript.shell").sendkeys("^{ESC}uu")(window.close) 

以上两行代码完成的就是我们平时的关机操作-开始->关机,如果你想测试一下代码是否可行,一定要把代码中的第二个u去掉,否则就真关机了。

说说原理吧,讲讲模拟键盘操作,这个主要是在vbscript中的,不过像上面那种情况也可以用于批处理,模拟键盘当然是要给键盘发送模拟指令,用到了sendkeys,这又是什么呢?听我慢慢道来。

1、SendKeys是什么?

一个能够模拟键盘命令的VBS中WScript.Shell对象的方法。

2、那怎么用?

要在一个VBS文件里面运行,当然批处理可以创建这个文件。
首先,创建WScript.Shell对象。然后就可以使用这个对象的SendKeys方法了。
格式是这样的: WScript.Shell对象名.SendKeys "[指令]"
例如:
WSH.SendKeys "^{ESC}uu"
这个命令是模拟键盘,开始菜单——关闭计算机——关闭,简单说就是模拟键盘关机!

3、有哪些指令?

基本上键盘有的键都可以用指令去模拟,除了Windows键和菜单键。
其中特殊指令符号有大中小括号键、百分比号键、加号键、阶乘键(插入记号)和波浪形键(“非”符号),即{}[]

()%+^~
除了中括号没有特殊的含义外,其他的均有特殊的作用。

四个常用符号:  + Shift键    % Alt键    ^ Ctrl键    ~ 回车键

{} 大括号是用得最广的符号,用于界定一切数字与字母外的键。 
例如:
ESC键 {ESC} 向上键 {UP} 退格键 {BACKSPACE} PageDown键{PGDN} F4键 {F4}
大括号键 {{} 加号键 {+} 百分号键 {%}

() 小括号,用于组合键事件。只有用在四个常用符号的后面才起作用。这个在下面谈。

4、有哪些特殊用法?

组合键和连按键。

组合键指令的第一个指令是那四个常用符号,后面可跟一个或多个非特殊符号指令。
例如:
^F Ctrl+F组合键    %{TAB} Alt+Esc组合键
+(sd) Shift+S+D组合键 ::注意,在使用多指令组合键时,要把特殊符号后的指令用小括号括起来。

连按键指令,顾名思义是同一个键按N次。格式为:{普通指令 数字}
例如:
{K 5} 连续按K键5次
::注意,连按键只能用于普通指令,不能用于那四个特殊指令符号。

5、有哪些技巧或注意的地方?

要注意:
一、指定发送指令的对象   二、处理延迟的现象
因此要用好WScript.Shell的AppActivate方法和脚本宿主的Sleep方法。

若指定发送的对象是新建的记事本,就要 WSH.AppActivate "无标题 - 记事本"
这样就不会把复制黏贴的指令传到QQ去了,如果内容不雅,还会被揍!
::注意,WSH.AppActivate 后面是一个窗口标题的字符串。

延迟现象的出现原因是计算机读取信息或输出信息时都需要一定的时间。
所以要按部就班,给计算机一段等待的时间,再执行下面的模拟指令。

例如:
Set WSH=CreateObject("WScript.Shell")
WSH.Run "Notepad.exe" '打开记事本
WSH.AppActivate "无标题 - 记事本" '激活记事本,赋予焦点
WScript.Sleep 1000 '休息1秒钟
WSH.SendKeys "^V" '复制剪贴板内容到记事本

上面这个基本就囊括了每个要点了。

看完后是不是明白了,杀毒软件序列号更换工具自动工作的原理了,呵呵,再来看一个例子

这个例子更改了记事本的默认字体,默认字体为楷体_GB2312 粗体 14

 


  1. @echo off  
  2. echo sub r(n)>fun.vbs  
  3. echo wscript.sleep n>>fun.vbs  
  4. echo end sub>>fun.vbs  
  5. echo sub k(a)>>fun.vbs  
  6. echo w.sendkeys a>>fun.vbs  
  7. echo end sub>>fun.vbs  
  8. echo s="VeryBat! The best!">>fun.vbs  
  9. echo set w=createobject("wscript.shell")>>fun.vbs  
  10. echo w.run "notepad.exe">>fun.vbs  
  11. echo r 1000>>fun.vbs  
  12. echo w.appactivate "无标题 - 记事本">>fun.vbs  
  13. echo for i = 1 to len(s)>>fun.vbs  
  14. echo k mid(s,i,1)>>fun.vbs  
  15. echo r 250>>fun.vbs  
  16. echo next>>fun.vbs  
  17. echo k "^a":r 250:k "%%of">>fun.vbs  
  18. echo r 250:k "%%s100~">>fun.vbs  
  19. echo createobject("sapi.spvoice").speak "fay troung peey troo lee luen tongue, war mern de jiao   
  20.  
  21. ao!">>fun.vbs  
  22. fun.vbs  
  23. del fun.vbs 

 本文转自sucre03 51CTO博客,原文链接:http://blog.51cto.com/sucre/417617,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章