Показать полную графическую версию : [решено] Как скрыть графические окна программы, устанавливаемой с помощью AutoIt?
Можно ли скрыть с помощью AutoIt графические окна устанавливаемой программы? Если да то как? Заранее благодарен за оказанную помощь!
пример:
#region: - Option
Opt('MustDeclareVars', 1)
Opt('TrayIconDebug', 1)
Opt('TrayIconHide', 0)
#endregion
#region: - Global
Global $iPid, $hHwd
#endregion
$iPid = Run('notepad.exe')
While 1
$hHwd = _ProcessGetWindow($iPid, 1)
If IsHWnd($hHwd) Then ExitLoop
WEnd
MsgBox(64, 'Внимание', 'Окно Блокнота отображается' & @CRLF & 'После нажатия OK окно будет скрыто')
WinSetState($hHwd, '', @SW_HIDE)
MsgBox(64, 'Внимание', 'Окно Блокнота скрыто' & @CRLF & 'После нажатия OK окно будет отображенно')
WinSetState($hHwd, '', @SW_SHOW)
WinActivate($hHwd)
MsgBox(64, 'Внимание', 'Окно Блокнота отображается' & @CRLF & 'После нажатия OK скрипт будет закрыт')
ProcessClose($iPid)
Func _ProcessGetWindow($iPID, $iRet=-1)
Local $aWinList = WinList()
Local $aRet[2]
If IsString($iPID) Then $iPID = ProcessExists($iPID)
For $i = 1 To UBound($aWinList)-1
If WinGetProcess($aWinList[$i][1]) = $iPID Then
$aRet[0] = $aWinList[$i][0] ;Title
$aRet[1] = $aWinList[$i][1] ;WinHandle
If $iRet = 0 Then Return $aRet[0]
If $iRet = 1 Then Return $aRet[1]
Return $aRet
EndIf
Next
Return SetError(1, 0, $aRet)
EndFunc
или так, но в этом случае необходимо убедиться, что не запущенно других копий Блокнота:
#region: - Option
Opt('MustDeclareVars', 1)
Opt('TrayIconDebug', 1)
Opt('TrayIconHide', 0)
#endregion
While 1
Local $iProcessExists = ProcessExists('notepad.exe')
If $iProcessExists <> 0 Then
If MsgBox(32+1, 'Внимание', 'Блокнот уже запущен' & @CRLF & _
'Пожалуйста, закройте все копии Блокнота' & @CRLF & _
'и повторите попытку' & @CRLF & @CRLF & _
'ОК - продолжить, Отмена - выход') == 2 Then
Exit
EndIf
Else
ExitLoop
EndIf
Sleep(10)
WEnd
Run('notepad.exe')
WinWaitActive('[CLASS:Notepad]')
MsgBox(64, 'Внимание', 'Окно Блокнота отображается' & @CRLF & 'После нажатия OK окно будет скрыто')
WinSetState('[CLASS:Notepad]', '', @SW_HIDE)
MsgBox(64, 'Внимание', 'Окно Блокнота скрыто' & @CRLF & 'После нажатия OK окно будет отображенно')
WinSetState('[CLASS:Notepad]', '', @SW_SHOW)
WinActivate('[CLASS:Notepad]')
MsgBox(64, 'Внимание', 'Окно Блокнота отображается' & @CRLF & 'После нажатия OK скрипт будет закрыт')
ProcessClose('Notepad.exe')
Здрасьте, уважаемые!
Как уже было сказано, не все приложения позволяют скрывать свои окна с помощью @SW_HIDE.
Хорошо.
А если я тупо запущу инсталятор на пример так: Run("ccleaner.exe /VERYSILENT") ?
Вроде работает, устанавливается скрытно, но по окончании в трее висит иконка скрипта, если кляцкнуть по ней мышкой - появляется вкладка с галочкой Script paused, и Exit вторым пунктом. В Task Manager висит процесс - AutoIt3.exe, то есть скрипт сам не заканчивает свою работу, нужно завершить процесс в ручную из трея или таск менеджера. Это плохо, когда на пример устанавливаешь проги из RunOnceEx, вся эта тема виснет, пока не пошлешь Ctrl+Alt+Del и не перегрузишь систему, и так пока весь список не отработает...
Вот мой код для СиКлинера:
Run("ccleaner.exe /VERYSILENT")
WinWait("Установка — Ccleaner", "")
;WinSetState("Установка — Ccleaner", "", @SW_HIDE)
ControlClick("Установка — Ccleaner", "", "[CLASS:TButton; INSTANCE:1]")
WinWait("Установка — Ccleaner", "Выберите дополнительные задачи")
;WinSetState("Установка — Ccleaner", "Выберите дополнительные задачи", @SW_HIDE)
;ControlCommand("Установка — Ccleaner", "", "TNewCheckListBox1", "Check", "")
ControlClick("Установка — Ccleaner", "", "[CLASS:TButton; INSTANCE:2]")
WinWait("Установка — Ccleaner", "Всё готово к установке")
;WinSetState("Установка — Ccleaner", "Всё готово к установке", @SW_HIDE)
ControlClick("Установка — Ccleaner", "", "[CLASS:TButton; INSTANCE:2]")
WinWait("Установка — Ccleaner", "Завершение Мастера установки Ccleaner")
;WinSetState("Установка — Ccleaner", "Завершение Мастера установки Ccleaner", @SW_HIDE)
ControlClick("Установка — Ccleaner", "&Завершить", "[CLASS:TButton; INSTANCE:2]")
Всё уже перепробовал, по всякому, с @SW_HIDE получается не то, все нормально получается именно с ключами тихой установки. Не только, кстати, с СиКлинером, но и с WinRar, VLC playerom.. Как можно решить проблему зависания скрипта в конце установки? Чтоб скрипт убил сам себя, и таким образом продолжить установку по списку RunOnceEx. Если снять ключ /VERYSILENT, то всё отрабатывает идеально.
Вот еще мой RunOnceEx на всякий случай:
cmdow @ /HID
@echo off
SET KEY=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx
SET i=100
REG ADD %KEY%\%i% /VE /D "WinRar 3.90" /f
REG ADD %KEY%\%i% /V 1 /D "%systemdrive%\Install\Software\winrar\install.exe" /f
SET /A i+=1
REG ADD %KEY%\%i% /VE /D "VLC" /f
REG ADD %KEY%\%i% /V 1 /D "%systemdrive%\Install\Software\vlc\install.exe" /f
SET /A i+=1
REG ADD %KEY%\%i% /VE /D "Ccleaner" /f
REG ADD %KEY%\%i% /V 1 /D "%systemdrive%\Install\Software\ccleaner\install.exe" /f
SET /A i+=1
REG ADD %KEY%\%i% /VE /D "Java" /f
REG ADD %KEY%\%i% /V 1 /D "%systemdrive%\Install\Software\java\install.exe" /f
SET /A i+=1
REG ADD %KEY%\%i% /VE /D "Adobe Reader" /f
REG ADD %KEY%\%i% /V 1 /D "%systemdrive%\Install\Software\adobereader\install.exe" /f
SET /A i+=1
REG ADD %KEY%\%i% /VE /D "Cleaning Up and Rebooting" /f
REG ADD %KEY%\%i% /V 1 /D "%systemdrive%\Install\cleanup.cmd" /f
SET /A i+=1
EXIT
С ключом /VERYSILENT он у тя сам автоматом ставится, не надо ничо нажимать autoit ом! Просто тогда запусти Run("ccleaner.exe /VERYSILENT")
и не надо никаких winwait, controlclick и прочего, а так получается что он висит потому что ждет окно которое никогда не появится!
venOOm
Точна.
Всё заработало как надо.
Чета я ступил конкретно, усложнил всё, по незнанию.
Спасибо, дружище!
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.