doonyakka Posted June 9, 2007 Share Posted June 9, 2007 Hi, I've finished my first AutoIt script (it works!) and have a question about improving it. It's a very short, simple script that automates the installation and configuration of my personal firewall, using a third-party installer. The script runs the third-party installer and then enters the correct registration details in the various fields. The installer then configures the firewall according to the existent connection (eg., LAN, Wifi, dial-up, etc). At the moment, I am using the Sleep command to allow the installer enough time to complete the configuration, but this seems quite clumsy. However, I was wondering if there is a more elegant and reliable way of doing this, ie., is there a command that would detect that the installer is finished?Any advice much appreciated. If interested, see code below.Cheers,doonyakka#RequireAdmin Run("APP_NAME"); replace APP_NAME with the full app name and path WinWaitActive("APP_NAME", "") ControlSend("", "", "Edit1", "NAME"); replace NAME with your Registration Name ControlSend("", "", "Edit3", "SERIAL_NUMBER"); replace SERIAL_NUMBER with your registered Serial number ControlClick("", "", "[CLASS:Button; TEXT:Register; INSTANCE:2]") Sleep(6000) WinClose("APP_NAME", "") Exit Link to comment Share on other sites More sharing options...
narayanjr Posted June 10, 2007 Share Posted June 10, 2007 expandcollapse popup#RequireAdmin Dim $last_active = 0 Dim $Inactive_Seconds = 5 Dim $timer = TimerInit() Dim $count = 0 $not_idle = _CheckIdle($last_active, 1) Run("APP_NAME"); replace APP_NAME with the full app name and path WinWaitActive("APP_NAME", "") ControlSend("", "", "Edit1", "NAME"); replace NAME with your Registration Name ControlSend("", "", "Edit3", "SERIAL_NUMBER"); replace SERIAL_NUMBER with your registered Serial number ControlClick("", "", "[CLASS:Button; TEXT:Register; INSTANCE:2]") While (1) $not_idle = _CheckIdle($last_active) If $not_idle <> 0 Then $timer = TimerInit() sleep(2000) If Int(TimerDiff($timer) / 1000) >= $Inactive_Seconds Then if $count = 0 Then WinClose("APP_NAME", "") Exit EndIf $timer = TimerInit() $not_idle = _CheckIdle($last_active, 1) EndIf WEnd Func _CheckIdle(ByRef $last_active, $start = 0) $struct = DllStructCreate("uint;dword"); DllStructSetData($struct, 1, DllStructGetSize($struct)); If $start Then DllCall("user32.dll", "int", "GetLastInputInfo", "ptr", DllStructGetPtr($struct)) $last_active = DllStructGetData($struct, 2) Return $last_active Else DllCall("user32.dll", "int", "GetLastInputInfo", "ptr", DllStructGetPtr($struct)) If $last_active <> DllStructGetData($struct, 2) Then Local $save = $last_active $last_active = DllStructGetData($struct, 2) Return $last_active - $save EndIf EndIf EndFunc ;==>_CheckIdle well thats another way it waits for the computer to be idle for 5 seconds before it closes the program and the idle isnt my scripting i forget who i got it off of a while ago Link to comment Share on other sites More sharing options...
herewasplato Posted June 10, 2007 Share Posted June 10, 2007 ...is there a command that would detect that the installer is finished?...Welcome to the forum... there is no one command that I know of that will do this, but consider these work arounds: 1) ControlClick("", "", "[CLASS:Button; TEXT:Register; INSTANCE:2]") WinWait("APP_NAME", "text") WinClose("APP_NAME", "") Where text = some text that only shows up when the install is done... 2) If there is no unique text that you can key off of - you might want to look for a file that exists only after the install/config has completed - like maybe a log file. See the AutoIt function for FileExists (). 3) If none of the above work, but there is a log file or ini file that is created and written to throughout the install procedure - you might have to compare the date/time stamp or file size on that file to see when it stops changing. Maybe others have better work arounds... MSP [size="1"][font="Arial"].[u].[/u][/font][/size] Link to comment Share on other sites More sharing options...
doonyakka Posted June 10, 2007 Author Share Posted June 10, 2007 Thanks for the helpful replies herewasplato's first suggestion does exactly what I was looking for - ingenious! 1) ControlClick("", "", "[CLASS:Button; TEXT:Register; INSTANCE:2]") WinWait("APP_NAME", "text") WinClose("APP_NAME", "") Where text = some text that only shows up when the install is done... Cheers, doonyakka Link to comment Share on other sites More sharing options...
herewasplato Posted June 10, 2007 Share Posted June 10, 2007 Glad that it worked for you. [size="1"][font="Arial"].[u].[/u][/font][/size] Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now