找回密码
 加入
搜索
查看: 8077|回复: 18

[系统综合] 利用 AdlibRegister 后如何从程序开头继续开始?

 火.. [复制链接]
发表于 2010-8-4 10:58:43 | 显示全部楼层 |阅读模式
我做了一个脚本,用来导出数据,简单的工作原理是;我有一个ID列表,每次选一个ID,在选一个日期,在按一个按钮就可以导出一些数据.少数ID会导致导出数据时报错,错误千奇百怪.

所以我需要利用 AdlibRegister 函数检测如果一个ID的数据导出的时间长达1小时,就要将这个ID列入黑名单并从新开始.

问题:
1.而现在我的问题就是在利用 AdlibRegister 调用一个自定义函数确定过了一小时后.如何从程序的某个特定行从新开始,或是在程序开头开始就像从新打开它一样?


我用 _NowCalc 计算时间的方法确定是否过了一小时.

这是这个帖子的衍生问题
我做了一个循环按键模拟安装程序的脚本,如何检测它长时间没有进行动作?

好吧,我承认写的有点模糊,在这里 ...
ac5474012 发表于 2010-8-2 15:40
发表于 2010-8-4 14:04:11 | 显示全部楼层
AdlibRegister  自带超时监测
发表于 2010-8-4 14:56:21 | 显示全部楼层
本帖最后由 3mile 于 2010-8-4 14:58 编辑

先将你现有的程序做成一个主函数。
注册 A 函数进行数据检测,超时时长定为1小时。==》数据无变化则 A函数 返回错误信息,且注册 B函数(此函数调用你的主函数后立即反注册或在主函数开始即反注册)==》反注册 A函数。

不知道我的描述是否准确(的确有点绕口),希望能帮到你。
 楼主| 发表于 2010-8-4 17:12:23 | 显示全部楼层
AdlibRegister  自带超时监测
wanhua8u8 发表于 2010-8-4 14:04


这和超时有什么关系?
 楼主| 发表于 2010-8-4 17:19:46 | 显示全部楼层
先将你现有的程序做成一个主函数。
注册 A 函数进行数据检测,超时时长定为1小时。==》数据无变化则 A函 ...
3mile 发表于 2010-8-4 14:56


你的意思是我把主要脚步变成一个自定义函数,直接调用是把?

感谢你的答案,但是把主脚本变成一个函数可能会出现很多错误。我现在的脚本已经很大了,我不想做大改动了。请各位在帮我想想还有别的办法吗?
 楼主| 发表于 2010-8-5 16:08:14 | 显示全部楼层
...请大家帮我想想办法吧
发表于 2010-8-5 17:58:07 | 显示全部楼层
任何暂停将导致整个脚本暂停.
主函数暂停,adlib也会暂停.
adlib暂停,主函数也会死.
发表于 2010-8-5 19:14:53 | 显示全部楼层
AU3就是这样的,如果有那个地方卡了,AdlibRegister函数也不起作用,不是真正的定时器
发表于 2010-8-5 23:36:14 | 显示全部楼层
如果不用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

评分

参与人数 1金钱 +30 收起 理由
afan + 30

查看全部评分

 楼主| 发表于 2010-8-6 09:42:09 | 显示全部楼层
回复 8# auto

其实我主要是因为WinWait而卡住的
 楼主| 发表于 2010-8-6 09:42:43 | 显示全部楼层
回复 9# 3mile

谢谢,我试试去.
发表于 2010-8-6 22:26:44 | 显示全部楼层
回复  auto

其实我主要是因为WinWait而卡住的
ac5474012 发表于 2010-8-6 09:42


adlibregister调用的函数里面放一个检测窗口动作,没检测不就跳出函数,不动作,检测到相关窗口再执行相关的动用
发表于 2010-8-7 11:53:10 | 显示全部楼层
_timer_settimer函数 很有启发意义啊
发表于 2010-8-8 15:10:12 | 显示全部楼层
把程序做成函数,增加检测工能
发表于 2010-8-9 04:50:29 | 显示全部楼层
如果会玩的话,用_winapi_CreateSemaphore试试
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-20 01:58 , Processed in 0.082750 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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