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

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

crashtuak 27-07-2009 21:44 1179314

сокрытие окна, как только оно появилось или всплыло
 
В AutoIt я новичок. Вот есть пару вопросов.
Вот запускаю программу скрыто:
Код:

Run("Keymaker.exe", "", @SW_HIDE)
Потом жму на форме скрытой программы кнопку:
Код:

ControlClick("Diskeeper 2009 keymaker", "", "TButton1")
Скрытое окно показывается, что мне не нужно.
Может есть какой нить способ, чтоб наш скрипт автоматом скрывал окно по заголовку, когда оно появляется, или когда было сокрытое, но потом "всплыло" через необъяснимые причины? :)
Тоесть, мне нужно, чтоб сокрытие окон работало в отдельном потоке, а основной скрипт (запуск программы, нажатие кнопок) выполнялся независимо.

ven00m 27-07-2009 22:26 1179351

Как вариант можешь перетащить окно за границу экрана используя WinMove и там с ним работать.

crashtuak 27-07-2009 22:45 1179362

Вариант халтурный :). Жду еще ответов.

Creat0R 27-07-2009 23:15 1179380

Цитата:

Цитата crashtuak
мне нужно, чтоб сокрытие окон работало в отдельном потоке, а основной скрипт (запуск программы, нажатие кнопок) выполнялся независимо. »

Либо в дополнительном скрипте, либо через 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 1179494

Цитата:

Цитата crashtuak
Вариант халтурный . Жду еще ответов. »

А в чем халтурность? @SW_HIDE тоже ничего особенного не делает. Запускай скрутым, передвигай за пределы и кликай :)

crashtuak 28-07-2009 09:07 1179570

Цитата:

Цитата Creat0R
“Чистый” пример использования: »

Идеально подошел. Хотя он мне непонятный (я AutoIt юзаю 1 час от силы :)), но работает идеально.

Volshebnick 30-07-2009 15:22 1181567

Так как же работает данный скрипт может ктото объяснить???

Код:

#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 1181892

Цитата:

Цитата Volshebnick
Как он скрывает окно установки? »

Как обычное @SW_HIDE, только кроет оно окно как только состояние окна отличное от @SW_HIDE.


Время: 00:41.

Время: 00:41.
© OSzone.net 2001-