标题: [问题求助] 【已解决】vbs模拟中文打字 [打印本页]
作者: kofbld 时间: 2015-4-22 10:19 标题: 【已解决】vbs模拟中文打字
本帖最后由 kofbld 于 2015-4-22 15:19 编辑
vbs如何实现以下功能:
1、打开记事本,发送ctrl+空格按键切换到中文输入法。
2、模拟按键随机输入n个英文字符后按空格键。
作者: kofbld 时间: 2015-4-22 10:31
贴上网上百度来的代码,请高手修改,实现随机输入n个字符
dim sh,str,a,i
set sh=createobject("wscript.shell")
sh.run "notepad" '打开记事本
do while sh.appactivate("无标题 - 记事本")=false
wscript.sleep 200
loop
str="nihao!" '这一行是演示中文输入。定义要打字的字符串。只能是英文或数字或符号。
'如果想输入中文请把下2行的注释去掉。否则就在前面加上注释符号“'”(不带引号)
'并在str中输入按键的过程如:想输入“气死我了”就写 qisiwole1
sh.sendkeys "^ "
'解释上一行:呼唤中文输入法
for i=0 to len(str)-1
a=mid(str,i+1,1)
sh.sendkeys a '发送虚拟按键
wscript.sleep 100 '打字速度。数值越小越快。
next
save=0 '如想保存则写1
if save=1 then
'sh.sendkeys "^ "
'解释上一行:关闭中文输入法。如果是中文,则必须去掉上一行的注释。
sh.sendkeys "^s"
wscript.sleep 100
sh.sendkeys "c:\name.txt" '文件名(可写路径),必须是英文。如果是中文模式,则必须将其关闭
wscript.sleep 100
sh.sendkeys "{Enter}"
end if
作者: boyangcoco 时间: 2015-4-22 12:56
试试以下代码,看能不能满足你的要求.- Set wshobj=WScript.CreateObject("WScript.Shell")
- code="在Excel中使用查找对话框可以查找工作表中特定内容的单元格,而在VBA中则使用Find方法,如下面的代码所示。"
- wshobj.Run "cmd.exe /c echo " & code & "| clip.exe", vbHide
- app=wshobj.Run ("C:\windows\notepad.exe")
- WScript.Sleep 1000
- wshobj.AppActivate app
- wshobj.SendKeys "^v"
- WshShell.SendKeys "%FS"
- WScript.Sleep 500
- WshShell.SendKeys "T.txt"
- WshShell.SendKeys "%S"
- WScript.Sleep 500
- WshShell.SendKeys "%FX"
- Wscript.Quit
复制代码
作者: kofbld 时间: 2015-4-22 14:17
楼上的不好用,谢谢你的热心帮助!批处理要是能实现就好了,vbs都没碰过!
有个思路就是修改二楼的代码,用vbs随机读取文本中某行的内容给变量,然后模拟中文输出!求给个vbs代码
作者: pcl_test 时间: 2015-4-22 14:19
本帖最后由 pcl_test 于 2015-4-22 15:22 编辑
- Randomize
- Set ws = CreateObject("Wscript.Shell")
- ws.Run "notepad" '打开记事本
- do while ws.appactivate("无标题 - 记事本")=false '聚焦到当前记事本窗口
- WScript.Sleep 200
- loop
- ws.SendKeys "^ " '模拟Ctrl + Space
- WScript.Sleep 500
- str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
- Num = Int((len(str)-1) * Rnd + 1) '随机获取字符个数
- For i=0 to Num
- a=mid(str,Int(len(str) * Rnd + 1),1) '随机获取某个字符
- ws.sendkeys a
- WScript.Sleep 100 '数值越小打字速度越快
- Next
- ws.SendKeys " " '模拟Space
- WScript.Sleep 100
- save=0 '如想保存则写1
- If save=1 Then
- 'ws.sendkeys "^ "
- '解释上一行:关闭中文输入法。如果是中文,则必须去掉上一行的注释。
- ws.sendkeys "^s"
- WScript.Sleep 1000
- ws.sendkeys "c:\test.txt" '文件名(可写路径),必须是全英文
- WScript.Sleep 1000
- ws.sendkeys "{Enter}"
- End If
- ws.SendKeys "%{F4}" '模拟Alt + F4,关闭当前记事本窗口
- WScript.Sleep 500
- If save=0 Then
- ws.SendKeys "N"
- End If
- WScript.quit
复制代码
作者: pcl_test 时间: 2015-4-22 15:05
本帖最后由 pcl_test 于 2017-4-16 20:51 编辑
借boyangcoco代码修改下,xp系统没有clip.exe,需下载http://batch-cn.qiniudn.com/tool/clip.exe- Randomize
- Set ws = CreateObject("Wscript.Shell")
- ws.Run "notepad" '打开记事本
- do while ws.appactivate("无标题 - 记事本")=false '聚焦到当前记事本窗口
- WScript.Sleep 200
- loop
- ws.SendKeys "^ " '模拟Ctrl + Space
- WScript.Sleep 500
- str = "这是一行演示中文输入的字符串无言独上西楼月如钩寂寞梧桐深院锁清秋剪不断理还乱是离愁别是一般滋味在心头"
- Num = Int((len(str)-1) * Rnd + 1) '随机获取字符个数
- For i=0 to Num
- a=mid(str,Int(len(str) * Rnd + 1),1) '随机获取某个字符
- ws.Run "cmd.exe /c echo " & a & "| clip.exe", vbHide '用cmd命令把单个字符写入剪贴板
- WScript.Sleep 100
- ws.SendKeys "^v" '模拟Ctrl + V
- WScript.Sleep 100 '数值越小打字速度越快
- ws.SendKeys "{BACKSPACE}" '模拟BackSpace
- WScript.Sleep 100
- Next
- ws.SendKeys " " '模拟Space
- WScript.Sleep 100
- save=0 '如想保存则写1
- If save=1 Then
- 'ws.sendkeys "^ "
- '解释上一行:关闭中文输入法。如果是中文,则必须去掉上一行的注释。
- ws.sendkeys "^s"
- WScript.Sleep 1000
- ws.sendkeys "c:\test.txt" '文件名(可写路径),必须是全英文
- WScript.Sleep 1000
- ws.sendkeys "{Enter}"
- End If
- ws.SendKeys "%{F4}" '模拟Alt + F4,关闭当前记事本窗口
- WScript.Sleep 500
- If save=0 Then
- ws.SendKeys "N"
- End If
- WScript.quit
复制代码
作者: kofbld 时间: 2015-4-22 15:19
回复 5# pcl_test
谢谢大神,此代码修改后完全符合我的要求!
随机输出N个字符的代码能解释下吗?
作者: pcl_test 时间: 2015-4-22 15:49
本帖最后由 pcl_test 于 2015-4-22 16:12 编辑
回复 7# kofbld
嗯,哪句不明白的?随机什么的,主要在Rnd函数,获取当个字符只要在len函数、for循环 和 mid函数,你可先了解下这些函数的语法和功能
作者: pcl_test 时间: 2015-4-22 16:16
还可以这样- Randomize
- Set ws = CreateObject("Wscript.Shell")
- ws.Run "notepad" '打开记事本
- do while ws.appactivate("无标题 - 记事本")=false '聚焦到当前记事本窗口
- WScript.Sleep 200
- loop
- ws.SendKeys "^ " '模拟Ctrl + Space
- WScript.Sleep 500
- str = "这是一行演示中文输入的字符串无言独上西楼月如钩寂寞梧桐深院锁清秋剪不断理还乱是离愁别是一般滋味在心头"
- Sub CopyString(s) '设置函数
- Set forms=WScript.CreateObject("forms.form.1")
- Set textbox=forms.Controls.Add("forms.textbox.1").Object
- With textbox
- .multiline=True
- .text=s
- .selstart=0
- .sellength=Len(.text)
- .copy
- End With
- End Sub
- Num = Int((len(str)-1) * Rnd + 1) '随机获取字符个数
- For i=0 to Num
- a=mid(str,Int(len(str) * Rnd + 1),1) '随机输出某个字符
- CopyString a '调用函数
- WScript.Sleep 100
- ws.SendKeys "^v" '模拟Ctrl + V
- WScript.Sleep 100 '数值越小打字速度越快
- Next
- ws.SendKeys " " '模拟Space
- WScript.Sleep 100
- save=0 '如想保存则写1
- If save=1 Then
- 'ws.sendkeys "^ "
- '解释上一行:关闭中文输入法。如果是中文,则必须去掉上一行的注释。
- ws.sendkeys "^s"
- WScript.Sleep 1000
- ws.sendkeys "c:\test.txt" '文件名(可写路径),必须是全英文
- WScript.Sleep 1000
- ws.sendkeys "{Enter}"
- End If
- ws.SendKeys "%{F4}" '模拟Alt + F4,关闭当前记事本窗口
- WScript.Sleep 500
- If save=0 Then
- ws.SendKeys "N"
- End If
- WScript.quit
复制代码
作者: pcl_test 时间: 2015-4-22 16:18
此外还可以利用Word.Application对象和InternetExplorer.Application对象来实现
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |