VBS利用SendKeys输入中文字符的方法
程序员文章站
2022-07-04 17:30:50
首先我们看一个输入字母的例子: 复制代码 代码如下:set s = wscript.createobject("wscript.shell") ap...
首先我们看一个输入字母的例子:
set s = wscript.createobject("wscript.shell")
app=s.run ("c:\windows\notepad.exe")
code="biweilun"
wscript.sleep 1000
s.appactivate app
s.sendkeys code
wscript.quit
这段vbs会sendkeys方法的朋友就知道,作用是打开一个记事本,然后把"biweilun"这串字符输入进去,当然,你可以把code参数换成chr(97),那么你会发现自动输入到记事本里面的是一个"a"字符。那么,你把code参数的值换成一个chr(一个汉字的ascii码)行不行呢?可以肯定的告诉你,不行。
我们通过调用一个ie的对象,这样可以使用其内置的剪贴板元素,将"毕伟伦"这个字符串放进了剪贴板,然后通过wsh对象来sendkey "^v"粘贴剪贴板内容,这样就能实现vbs自动输入中文字符了。
但是呢,这个方法有个缺憾,就是它会打开一个ie的窗口,不够完美,虽然不影响输入字符。所以我在探索一种完美的方案,得知一个对象“htmlfile”,很可惜的是该对象只能读取剪贴板,却不能写剪贴板。我们来看一段代码,怎么弹出你的剪贴板内容,你要先复制一段字符:
set biweilun=createobject("htmlfile").parentwindow.clipboarddata
wscript.echo biweilun.getdata("text")
运行这个代码,你会发现你剪贴板的东西弹出来了。在ie对象里,有setdata函数来写剪贴板,getdata函数来读剪贴板,在htmlfile对象里呢,也有这两个函数的。你会想到是不是可以用htmlfile对象的setdata先来向剪贴板中写入中文字符,然后再sendkeys呢?这样岂不是很完美,既解决了中文输入问题,又没有网页弹出。呵呵,想法是好的,我也这么想过,可是不行!!
htmlfile对象在使用中只能getdata来获取剪贴板,对于setdata函数系统却不给它写的权限!呵呵,郁闷吧?但是htmlfile对象中的setdata函数确实是存在的,只是无法使用而已。不信的话读者可以自己尝试如下代码,脚本不会报错的,如果没有这个函数的话,wscript会报错的:
set biweilun=createobject("htmlfile").parentwindow.clipboarddata
biweilun.setdata "text","毕伟伦"
wscript.echo biweilun.getdata("text")
在vbs牛人umu的空间上看到,据他讲有这么一条dos命令,可以来写字符串到剪贴板中:
echo biweilun| clip.exe 就是用dos命令把biweilun这串字符写入剪贴板了。经本人测试,该命令不成立,umu的思路是这样来默默地后台写剪贴板:
objwsh.run "cmd.exe /c echo " & szbuf & "| clip.exe", vbhide
如果这个dos命令能真的实现就好了,那么sendkeys中文字符就太完美了。我到网上翻了很久,没有找到任何关于他所谓的clip.exe的资料和参数等等东东。
vbs利用sendkeys输入中文字符,还是有那么一点遗憾~~~
7月28日补充内容如下:
经过umu大哥的提点,原来上文提到的clip.exe只在win2003下才有,winxp是没有的,那怪我不能实现后台windows写剪贴板的dos命令
现将win2003中的clip.exe上传上来,请大家首先下载 下载后解压缩,把得到的clip.exe复制到 %systemroot%\system32文件夹下面即可。现在vbs用sendkeys输入中文字符的问题得以完美解决了,前提是有clip.exe的支撑。
代码如下:
set wshobj=wscript.createobject("wscript.shell")
code="你想输入的中文"
wshobj.run "cmd.exe /c echo " & code & "| clip.exe", vbhide
app=wshobj.run ("c:\windows\notepad2.exe")
wscript.sleep 1000
wshobj.appactivate app
wshobj.sendkeys "^v"
wscript.quit
以上代码经本人测试完美有效,结贴~~~
复制代码 代码如下:
set s = wscript.createobject("wscript.shell")
app=s.run ("c:\windows\notepad.exe")
code="biweilun"
wscript.sleep 1000
s.appactivate app
s.sendkeys code
wscript.quit
这段vbs会sendkeys方法的朋友就知道,作用是打开一个记事本,然后把"biweilun"这串字符输入进去,当然,你可以把code参数换成chr(97),那么你会发现自动输入到记事本里面的是一个"a"字符。那么,你把code参数的值换成一个chr(一个汉字的ascii码)行不行呢?可以肯定的告诉你,不行。
我们通过调用一个ie的对象,这样可以使用其内置的剪贴板元素,将"毕伟伦"这个字符串放进了剪贴板,然后通过wsh对象来sendkey "^v"粘贴剪贴板内容,这样就能实现vbs自动输入中文字符了。
但是呢,这个方法有个缺憾,就是它会打开一个ie的窗口,不够完美,虽然不影响输入字符。所以我在探索一种完美的方案,得知一个对象“htmlfile”,很可惜的是该对象只能读取剪贴板,却不能写剪贴板。我们来看一段代码,怎么弹出你的剪贴板内容,你要先复制一段字符:
set biweilun=createobject("htmlfile").parentwindow.clipboarddata
wscript.echo biweilun.getdata("text")
运行这个代码,你会发现你剪贴板的东西弹出来了。在ie对象里,有setdata函数来写剪贴板,getdata函数来读剪贴板,在htmlfile对象里呢,也有这两个函数的。你会想到是不是可以用htmlfile对象的setdata先来向剪贴板中写入中文字符,然后再sendkeys呢?这样岂不是很完美,既解决了中文输入问题,又没有网页弹出。呵呵,想法是好的,我也这么想过,可是不行!!
htmlfile对象在使用中只能getdata来获取剪贴板,对于setdata函数系统却不给它写的权限!呵呵,郁闷吧?但是htmlfile对象中的setdata函数确实是存在的,只是无法使用而已。不信的话读者可以自己尝试如下代码,脚本不会报错的,如果没有这个函数的话,wscript会报错的:
复制代码 代码如下:
set biweilun=createobject("htmlfile").parentwindow.clipboarddata
biweilun.setdata "text","毕伟伦"
wscript.echo biweilun.getdata("text")
在vbs牛人umu的空间上看到,据他讲有这么一条dos命令,可以来写字符串到剪贴板中:
echo biweilun| clip.exe 就是用dos命令把biweilun这串字符写入剪贴板了。经本人测试,该命令不成立,umu的思路是这样来默默地后台写剪贴板:
objwsh.run "cmd.exe /c echo " & szbuf & "| clip.exe", vbhide
如果这个dos命令能真的实现就好了,那么sendkeys中文字符就太完美了。我到网上翻了很久,没有找到任何关于他所谓的clip.exe的资料和参数等等东东。
vbs利用sendkeys输入中文字符,还是有那么一点遗憾~~~
7月28日补充内容如下:
经过umu大哥的提点,原来上文提到的clip.exe只在win2003下才有,winxp是没有的,那怪我不能实现后台windows写剪贴板的dos命令
现将win2003中的clip.exe上传上来,请大家首先下载 下载后解压缩,把得到的clip.exe复制到 %systemroot%\system32文件夹下面即可。现在vbs用sendkeys输入中文字符的问题得以完美解决了,前提是有clip.exe的支撑。
代码如下:
复制代码 代码如下:
set wshobj=wscript.createobject("wscript.shell")
code="你想输入的中文"
wshobj.run "cmd.exe /c echo " & code & "| clip.exe", vbhide
app=wshobj.run ("c:\windows\notepad2.exe")
wscript.sleep 1000
wshobj.appactivate app
wshobj.sendkeys "^v"
wscript.quit
以上代码经本人测试完美有效,结贴~~~