利用 AdlibRegister 后如何从程序开头继续开始?
我做了一个脚本,用来导出数据,简单的工作原理是;我有一个ID列表,每次选一个ID,在选一个日期,在按一个按钮就可以导出一些数据.少数ID会导致导出数据时报错,错误千奇百怪.所以我需要利用 AdlibRegister 函数检测如果一个ID的数据导出的时间长达1小时,就要将这个ID列入黑名单并从新开始.
问题:
1.而现在我的问题就是在利用 AdlibRegister 调用一个自定义函数确定过了一小时后.如何从程序的某个特定行从新开始,或是在程序开头开始就像从新打开它一样?
我用 _NowCalc 计算时间的方法确定是否过了一小时.
这是这个帖子的衍生问题
我做了一个循环按键模拟安装程序的脚本,如何检测它长时间没有进行动作?
好吧,我承认写的有点模糊,在这里 ...
ac5474012 发表于 2010-8-2 15:40 http://www.autoitx.com/images/common/back.gif AdlibRegister自带超时监测 本帖最后由 3mile 于 2010-8-4 14:58 编辑
先将你现有的程序做成一个主函数。
注册 A 函数进行数据检测,超时时长定为1小时。==》数据无变化则 A函数 返回错误信息,且注册 B函数(此函数调用你的主函数后立即反注册或在主函数开始即反注册)==》反注册 A函数。
不知道我的描述是否准确(的确有点绕口),希望能帮到你。 AdlibRegister自带超时监测
wanhua8u8 发表于 2010-8-4 14:04 http://www.autoitx.com/images/common/back.gif
这和超时有什么关系? 先将你现有的程序做成一个主函数。
注册 A 函数进行数据检测,超时时长定为1小时。==》数据无变化则 A函 ...
3mile 发表于 2010-8-4 14:56 http://www.autoitx.com/images/common/back.gif
你的意思是我把主要脚步变成一个自定义函数,直接调用是把?
感谢你的答案,但是把主脚本变成一个函数可能会出现很多错误。我现在的脚本已经很大了,我不想做大改动了。请各位在帮我想想还有别的办法吗? ...请大家帮我想想办法吧 任何暂停将导致整个脚本暂停.
主函数暂停,adlib也会暂停.
adlib暂停,主函数也会死. AU3就是这样的,如果有那个地方卡了,AdlibRegister函数也不起作用,不是真正的定时器 如果不用AdlibRegister函数而改用_timer_settimer函数定义计时器呢?
就向这样,msgbox的中断级别应该很高了吧,计时器一样有效:#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <Misc.au3>
#include <Timers.au3>
;Global $Sec = 0
;Global $Min = 1
Local $sec = 0, $min = 1
$mainwindow = GUICreate("倒计时 ", 162, 82, 400, 300, BitOR($WS_POPUP, $WS_CLIPSIBLINGS))
$Label = GUICtrlCreateLabel("标签", 0, 0, 162, 82, $SS_BLACKFRAME, $GUI_WS_EX_PARENTDRAG) ;通过右键菜单退出-拖拽
;FileInstall("tu.jpg", @TempDir & "\") ;编译图片
;$Pic1 = GUICtrlCreatePic(@TempDir & "\tu.jpg", 0, 0, 162, 82)
$FontMin = GUICtrlCreateLabel(StringFormat('%02s', $min), 22, 2, 48, 39)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetColor(-1, 0xc24343)
GUICtrlSetFont(-1, 34, 400, 0, "@黑体")
$FontD = GUICtrlCreateLabel(":", 68, 2, 48, 39)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetColor(-1, 0xc24343)
GUICtrlSetFont(-1, 34, 400, 0, "@黑体")
$FontSec = GUICtrlCreateLabel(StringFormat('%02s', $sec) & ":", 90, 2, 48, 39)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetColor(-1, 0xc24343)
GUICtrlSetFont(-1, 34, 400, 0, "@黑体")
$contextmenu = GUICtrlCreateContextMenu(3)
$Start = GUICtrlCreateMenuItem("开始", $contextmenu)
$Abort = GUICtrlCreateMenuItem("关于", $contextmenu)
GUICtrlCreateMenuItem("", $contextmenu)
$infoitem = GUICtrlCreateMenuItem("退出", $contextmenu)
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case -3, $infoitem ; 退出
infoitem()
Case $Start
_Timer_SetTimer($mainwindow, 1000, "_UpdateStatusBarClock")
$sec = 0
$min = 1
MsgBox(0,0,"ok")
GUICtrlSetState($start,$GUI_DISABLE)
EndSwitch
WEnd
Func _UpdateStatusBarClock($hWnd, $Msg, $iIDTimer, $dwTime)
If $sec = 0 And $min = 0 Then
_Timer_KillAllTimers($mainwindow)
GUICtrlSetState($start,$GUI_ENABLE)
Else
If $sec <= 0 Then
$sec = 60 + $sec
$min -= 1
EndIf
$sec -= 1
GUICtrlSetData($FontMin, StringFormat('%02s', $min))
GUICtrlSetData($FontSec, StringFormat('%02s', $sec))
EndIf
EndFunc ;==>_UpdateStatusBarClock
Func infoitem()
FileDelete(@TempDir & "\tu.jpg") ;删除图片
Exit
EndFunc ;==>infoitem 回复 8# auto
其实我主要是因为WinWait而卡住的 回复 9# 3mile
谢谢,我试试去. 回复auto
其实我主要是因为WinWait而卡住的
ac5474012 发表于 2010-8-6 09:42 http://www.autoitx.com/images/common/back.gif
adlibregister调用的函数里面放一个检测窗口动作,没检测不就跳出函数,不动作,检测到相关窗口再执行相关的动用 _timer_settimer函数 很有启发意义啊 把程序做成函数,增加检测工能 如果会玩的话,用_winapi_CreateSemaphore试试
页:
[1]
2