找回密码
 加入
搜索
查看: 4374|回复: 11

[AU3基础] 關於處理開機時出現新增硬體精靈視窗

  [复制链接]
发表于 2012-11-18 18:54:36 | 显示全部楼层 |阅读模式
請問各位,要怎麼去鎖定開機時出現的新增硬體精靈視窗,
將寫好的AU3在開機時自動啟動,但都無法去鎖定這個視窗,就直接跑完了


adlibenable ("drive")



func drive()
        if WinWait("尋找新增硬體精靈","",60) then
        WinActivate("尋找新增硬體精靈","",60)

        send ("ESC")
             run ("1024.exe")
   EndIf
EndFunc

AdlibDisable()
        
寫得很簡陋,目的是想說開機時讓他去判斷說是否要執行驅動安裝,但這個會造成萬用助理卡住
所以想寫一個如果開機有出現此視窗的話自動關閉

新手求救......
发表于 2012-11-18 19:08:33 | 显示全部楼层
AdlibEnable('_drive')

While 1
        Sleep(1)
WEnd

Func _drive()
        If WinExists('尋找新增硬體精靈') Then
                WinActivate('尋找新增硬體精靈')
                Sleep(200)
                Send('ESC')
                Run('1024.exe')
                Exit
        EndIf
EndFunc   ;==>_drive
p.s, 还在用老版本呢,现在是 AdlibRegister()、AdlibUnRegister()
 楼主| 发表于 2012-11-18 21:05:00 | 显示全部楼层
感謝afan大幫助,剛去試了一下可以運行
不過不能把這個"尋找新增硬體精靈"關閉..我再去嘗試一下
這樣也可以看得出來是老版本!!!!!!!
另提問一個問題,版本之間的差異性是????,  剛接觸,尚在研究中....
发表于 2012-11-18 21:34:56 | 显示全部楼层
感謝afan大幫助,剛去試了一下可以運行
不過不能把這個"尋找新增硬體精靈"關閉..我再去嘗試一下
這樣也可 ...
kagn02 发表于 2012-11-18 21:05



    因为你还在用 AdlibEnable(),这个函数在3.3.x.x以上就已经改名了。
没有关闭窗口是因为那段是照搬你的代码,估计是Send错了,应该是 Send('{ESC}')
 楼主| 发表于 2012-11-18 21:49:38 | 显示全部楼层
感謝指導,真的是send錯了...沒注意到
後來改成controlsend("尋找新增硬體精靈","","[CLASS:Button;INSTANCE:9]","{ESC}")就都正常了

延續一下部分的問題,假設說這個是窗沒有出現,那while 1 是否會一直執行,我還能做其他自動執行動作嗎??

因為要寫一個開機偵測顯卡是否有驅動---無的話他會出現這個視窗,然後關閉,執行萬用驅動助理,安裝完成重新開機,那重開後完成驅動安裝就執行測試程式。

這樣的話是不會是變成說現在寫的這一個會一直無限循環
发表于 2012-11-18 22:41:39 | 显示全部楼层
回复 5# kagn02


    以下可以仅监测1分钟,之后退出
Local $Ts = TimerInit(), $iWait = 60 * 1000 ;监测1分钟
AdlibEnable('_drive')

While 1
        Sleep(1)
WEnd

Func _drive()
        If WinExists('尋找新增硬體精靈') Then
                WinActivate('尋找新增硬體精靈')
                Sleep(200)
                Controlsend('尋找新增硬體精靈', '', '[CLASS:Button;INSTANCE:9]', '{ESC}')
                Run('1024.exe')
                Exit
        ElseIf TimerDiff($Ts) > $iWait Then
                Exit
        EndIf
EndFunc   ;==>_drive
 楼主| 发表于 2012-11-18 22:56:27 | 显示全部楼层
感謝...我會再嘗試,在這之前有一點想問(抱歉..問題很多@@)
針對afan大 第一次的回復中為何要將 WinWait 替換成 WinExists
然我實際操作,用winwait會出現不能執行狀況,原因出在哪裡呢????
发表于 2012-11-18 23:33:57 | 显示全部楼层
回复 7# kagn02


    你的代码中要说 WinWait 其实也没错,只是因为缺少一个保持进程的主循环,所以并没有执行drive(),甚至一次都没来得及执行,因为进程无法保持。

为何我加了保持进程的主循环,却改用 WinExists?是因为 WinWait 会有延迟,而 WinExists 没有,这样才能充分发挥多次调用drive()。

按你的描述,其实这段代码似乎可以不用循环调用 drive(),以下即可:
If WinWait('尋找新增硬體精靈', '', 60) then
        WinActivate('尋找新增硬體精靈')
        Sleep(200)
        Controlsend('尋找新增硬體精靈', '', '[CLASS:Button;INSTANCE:9]', '{ESC}')
        Run('1024.exe')
EndIf
发表于 2012-11-18 23:36:56 | 显示全部楼层
回复 8# afan
sleep(1)没试过,是不是会造成内存占用增大,不太清楚了
发表于 2012-11-18 23:40:11 | 显示全部楼层
回复 9# netegg


    Sleep() 多少似乎没啥区别,也想不到如何检验
发表于 2012-11-18 23:58:44 | 显示全部楼层
回复 10# afan
反正可能差别不大,不纠结了
 楼主| 发表于 2012-11-19 22:01:22 | 显示全部楼层
回复 8# afan

感謝...受益良多....再去嘗試看看.....

原來可以不用一直循環....看來用判斷式似乎就可以了....再去嘗試....
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-9-20 09:38 , Processed in 0.107311 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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