本帖最后由 vuivui 于 2014-5-4 11:21 编辑
多进程在au3中是代替多线程的一个常用手段,其实很多情况下用au3命令行来实现比较简单。以下一个解决弹窗的典型例子:#include <IE.au3>
$form = GUICreate("欢迎使用流量查询专用工具",750, 400);
$oIE = ObjCreate("Shell.Explorer.1") ;
GUICtrlCreateObj($oIE, -1, -25, 750, 400) ;
$oIE.Navigate("https://218.19.163.114")
Run(@AutoItExe & ' /AutoIt3ExecuteLine "Local $s=''安全警报'',$a=WinWait($s), $a=WinActivate($s), $a=ControlClick($s, '''', ''Button1''), $a=WinClose($s), $a=WinWait($s), $a=WinActivate($s), $a=ControlClick($s, '''', ''Button1'')"')
GUISetState(@SW_SHOW)
While 1
If GUIGetMsg() = -3 Then
Exit
EndIf
WEnd
这个实例来自:http://www.autoitx.com/forum.php?mod=viewthread&tid=36261&extra=&page=1
原理是用“Run(@AutoItExe & ' /AutoIt3ExecuteLine……”语句来执行多条命令,优点是直接、简单、快速,并且不会在托盘产生多图标。
单行执行多条命令的方法比较多,最简单的是用定义变量的方法,结合其他的手段可以实现复杂的转向命令,简单的脚本大多能转换为单行命令的。
一些提示和外部程序的弹窗是不可预见的,这样多进程语句必须是预设性放置在语句段前面,前提是必须包含“Wait”命令。上面的例子可以改成这样:#include <IE.au3>
Run(@AutoItExe & ' /AutoIt3ExecuteLine "Local $s=''安全警报'',$a=WinWait($s), $a=WinActivate($s), $a=ControlClick($s, '''', ''Button1''), $a=WinClose($s), $a=WinWait($s), $a=WinActivate($s), $a=ControlClick($s, '''', ''Button1'')"')
$form = GUICreate("欢迎使用流量查询专用工具",750, 400);
$oIE = ObjCreate("Shell.Explorer.1") ;
GUICtrlCreateObj($oIE, -1, -25, 750, 400) ;
$oIE.Navigate("https://218.19.163.114")
GUISetState(@SW_SHOW)
While 1
If GUIGetMsg() = -3 Then
Exit
EndIf
WEnd
简单多进程的好处是很多的,比如我们可以利用多进程分头执行耗时的程序。我经常利用多进程同时下载网页,大大节约了时间。
其他实例:
一、保持打开au3脚本
|