找回密码
 加入
搜索
查看: 14765|回复: 20

[系统综合] 程序弹窗导致脚本中断[已解决]

 火.. [复制链接]
发表于 2012-10-17 21:42:53 | 显示全部楼层 |阅读模式
本帖最后由 chen2j 于 2012-10-19 18:26 编辑

我写了个CAD文件自动转换为PDF的脚本,当程序运行到将打印样式表修改的时候,CAD就会弹出如下的窗口,导致程序停止运行。只有人工点击以后程序才会继续运行。
有人知道这个该怎么解决吗?

不好意思,问题没描述清楚,用了adlib还是没法解决呢。。我也是新手,上周才开始用autoit,之前用的按键精灵做的类似功能,执行时间是比autoit慢多了,呵呵。
现在主要有2个问题。
1.上面说的程序中断问题
2.选择输出PDF的文件夹时,这个不知道怎么发送命令,找到的ID和文件名框ID是一样的,而且在win7下还必须鼠标点一下才能直接输入。现在用的是鼠标点击然后send的方法。

终于找到一个方法了,无意间开了两个脚本,结果就运行成功了。我现在的方法是先运行另外一个脚本,不断的检测是否存在这个窗口。这样才可以。

有人知道还有更好的解决办法吗?

附上现在写的源码。
#Include <Array.au3>
Local $flag
Local $filename,$spit,$i
Global $single
$flag=1                ;图纸为A3则选择flag=1;图纸为A4则选择flag=0
$filename=FileOpenDialog("请选择需要转换的CAD文件","","图形 (*.dwg)",4)  ;弹出选择文件对话框
If @error Then Exit  ;如果没有选择或选择错误,则退出
$spit=StringSplit($filename,"|")   ;分割文件变成数组
If @error Then 
        $single=$filename  ;说明选择的是单个文件
Else
                For $i=2 To $spit[0]                                        ;一个一个的转换PDF,直到结束。
                $single=$spit[1]&""&$spit[$i]
                Next
EndIf
;_ArrayDisplay($spit,"")  ;可以显示数组,做检查用
AdlibRegister("wenti")
CADtoPDF($single)
Func CADtoPDF($single)                        ;自定义函数。
Local $pid=ProcessExists("acad.exe")   ;检测CAD是否已经在运行。
If $PID Then ProcessClose($PID)      ;如果存在则终止进程
ShellExecute($single)  ;运行文件
WinWait("AutoCAD 2011","正在重生成模型")  ;等待AutoCAD加载完成
ControlSend("AutoCAD 2011","",2,"z e pagesetup ")   ;使页面最大化并打开页面设置管理器
WinWait("页面设置管理器")   ;暂停直到打开页面设置管理器
ControlSend("页面设置管理器","",4696,"!m")  ;按“ALT+M”
WinWait("页面设置 - 模型")   ;暂停直到打开页面设置 - 模型
ControlCommand("页面设置 - 模型","",1020,"SetCurrentSelection", 4)   ;设置打印机为“Adobe PDF”
If $flag=1 Then
        ControlCommand("页面设置 - 模型","",1040,"SelectString", 'A3')   ;设置图纸尺寸为“A3”
        ControlCommand("页面设置 - 模型","",1037,"Check","")  ;设置图形方形为“横向”,匹配A3
Else
        ControlCommand("页面设置 - 模型","",1040,"SelectString", 'A4')   ;设置图纸尺寸为“A4”
        ControlCommand("页面设置 - 模型","",1036,"Check","")  ;设置图形方形为“纵向”,匹配A4
EndIf
ControlCommand("页面设置 - 模型","",1043,"SelectString", '范围')   ;设置打印范围为“范围”
ControlCommand("页面设置 - 模型","",1030,"UnCheck","")  ;设置按打印样式打印为“否”
ControlCommand("页面设置 - 模型","",1030,"Check","")  ;设置按打印样式打印为“是”---防止没有勾上“打印对象线宽”
ControlCommand("页面设置 - 模型","",1053,"Check","")  ;勾上“布满图纸”
ControlCommand("页面设置 - 模型","",1006,"SelectString", 'monochrome')   ;设置打印样式表为mochrome.ctb---------------------------------------------------------------------------------------未解决弹窗问题  
ControlClick("页面设置 - 模型","",1)   ;关闭页面设置
ControlClick("页面设置管理器","",2)   ;关闭页面设置管理器
ControlSend("AutoCAD 2011","",2,"plot ")   ;打开打印对话框
WinWait("打印 - 模型")   ;暂停直到打开"打印 - 模型"
ControlClick("打印 - 模型","",1)   ;关闭"打印 - 模型"
WinWait("另存 PDF 文件为")   ;暂停直到打开“另存 PDF 文件为”
ControlSend("另存 PDF 文件为","",1001,@YEAR&@MON&@MDAY&@HOUR&@MIN&@SEC)  ;输入文件名称为日期时间
AutoItSetOption ("MouseCoordMode",2)    ;相对窗口的坐标
MouseClick("left",450,13)
Send("D:\ziliao\其他\PDF_out")
ControlClick("另存 PDF 文件为","",1)   ;关闭“另存 PDF 文件为”
AutoItSetOption("WinTitleMatchMode",2)        ;设置标题匹配模式为“任意匹配”
WinWait("Adobe Acrobat Pro")   ;暂停直到打开“Adobe Acrobat Pro”
Sleep(500)
WinClose("Adobe Acrobat Pro")   ;关闭“Adobe Acrobat Pro”
ControlSend("AutoCAD 2011","",2,"qsave ")   ;保存CAD
Sleep(500)
WinClose("AutoCAD 2011")   ;关闭CAD
EndFunc
ShellExecute("D:\ziliao\其他\PDF_out","","","",@SW_MAXIMIZE)
Func wenti()
        If WinExists("问题") Then
        ControlClick("问题","",6)   ;这个还是无法执行
        EndIf
        EndFunc

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2012-10-17 22:20:14 | 显示全部楼层
模拟点击呗
 楼主| 发表于 2012-10-17 22:29:02 | 显示全部楼层
模拟点击呗
netegg 发表于 2012-10-17 22:20


程序都暂停啦,语句下面写什么都没用呢。。。为什么不是AU3自己的弹窗也会造成程序中断呢。。。
发表于 2012-10-17 22:49:52 | 显示全部楼层
加一段检测这个弹窗是否存在,如果有这个弹窗的话就点击 是 或 否
发表于 2012-10-17 23:08:15 | 显示全部楼层
回复 3# chen2j

到底是程序暂停还是脚本暂停,如果是程序暂停,用脚本控制点击,没听说过这类程序可以导致脚本暂停的,只是脚本后续操作找不到可操作的地方罢了,那不是暂停,是出错
发表于 2012-10-17 23:12:17 | 显示全部楼层
2,4楼正解,脚本中断是因为你脚本本身的问题。
 楼主| 发表于 2012-10-17 23:29:33 | 显示全部楼层
是脚本暂停了。这个弹窗会导致脚本暂停,所以下面写什么都是没用的。必需手动点击是或者否。
网上搜了一下,应该用Adlibregister这个函数可以解决问题。明天试试
谢谢楼上各位的解答
发表于 2012-10-17 23:58:41 | 显示全部楼层
楼主说的暂停是指 winwait("xx") 而XX一直没有出现,脚本就一直在等待
还是指像点击了一下右下角的托盘图标,整个解释器都已经暂停解释脚本了。
前面种加点判断,严谨点就解决了,后面种应该不可能吧。
我认为在遇到问题的时候,可以着重描述自己已有的条件,和想达到的效果,也许可以学习到别人提供的,不一样的解决办法,感觉楼主已经进入了自己的思维定势.
发表于 2012-10-18 00:01:06 | 显示全部楼层
回复 7# chen2j
如果脚本暂停的话,adlib也没用,它不会脱离脚本环境自己运行的
发表于 2012-10-18 00:36:57 | 显示全部楼层
获取窗口,模拟点击
发表于 2012-10-18 07:31:32 | 显示全部楼层
回复 8# zch11230
同意8楼高手看法,还有就是楼主能不能再把问题描述的详细一些,适当的可以贴部分源码,这样大家也好帮你解决问题。
 楼主| 发表于 2012-10-18 08:51:32 | 显示全部楼层
上源码了,呵呵。之前在家电脑上传的图好像有问题,呵呵。
 楼主| 发表于 2012-10-18 08:55:00 | 显示全部楼层
上源码了,呵呵。之前在家电脑上传的图好像有问题,呵呵。
发表于 2012-10-18 10:02:29 | 显示全部楼层
设置打印样式表为mochrome.ctb---------------------------------------------------------------------------------------
后,wait问题窗口,再按键
 楼主| 发表于 2012-10-18 10:28:41 | 显示全部楼层
设置打印样式表为mochrome.ctb------------------------------------------------------------------------ ...
seniors 发表于 2012-10-18 10:02


关键是弹出窗口之后脚本就自动暂停运行了。知道你手动点击 是 或者否之后,后面的程序才会执行。

刚加了WinWait("问题")
ControlClick("问题","",6)

结果是脚本在这不动了,然后我点击 是,脚本依然不走, 因为还在 wait "问题"窗口
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-1 09:32 , Processed in 0.086053 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表