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

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


代码如下:

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

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

(0)

相关推荐

  • VBS sendkeys 模拟击键操作 问题解决

    复制代码 代码如下: ' ====================================== ' VBS 中 SendKeys 模拟键盘击键 ' 2009-07-26 ' 刘林 ' ====================================== Dim WshShell Set WshShell=WScript.CreateObject("WScript.Shell") WshShell.Run "cmd" ' 让脚本等待1000毫秒,也就是

  • VBS中SendKeys的基本应用

    ps:不知道有人还记得这个攻击qq群的代码?就是利用这个所写的!SendKeys 模拟键盘操作,将一个或多个按键指令发送到指定Windows窗口来控制应用程序运行,  其使用格式为:object.SendKeys string "object":表示WshShell对象  "string":表示要发送的按键指令字符串,需要放在英文双引号中. 1.基本键 一般来说,要发送的按键指令都可以直接用该按键字符本身来表示,例如要发送字母"x",使用&quo

  • SendKeys参考文档

    SendKeys参考文档 一直用foxipgw程序自动登录网关,今天做了一个自动调用foxipgw的程序,就不用每次点"确定"了,代码如下. set s= WScript.CreateObject("WScript.Shell")  app_window = s.run ("D:\Soft\FoxIPGW.EXE")  WScript.Sleep 200  s.AppActivate app_window   s.SendKeys "{

  • vbs sendKeys 16进制的结合使用(打开IE,静音,打开播放器等)

    复制代码 代码如下: Dim WshShell Set WshShell = CreateObject("Wscript.Shell") 下面的每一行都是一个不错的命令,请说出运行下列每个语句的效果.不要一次运行全部,逐个看效果. '打开IE 'WshShell.SendKeys Chr(&H88AC) '系统静音'WshShell.SendKeys Chr(&H88AD) 'WshShell.SendKeys Chr(&H88AE) 'WshShell.Sen

  • vbscript sendkeys实例代码大全

    其使用格式为:object.SendKeys string "object":表示WshShell对象  "string":表示要发送的按键指令字符串,需要放在英文双引号中. 1.基本键 一般来说,要发送的按键指令都可以直接用该按键字符本身来表示,例如要发送字母"x",使用"WshShell.SendKeys "x""即可.当然,也可直接发送多个按键指令,只需要将按键字符按顺序排列在一起即可,例如,要发送按

  • SendKeys clip.exe 发送中文的代码

    复制代码 代码如下: Set WshShell=CreateObject("WScript.Shell") code="让SendKeys可以发送中文" WshShell.Run "cmd.exe /c echo " & code & "| clip.exe", vbHide app=WshShell.Run ("notepad") WScript.Sleep 1000 WshShell.A

  • vbs sendKeys Virtual-Key Codes 十六进制符号

    Constants VK_LBUTTON (0x01) Left mouse button VK_RBUTTON (0x02) Right mouse button VK_CANCEL (0x03) Control-break processing VK_MBUTTON (0x04) Middle mouse button (three-button mouse) VK_XBUTTON1 (0x05) Windows 2000/XP: X1 mouse button VK_XBUTTON2 (0

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

    首先我们看一个输入字母的例子: 复制代码 代码如下: 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方法的朋友就知道,作用是打开一个记事本

  • 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

  • 利用pandas读取中文数据集的方法

    直接利用numpy读取非数字型的数据集时需要先进行转换,而且python3在处理中文数据方面确实比较蛋疼.最近在学习周志华老师的那本西瓜书,需要没事和一堆西瓜反复较劲,之前进行联系的时候都是利用批量替换先清理一遍数据,不过这样实在是太麻烦了,今天偶然发现可以使用pandas来实现读取中文数据集的功能. 首先分享一下数据集: 编号,色泽,根蒂,敲声,纹理,脐部,触感,密度,含糖率,好瓜 1,青绿,蜷缩,浊响,清晰,凹陷,硬滑,0.697,0.46,是 2,乌黑,蜷缩,沉闷,清晰,凹陷,硬滑,0.7

  • 在python中pandas读文件,有中文字符的方法

    后面要加encoding='gbk' import pandas as pd datt=pd.read_csv('D:\python_prj_1\data_1.txt',encoding='gbk') print(datt) 以上这篇在python中pandas读文件,有中文字符的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • Linux内核如何输出中文字符的方法示例

    你在Windows/MacOS的登录Linux的SSH终端上很容易输入中文并且获得中文输出,比如下面这样: 但是却几乎不可能将中文显示在Linux自身的 虚拟终端 上: [root@localhost font]# echo 皮鞋 >/dev/tty2 显示了两个问号,显然Linux内核并不能识别中文. 为什么说是Linux内核不能识别中文呢?这里需要理清一个关系: 你在远程SSH终端上的输入和显示输出的行为,都是SSH终端的宿主机完成的,比如Windows,MacOS,和Linux无关. 你在

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

    JS 控制文本框只能输入数字 复制代码 代码如下: <input onkeyup="value=value.replace(/[^0-9]/g,'')" onpaste="value=value.replace(/[^0-9]/g,'')" oncontextmenu ="value=value.replace(/[^0-9]/g,'')"> JS 控制文本框只能输入数字.小数点 复制代码 代码如下: <input onkeyu

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

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

  • 用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

  • JavaScript控制输入框中只能输入中文、数字和英文的方法【基于正则实现】

    本文实例讲述了JavaScript控制输入框中只能输入中文.数字和英文的方法.分享给大家供大家参考,具体如下: 1.问题背景: 遇到这样一个问题:有一个输入框,要求只能输入中文.数字和英文(即过滤特殊字符串) 2.JS代码: function checkUsername() { //正则表达式 var reg = new RegExp("^[A-Za-z0-9\u4e00-\u9fa5]+$"); //获取输入框中的值 var username = document.getElemen

  • js限制文本框只能输入中文的方法

    本文实例讲述了js限制文本框只能输入中文的方法.分享给大家供大家参考.具体如下: 让文本框只能输入中文的方法及代码,如果你不小心输入了英文,它会自动倒回去,清空你的输入,直至你输入了中文它可会继续,很有意思,也很实用,当注册一些资料的时候可以来提升输入的准确度. 运行效果如下图所示: 具体代码如下: <html> <head> <title>让一个文本框只能输入汉字的方法</title> <meta http-equiv="Content-T

随机推荐