找回密码
 加入
搜索
查看: 5429|回复: 3

[AU3基础] [已解决]如何占用资源小,而自动等待窗口出现

[复制链接]
发表于 2015-8-22 10:41:51 | 显示全部楼层 |阅读模式
本帖最后由 lzlcn 于 2015-8-23 11:15 编辑

由于我公司的ERP系统限制了操作时间,久没操作就会弹出一个确认的窗口,当我离开电脑久不动,就自动退出了。
  所以我想做一个自动等待窗口出现,就去自动点击弹出的窗口,因为这窗口不定时的会出出来,需要去点击一下。
以下是我写的程序,但问题来了,这种循环占用CPU运行,是否有其他办法可以运行资源很小又可以达到我要求呢?
#include <Excel.au3>
Global $Paused
HotKeySet("{PAUSE}", "TogglePause")
HotKeySet("{ESC}", "Terminate")
While 1
        


If WinExists("审核框") Then  ;判断窗口是否出现
     WinActivate("审核框","")   ;等窗口出现
         ;Send("{ENTER}")
        ControlClick ( "审核框", "","[CLASS:QWidget; INSTANCE:7]", "left", 1, 35, 11 ) ;点击确认
        ;TrayTip("提示","窗口已点击关闭",5)
        ;MsgBox(4096, "测试", "窗口已点击关闭")

EndIf


WEnd
;;;;;;;;
;;;;;;;;
Func TogglePause()
    $Paused = Not $Paused
    While $Paused
        Sleep(100)
        ToolTip('程序脚本 "暂停"运行', 0, 0)
    WEnd
    ToolTip("")
EndFunc   ;==>TogglePause

Func Terminate()
    Exit 0
EndFunc   ;==>Terminate
发表于 2015-8-23 10:06:50 | 显示全部楼层
#NoTrayIcon;這一段是不讓程序圖標顯示在通知檔位,根據個人需要來決定是否開啟此功能
#include <Excel.au3>
HotKeySet("{ESC}", "Terminate")
While 1
         sleep(100)
         _ReduceMemory(@AutoItPID)
If WinExists("你的視窗標題") Then
         ControlClick("你的視窗標題","","你的視窗控制項ID")
         MsgBox(4096, "提示", "窗口已經關閉",3);這一段可以不要 
EndIf
         _ReduceMemory(@AutoItPID)
WEnd
         _ReduceMemory(@AutoItPID)
Func Terminate()
         Exit
EndFunc
         _ReduceMemory(@AutoItPID)
Func _ReduceMemory($i_PID = -1)
If $i_PID <> -1 Then
         Local $ai_Handle = DllCall("kernel32.dll", 'int', 'OpenProcess', 'int', 0x1f0fff, 'int', False, 'int', $i_PID)
         Local $ai_Return = DllCall("psapi.dll", 'int', 'EmptyWorkingSet', 'long', $ai_Handle[0])
         DllCall('kernel32.dll', 'int', 'CloseHandle', 'int', $ai_Handle[0])
Else
         Local $ai_Return = DllCall("psapi.dll", 'int', 'EmptyWorkingSet', 'long', -1)
EndIf
         Return $ai_Return[0]
EndFunc

评分

参与人数 1金钱 +10 收起 理由
lzlcn + 10 很给力

查看全部评分

 楼主| 发表于 2015-8-23 11:12:43 | 显示全部楼层
回复 2# txen548
谢谢您的解答,试了,可以,占用内存很小,而且CPU也不会占用,非常好,还有解释!也希望此贴也给其他爱好AUTOIT的朋友带来帮助!
发表于 2015-8-23 12:07:02 | 显示全部楼层
不用客氣,其它這一段優化內存的代碼本來就是本講壇的
         _ReduceMemory(@AutoItPID)
Func _ReduceMemory($i_PID = -1)
If $i_PID <> -1 Then
         Local $ai_Handle = DllCall("kernel32.dll", 'int', 'OpenProcess', 'int', 0x1f0fff, 'int', False, 'int', $i_PID)
         Local $ai_Return = DllCall("psapi.dll", 'int', 'EmptyWorkingSet', 'long', $ai_Handle[0])
         DllCall('kernel32.dll', 'int', 'CloseHandle', 'int', $ai_Handle[0])
Else
         Local $ai_Return = DllCall("psapi.dll", 'int', 'EmptyWorkingSet', 'long', -1)
EndIf
         Return $ai_Return[0]
EndFunc
有事情提問前先搜索一下講壇看有沒有解決辦法,如實在沒有解決辦法再發提問貼,本講壇還是有很多熱心A友的.
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-12-22 22:31 , Processed in 0.082640 second(s), 27 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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