Войти

Показать полную графическую версию : [решено] сокрытие окна, как только оно появилось или всплыло


crashtuak
27-07-2009, 21:44
В AutoIt я новичок. Вот есть пару вопросов.
Вот запускаю программу скрыто:
Run("Keymaker.exe", "", @SW_HIDE)
Потом жму на форме скрытой программы кнопку:
ControlClick("Diskeeper 2009 keymaker", "", "TButton1")
Скрытое окно показывается, что мне не нужно.
Может есть какой нить способ, чтоб наш скрипт автоматом скрывал окно по заголовку, когда оно появляется, или когда было сокрытое, но потом "всплыло" через необъяснимые причины? :)
Тоесть, мне нужно, чтоб сокрытие окон работало в отдельном потоке, а основной скрипт (запуск программы, нажатие кнопок) выполнялся независимо.

ven00m
27-07-2009, 22:26
Как вариант можешь перетащить окно за границу экрана используя WinMove и там с ним работать.

crashtuak
27-07-2009, 22:45
Вариант халтурный :). Жду еще ответов.

Creat0R
27-07-2009, 23:15
мне нужно, чтоб сокрытие окон работало в отдельном потоке, а основной скрипт (запуск программы, нажатие кнопок) выполнялся независимо. »
Либо в дополнительном скрипте, либо через 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

timsky
28-07-2009, 03:30
Вариант халтурный . Жду еще ответов. »
А в чем халтурность? @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