Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] Как скрыть графические окна программы, устанавливаемой с помощью AutoIt? (http://forum.oszone.net/showthread.php?t=135965)

Lex-id 26-03-2009 21:50 1075718

Как скрыть графические окна программы, устанавливаемой с помощью AutoIt?
 
Можно ли скрыть с помощью AutoIt графические окна устанавливаемой программы? Если да то как? Заранее благодарен за оказанную помощь!

proxy 26-03-2009 22:44 1075771

пример:
Код:

#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


Lex-id 26-03-2009 22:50 1075777

Спасибо! Сейчас попробую

proxy 26-03-2009 23:23 1075794

или так, но в этом случае необходимо убедиться, что не запущенно других копий Блокнота:

Код:

#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')


Lex-id 27-03-2009 14:12 1076187

Спасибо все рабоотает

su27 11-09-2009 02:59 1216245

Здрасьте, уважаемые!
Как уже было сказано, не все приложения позволяют скрывать свои окна с помощью @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


ven00m 11-09-2009 15:30 1216593

С ключом /VERYSILENT он у тя сам автоматом ставится, не надо ничо нажимать autoit ом! Просто тогда запусти
Код:

Run("ccleaner.exe /VERYSILENT")
и не надо никаких winwait, controlclick и прочего, а так получается что он висит потому что ждет окно которое никогда не появится!

su27 11-09-2009 21:25 1216854

venOOm

Точна.
Всё заработало как надо.
Чета я ступил конкретно, усложнил всё, по незнанию.
Спасибо, дружище!


Время: 02:42.

Время: 02:42.
© OSzone.net 2001-