程序弹窗导致脚本中断[已解决]
本帖最后由 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 ;一个一个的转换PDF,直到结束。
$single=$spit&"\"&$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 模拟点击呗 模拟点击呗
netegg 发表于 2012-10-17 22:20 http://www.autoitx.com/images/common/back.gif
程序都暂停啦,语句下面写什么都没用呢。。。为什么不是AU3自己的弹窗也会造成程序中断呢。。。 加一段检测这个弹窗是否存在,如果有这个弹窗的话就点击 是 或 否 回复 3# chen2j
到底是程序暂停还是脚本暂停,如果是程序暂停,用脚本控制点击,没听说过这类程序可以导致脚本暂停的,只是脚本后续操作找不到可操作的地方罢了,那不是暂停,是出错 2,4楼正解,脚本中断是因为你脚本本身的问题。 是脚本暂停了。这个弹窗会导致脚本暂停,所以下面写什么都是没用的。必需手动点击是或者否。
网上搜了一下,应该用Adlibregister这个函数可以解决问题。明天试试
谢谢楼上各位的解答 楼主说的暂停是指 winwait("xx") 而XX一直没有出现,脚本就一直在等待
还是指像点击了一下右下角的托盘图标,整个解释器都已经暂停解释脚本了。
前面种加点判断,严谨点就解决了,后面种应该不可能吧。
我认为在遇到问题的时候,可以着重描述自己已有的条件,和想达到的效果,也许可以学习到别人提供的,不一样的解决办法,感觉楼主已经进入了自己的思维定势. 回复 7# chen2j
如果脚本暂停的话,adlib也没用,它不会脱离脚本环境自己运行的 获取窗口,模拟点击 回复 8# zch11230
同意8楼高手看法,还有就是楼主能不能再把问题描述的详细一些,适当的可以贴部分源码,这样大家也好帮你解决问题。 上源码了,呵呵。之前在家电脑上传的图好像有问题,呵呵。 上源码了,呵呵。之前在家电脑上传的图好像有问题,呵呵。 设置打印样式表为mochrome.ctb---------------------------------------------------------------------------------------
后,wait问题窗口,再按键 设置打印样式表为mochrome.ctb------------------------------------------------------------------------ ...
seniors 发表于 2012-10-18 10:02 http://www.autoitx.com/images/common/back.gif
关键是弹出窗口之后脚本就自动暂停运行了。知道你手动点击 是 或者否之后,后面的程序才会执行。
刚加了WinWait("问题")
ControlClick("问题","",6)
结果是脚本在这不动了,然后我点击 是,脚本依然不走, 因为还在 wait "问题"窗口
页:
[1]
2