Board logo

标题: [其他] 批处理也autoit,自动操作word [打印本页]

作者: netbenton    时间: 2010-6-6 00:37     标题: 批处理也autoit,自动操作word

这是一个专为cmd批处理写的,模拟按键来实现控制word处理文本的三方:machwo.exe
先把要做的动作写到一个文本里:b2.txt
当运行b2.bat时,就根据预先写好的动作,自动模拟用户操作键盘来实现编辑word文档,
可实现的动作有:
打开/另存/保存文档,在指定行输入文字,修改格式,插入项目,选择段落/复制/粘贴,等等,只要是平时你能用键盘在word上能做到的都可以实现。


===== machwo.exe 关于控制键语法定义 =====
一、模拟shift,Ctrl,Alt键
S() Shift
C() Ctrl
A() Alt
在这里“(”表示键的按下,“)”表示键的放开

二、“?”号跟一个字母,作为模拟其它控制键:
?I Insert
?D Delete
?H Home
?E End
?U PageUp
?W PageDown
?B Backspace
?T Tab
?R Enter
?C Esc
?< 左移
?> 右移
?A 上移
?V 下移
?P Pause
?@ Print     [打印]
?1 F1
?2 F2
......(类推)
?9 F9
?0 F10
?- F11
?= F12

三、“+”号跟一数字n,实现上一键N次重复
如:
A+4 连按4次A键
?R+5 连按5次回车键

四、组合形式用法:
C(A) 表示 Ctrl + A
C(ABC) 表示 Ctrl + 依次按A B C
C(A(P)) 表示 Ctrl + Alt + P
S(C()) 同时按下了一次 Shift + Ctrl , 可切换输入法
A(?4) 表示 Alt + F4,可用于关闭窗口
?V+5 下移5行,如缺省+参数则只移一行,
C(?>+6) 表示Ctr + 右方向键按了6次
S(?T+3) 表示Shift + Tab 按了3次


附件里除了该三方外,有一个演示用的word文档,和一个保存操作动作b2.txt,和一个演示该三方具体功能和使用方法说明的b2.bat

链接: https://pan.baidu.com/s/1UP-09PKthNzzBQaRzmggSw 提取码: ukq8 复制这段内容后打开百度网盘手机App,操作更方便哦
作者: plp626    时间: 2010-6-6 00:43

==============
你也太能搞了~ ~
==============
作者: pdanniel66    时间: 2010-6-6 06:37     标题: LZ可否将 b2.txt原文贴出,繁体看到是乱码

(1)LZ可否将b2.txt原文贴出,繁体看到是乱码
(2) 可否也写出Excel 版本的?

[ 本帖最后由 pdanniel66 于 2010-6-6 06:44 编辑 ]
作者: 随风    时间: 2010-6-6 11:20

首先感谢楼主的热心
之前不能运行的原因已经找到
:loop
%initword:wo=001 - Microsoft Word% 此句001后面的后缀名去掉就ok了。

set #1=001.doc - Microsoft Word 这句也带了个后缀名,不去掉也可以,不知道会不会影响其他。

if !#! neq 10 goto :loop 没有正确消息返回时,循环等待
不解的是 !#! 在什么情况下会 等于10?看代码好像只看到一句 set #=00
作者: netbenton    时间: 2010-6-6 11:43

re 随风
你说的原因我终于明白了,主要是因为windows 文件夹选项里[启用]和[禁用]“隐藏已知文件类型的扩展名”时窗口标题会有所不同,就是也会出现隐藏扩展名的情况,所以造成窗口标题不对了,machwo.exe 也就没能正确吸附word窗口。

这个machwo.exe是通过修改CMD的变量内存来将结果返回给CMD的,所以你在b1.bat里没有再次看到对“#”的附值,当成功吸附word窗口后,machwo.exe会把#变量的值改为10
b1.bat里面的语句在pause暂停后也能自动继续往下运行的原因,也是因为machwo.exe在完成它的任务后,会给CMD窗口发送一个按键,去击活CMD窗口因为pause而暂停的等待。
作者: zjw767676    时间: 2010-6-6 12:07

是否能操作指定标题的窗口,而不是仅仅WORD?
作者: Seter    时间: 2010-6-6 12:54

我汗  LZ爱上memory control啦
作者: netbenton    时间: 2010-6-6 19:11     标题: 回复 6楼 7楼的帖子

re 6 楼
这个machwo.exe只对word有效,虽然也可以改成对任何窗口,但是,在还没有确定这样做的利害关系时,还不想改成任意的。

re 7楼
呵呵~~3方直接写内存,把结果回传给BAT,效率是没得说的,并且不用多次调用三方去“吃”内存,虽然一次“吃”得不多,可是多次调用后就不得了了。

[ 本帖最后由 netbenton 于 2010-6-6 19:22 编辑 ]
作者: 523066680    时间: 2010-6-6 22:07

猛男, 小弟佩服灌水+留名
作者: rivch    时间: 2010-6-11 14:53

佩服,佩服!!!!!!!!!!!!
作者: kbsjfans    时间: 2010-6-26 14:33

的确不错,有创意,佩服LZ!
作者: taiji    时间: 2010-7-21 22:51

楼主,我来提个建议啊,就是可以交换数据
作者: cjiabing    时间: 2016-8-6 22:41

本帖最后由 cjiabing 于 2016-8-6 22:44 编辑

@netbenton  兄,不知道是不是版本问题,这次命令没有成功,升级下代码喂!~
我现在用的是word2010,打开002.doc的窗口显示“兼容模式”


系统:Windows 7
word:2010
作者: pcl_test    时间: 2016-8-6 23:26

回复 13# cjiabing

可以用ahk模拟
  1. Run, "002.doc"
  2. WinWait, 002.doc,,
  3. HKL:=DllCall("LoadKeyboardLayout", Str, 0x08040804, UInt, 1)
  4. ControlGetFocus, ctl, A
  5. SendMessage, 0x50, 0, HKL, %ctl%, A
  6. BlockInput on
  7. Sleep, 500
  8. Send, {Down 4}{Right}{Ins}秋风夜雨
  9. Sleep, 300
  10. Send, ^{Down 2}123456789012345678
  11. Sleep, 300
  12. Send, ^{Down 2}男女
  13. Sleep, 300
  14. Send, ^{Down 3}1998
  15. Sleep, 300
  16. Send, ^{Down 2}7
  17. Sleep, 300
  18. Send, ^{Down 3}月球
  19. Sleep, 300
  20. Send, ^{Down 2}团员
  21. Sleep, 300
  22. Send, ^{Down 2}贵族
  23. Sleep, 300
  24. Send, {F12}
  25. WinWait, 另存为,,
  26. Sleep, 300
  27. Send, {BS}
  28. Sleep, 300
  29. Random, rand, 1000, 9999
  30. SendRaw, %rand%.doc
  31. Sleep, 500
  32. ControlClick, Button8, 另存为,, L
  33. ;Send,!s
复制代码

作者: cjiabing    时间: 2016-8-7 11:52

回复 14# pcl_test


    试了一下,效果不错,不过要花点时间来学习和整理,谢谢!




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