VBS利用SendKeys输入中文字符的方法_vbs

  首先我们看一个输入字母的例子:

复制代码 代码如下:

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.rar   下载后解压缩,把得到的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 

以上代码经本人测试完美有效,结贴~~~

时间: 2024-09-20 08:05:35

VBS利用SendKeys输入中文字符的方法_vbs的相关文章

用vbs实现的输入助手附使用方法_vbs

//把要ECHO的脚本,拖到此脚本上...根据提示操作即可  复制代码 代码如下: On Error Resume Next  Set Arg=Wscript.arguments  If Arg.count=0 then Wscript.quit  '-------  'Enjoy it  'Code By NetPatch  '-------  fname=InputBox("请输入要ECHO的路径):","输入文件名","%systemroot%/sy

Lua判断字符串中包含中文字符的方法和计算字符串宽度函数分享_Lua

一.判断字符串中包含中文字符的方法 遍历数组,对每个字节使用string.byte(),发现有大于127的,就是汉字,可以参照下面的代码. 二.计算字符串宽度函数 复制代码 代码如下: -- 计算字符串宽度   local str = "Jimmy: 你好,世界!" local fontSize = 20 local lenInByte = #str local width = 0   for i=1,lenInByte do     local curByte = string.by

js控制文本框输入的字符类型方法汇总

这篇文章主要给大家汇总介绍了js控制文本框输入的字符类型的各种方法,十分的简单实用,有需要的小伙伴可以参考下.     JS 控制文本框只能输入数字    代码如下: <input onkeyup="value=value.replace(/[^0-9]/g,'')" onpaste="value=value.replace(/[^0-9]/g,'')" oncontextmenu ="value=value.replace(/[^0-9]/g,''

php字符串与中文字符拆分方法

果直接用php教程函数"str_split"来分割,会出现乱码,因为中文字符长度和英文字符长度是不一样的.但是我们可以建立新的函数先把字符转成ascii值,接着通过判断不同字符的长度来正确分割中文字符串,把结果存入数组,最后再用php函数"join"在字符间插入百分号 <?php function str_split_utf8($str){  $split=1;  $array=array();  for($i=0;$i<strlen($str)){  

浅析pinyin4j源码 简单利用pinyin4j对中文字符进行自然排序(转)

pinyin4j项目  官网地址 http://pinyin4j.sourceforge.net/   我们先把资源下载下来,连同源码和jar包一起放入工程.如下图:   接下来在demo包下,我们写一个测试类,简单使用pinyin4j对中文字符进行自然排序 新建一个ConvertTest.java package demo; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator

iphone5s无法输入中文图文解决方法

还原键盘字典 方法一:进入"设置"--"通用"选项,在通用设置列表中找到位于最底部的"还原"选项,进入后点击"还原键盘字典",还原后再尝试输入中文: 方法二:在系统中加个日文键盘.当打不出中文时,就切换到日语键盘打几个日语,然后再切换到中文就可以打了: 方法三:重启

关于MathType6.9不能输入中文的解决方法

  1.下载替换文件,并保存到桌面 2.找到MathType6.9的安装路径.如果不清楚安装路径,可点击"开始",选择MathType,右击"属性",点击"打开文件位置",即可找到MathType6.9简体中文版的安装路径. 3.重命名替换文件.将下载的替换文件复制到MathType安装目录下,将文件名MathType.exe.rep的.rep后缀去掉,修改文件名为MathType.exe. 4.双击MathType.exe即可打开数学公式编辑器

新手问题关于中文字符比较方法(输入数字日期,转换为中文大写日期)

问题描述 输入数字日期,转换为中文大写日期例输入2014年1月1日转换为贰零壹肆年壹月壹日为什么我的代码在比较中文字没有效果?如何比对中文字?usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespaceConsoleApplication1{classClass2{publicstaticvoidMain(string[]args){char[]index={'零','壹','贰',

Java 完美判断中文字符的方法_java

Java判断一个字符串是否有中文一般情况是利用Unicode编码(CJK统一汉字的编码区间:0x4e00–0x9fbb)的正则来做判断,但是其实这个区间来判断中文不是非常精确,因为有些中文的标点符号比如:,.等等是不能识别的. 以下是比较完善的判断方法:CharUtil.java 复制代码 代码如下: import java.util.regex.Pattern; public class CharUtil {     public static void main(String[] args)