Показать полную графическую версию : [решено] сокрытие окна, как только оно появилось или всплыло
crashtuak
27-07-2009, 21:44
В AutoIt я новичок. Вот есть пару вопросов.
Вот запускаю программу скрыто:
Run("Keymaker.exe", "", @SW_HIDE)
Потом жму на форме скрытой программы кнопку:
ControlClick("Diskeeper 2009 keymaker", "", "TButton1")
Скрытое окно показывается, что мне не нужно.
Может есть какой нить способ, чтоб наш скрипт автоматом скрывал окно по заголовку, когда оно появляется, или когда было сокрытое, но потом "всплыло" через необъяснимые причины? :)
Тоесть, мне нужно, чтоб сокрытие окон работало в отдельном потоке, а основной скрипт (запуск программы, нажатие кнопок) выполнялся независимо.
Как вариант можешь перетащить окно за границу экрана используя WinMove и там с ним работать.
crashtuak
27-07-2009, 22:45
Вариант халтурный :). Жду еще ответов.
мне нужно, чтоб сокрытие окон работало в отдельном потоке, а основной скрипт (запуск программы, нажатие кнопок) выполнялся независимо. »
Либо в дополнительном скрипте, либо через callback:
#include <GuiConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Timers.au3>
;
Opt("WinWaitDelay", 0)
Global $sTitle = "Search Title"
Global $hGUI = GUICreate($sTitle)
Global $iTimer = TimerInit()
_Timer_SetTimer($hGUI, 10, "_CheckWindow_Proc")
While 1
If TimerDiff($iTimer) >= 2000 Then ;Тут мы имитируем появление тайного окна (ради теста)
ConsoleWrite("Окно появилось" & @CRLF)
GUISetState(@SW_SHOW)
Sleep(2000) ;Спим 2 сек. чтобы убедиться что наш процесс проверки обнаружил окно и скрыл его
_Timer_KillAllTimers($hGUI)
Exit
EndIf
Sleep(10)
WEnd
Func _CheckWindow_Proc($hWnd, $Msg, $iIDTimer, $dwTime)
If BitAND(WinGetState($sTitle), 2) Then
ConsoleWrite("Скрываем окно" & @CRLF)
WinSetState($sTitle, "", @SW_HIDE)
EndIf
EndFunc
“Чистый” пример использования:
#include <Timers.au3>
;
Opt("WinWaitDelay", 0)
Global $sSearchTitle = "Search Title"
_Timer_SetTimer(0, 10, "_CheckWindow_Proc")
While 1
;Тут мы выполняем рутинные операции
Sleep(10)
WEnd
Func _CheckWindow_Proc($hWnd, $Msg, $iIDTimer, $dwTime)
If BitAND(WinGetState($sSearchTitle), 2) Then WinSetState($sSearchTitle, "", @SW_HIDE)
EndFunc
Вариант халтурный . Жду еще ответов. »
А в чем халтурность? @SW_HIDE тоже ничего особенного не делает. Запускай скрутым, передвигай за пределы и кликай :)
crashtuak
28-07-2009, 09:07
“Чистый” пример использования: »
Идеально подошел. Хотя он мне непонятный (я AutoIt юзаю 1 час от силы :)), но работает идеально.
Volshebnick
30-07-2009, 15:22
Так как же работает данный скрипт может ктото объяснить???
#include <Timers.au3>
;
Opt("WinWaitDelay", 0)
Global $sSearchTitle = "Search Title"
_Timer_SetTimer(0, 10, "_CheckWindow_Proc")
While 1
;Тут мы выполняем рутинные операции
Sleep(10)
WEnd
Func _CheckWindow_Proc($hWnd, $Msg, $iIDTimer, $dwTime)
If BitAND(WinGetState($sSearchTitle), 2) Then WinSetState($sSearchTitle, "", @SW_HIDE)
EndFunc
Как он скрывает окно установки?
crashtuak
30-07-2009, 21:47
Как он скрывает окно установки? »
Как обычное @SW_HIDE, только кроет оно окно как только состояние окна отличное от @SW_HIDE.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.