Board logo

标题: [问题求助] 【已解决】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

试试以下代码,看能不能满足你的要求.
  1. Set wshobj=WScript.CreateObject("WScript.Shell")  
  2. code="在Excel中使用查找对话框可以查找工作表中特定内容的单元格,而在VBA中则使用Find方法,如下面的代码所示。"  
  3. wshobj.Run "cmd.exe /c echo " & code & "| clip.exe", vbHide  
  4. app=wshobj.Run ("C:\windows\notepad.exe")  
  5. WScript.Sleep 1000  
  6. wshobj.AppActivate app  
  7. wshobj.SendKeys "^v"  
  8. WshShell.SendKeys "%FS"  
  9. WScript.Sleep 500
  10. WshShell.SendKeys "T.txt"  
  11. WshShell.SendKeys "%S"  
  12. WScript.Sleep 500  
  13. WshShell.SendKeys "%FX"
  14. 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 编辑
  1. Randomize
  2. Set ws = CreateObject("Wscript.Shell")
  3. ws.Run "notepad"      '打开记事本
  4. do while ws.appactivate("无标题 - 记事本")=false      '聚焦到当前记事本窗口
  5. WScript.Sleep 200
  6. loop
  7. ws.SendKeys "^ "    '模拟Ctrl + Space
  8. WScript.Sleep 500
  9. str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
  10. Num = Int((len(str)-1) * Rnd + 1)       '随机获取字符个数
  11. For i=0 to Num
  12. a=mid(str,Int(len(str) * Rnd + 1),1)      '随机获取某个字符
  13. ws.sendkeys a
  14. WScript.Sleep 100      '数值越小打字速度越快
  15. Next
  16. ws.SendKeys " "    '模拟Space
  17. WScript.Sleep 100
  18. save=0      '如想保存则写1
  19. If save=1 Then
  20. 'ws.sendkeys "^ "
  21. '解释上一行:关闭中文输入法。如果是中文,则必须去掉上一行的注释。
  22. ws.sendkeys "^s"
  23. WScript.Sleep 1000
  24. ws.sendkeys "c:\test.txt"    '文件名(可写路径),必须是全英文
  25. WScript.Sleep 1000
  26. ws.sendkeys "{Enter}"
  27. End If
  28. ws.SendKeys "%{F4}"    '模拟Alt + F4,关闭当前记事本窗口
  29. WScript.Sleep 500
  30. If save=0 Then
  31. ws.SendKeys "N"
  32. End If
  33. 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
  1. Randomize
  2. Set ws = CreateObject("Wscript.Shell")
  3. ws.Run "notepad"      '打开记事本
  4. do while ws.appactivate("无标题 - 记事本")=false      '聚焦到当前记事本窗口
  5. WScript.Sleep 200
  6. loop
  7. ws.SendKeys "^ "    '模拟Ctrl + Space
  8. WScript.Sleep 500
  9. str = "这是一行演示中文输入的字符串无言独上西楼月如钩寂寞梧桐深院锁清秋剪不断理还乱是离愁别是一般滋味在心头"
  10. Num = Int((len(str)-1) * Rnd + 1)       '随机获取字符个数
  11. For i=0 to Num
  12. a=mid(str,Int(len(str) * Rnd + 1),1)      '随机获取某个字符
  13. ws.Run "cmd.exe /c echo " & a & "| clip.exe", vbHide     '用cmd命令把单个字符写入剪贴板
  14. WScript.Sleep 100
  15. ws.SendKeys "^v"       '模拟Ctrl + V
  16. WScript.Sleep 100      '数值越小打字速度越快
  17. ws.SendKeys "{BACKSPACE}"    '模拟BackSpace
  18. WScript.Sleep 100
  19. Next
  20. ws.SendKeys " "    '模拟Space
  21. WScript.Sleep 100
  22. save=0      '如想保存则写1
  23. If save=1 Then
  24. 'ws.sendkeys "^ "
  25. '解释上一行:关闭中文输入法。如果是中文,则必须去掉上一行的注释。
  26. ws.sendkeys "^s"
  27. WScript.Sleep 1000
  28. ws.sendkeys "c:\test.txt"    '文件名(可写路径),必须是全英文
  29. WScript.Sleep 1000
  30. ws.sendkeys "{Enter}"
  31. End If
  32. ws.SendKeys "%{F4}"    '模拟Alt + F4,关闭当前记事本窗口
  33. WScript.Sleep 500
  34. If save=0 Then
  35. ws.SendKeys "N"
  36. End If
  37. 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

还可以这样
  1. Randomize
  2. Set ws = CreateObject("Wscript.Shell")
  3. ws.Run "notepad"      '打开记事本
  4. do while ws.appactivate("无标题 - 记事本")=false      '聚焦到当前记事本窗口
  5. WScript.Sleep 200
  6. loop
  7. ws.SendKeys "^ "    '模拟Ctrl + Space
  8. WScript.Sleep 500
  9. str = "这是一行演示中文输入的字符串无言独上西楼月如钩寂寞梧桐深院锁清秋剪不断理还乱是离愁别是一般滋味在心头"
  10. Sub CopyString(s)    '设置函数
  11. Set forms=WScript.CreateObject("forms.form.1")
  12. Set textbox=forms.Controls.Add("forms.textbox.1").Object
  13. With textbox
  14. .multiline=True
  15. .text=s
  16. .selstart=0
  17. .sellength=Len(.text)
  18. .copy
  19. End With
  20. End Sub
  21. Num = Int((len(str)-1) * Rnd + 1)       '随机获取字符个数
  22. For i=0 to Num
  23. a=mid(str,Int(len(str) * Rnd + 1),1)      '随机输出某个字符
  24. CopyString a      '调用函数
  25. WScript.Sleep 100
  26. ws.SendKeys "^v"       '模拟Ctrl + V
  27. WScript.Sleep 100      '数值越小打字速度越快
  28. Next
  29. ws.SendKeys " "    '模拟Space
  30. WScript.Sleep 100
  31. save=0      '如想保存则写1
  32. If save=1 Then
  33. 'ws.sendkeys "^ "
  34. '解释上一行:关闭中文输入法。如果是中文,则必须去掉上一行的注释。
  35. ws.sendkeys "^s"
  36. WScript.Sleep 1000
  37. ws.sendkeys "c:\test.txt"    '文件名(可写路径),必须是全英文
  38. WScript.Sleep 1000
  39. ws.sendkeys "{Enter}"
  40. End If
  41. ws.SendKeys "%{F4}"    '模拟Alt + F4,关闭当前记事本窗口
  42. WScript.Sleep 500
  43. If save=0 Then
  44. ws.SendKeys "N"
  45. End If
  46. WScript.quit
复制代码

作者: pcl_test    时间: 2015-4-22 16:18

此外还可以利用Word.Application对象和InternetExplorer.Application对象来实现




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2