Компьютерный форум 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=141312)

FlatX007 28-05-2009 22:53 1129832

Скрыть всплывающее окно ...
 
Вобщем проблема такая : во время работы периодически появляется окно , я его отлавливаю и скрываю но оно всё равно мигает и пропадает на экране.
Пробовал менял время обработки цикла отлова этого окна - от это только растёт нагрузка на процессор.

Окошко представляет собой системное окошко Windows для ввода логина и пароля при подключении.
Можно его как-то скрывать до его появления, что бы оно не мигало? ... с учётом того, что ...

Код:

If WinExists("Подключение к stat.****.net","") Then
If
$PasswordBufer = 1 Then
Send($DecodePasword)
Send("{ENTER}")
EndIf
WinSetState("Подключение к stat.****.net", "", @SW_HIDE)
ControlClick("Подключение к stat.****.net", "", "[CLASS:Button; INSTANCE:2]")


Creat0R 28-05-2009 23:48 1129873

Можно установить ожидание окна в 0: Opt("WinWaitDelay", 0)

Если дело не в этом, то полный-рабочий пример в студию.

FlatX007 29-05-2009 16:21 1130366

Всё равно мигает - только быстрее пропадает

"Полный" пример вот.

Код:

Opt("WinWaitDelay", 0)

;~ .....................................

$PasswordBufer = 1
$DecodePasword = 123456
$WindowCert = 1
$WindowConn = 1

While 1
        If $WindowCert = 1 Then ; Окно сетрификата
            If WinExists("Предупреждение системы безопасности","") Then
                WinSetState("Предупреждение системы безопасности", "", @SW_HIDE)
                ControlClick("Предупреждение системы безопасности", "", "[CLASS:Button; INSTANCE:1]")
            EndIf
        EndIf

        If
$WindowConn = 1 Then ; Окно подключения
            If WinExists("Подключение к stat.****.net","") Then
                WinSetState("Подключение к stat.****.net", "", @SW_HIDE)
                If $PasswordBufer = 1 Then  ; вставлять автоматически
                    Send($DecodePasword)
                EndIf
;~              WinSetState("Подключение к stat.****.net", "", @SW_HIDE)
                ControlClick("Подключение к stat.****.net", "", "[CLASS:Button; INSTANCE:2]")
            EndIf
        EndIf

;~ .......................................

Sleep(250)
WEnd


Yashied 29-05-2009 18:31 1130440

Цитата:

Цитата FlatX007
Вобщем проблема такая : во время работы периодически появляется окно , я его отлавливаю и скрываю но оно всё равно мигает и пропадает на экране.
Пробовал менял время обработки цикла отлова этого окна - от это только растёт нагрузка на процессор.
Окошко представляет собой системное окошко Windows для ввода логина и пароля при подключении.
Можно его как-то скрывать до его появления, что бы оно не мигало? ... с учётом того, что ... »

Мое мнение: без хука здесь не обойдешься, а так как для этого необходимо писать полноценную DLL (не DllCallBackRegister()), то в AutoIt это зделать очень проблематично (если вообще возможно).

Я думаю проще использовать средства Windows для тихого подключения. Google на это даст множество ответов.

Creat0R 29-05-2009 19:46 1130498

Цитата:

Цитата FlatX007
Всё равно мигает - только быстрее пропадает »

Ну вообще чтобы не появлялось наврядли получится. Вот пример с использованием хука, быстрее уже некуда вроде:

Код:

#NoTrayIcon
;

HotKeySet("^e", "_Quit")

;ShellHook notification codes:
Global Const $HSHELL_WINDOWCREATED = 1;
Global Const $HSHELL_WINDOWDESTROYED = 2;
Global Const $HSHELL_ACTIVATESHELLWINDOW = 3;
Global Const $HSHELL_WINDOWACTIVATED = 4;
Global Const $HSHELL_GETMINRECT = 5;
Global Const $HSHELL_REDRAW = 6;
Global Const $HSHELL_TASKMAN = 7;
Global Const $HSHELL_LANGUAGE = 8;
Global Const $HSHELL_SYSMENU = 9;
Global Const $HSHELL_ENDTASK = 10;
Global Const $HSHELL_ACCESSIBILITYSTATE = 11;
Global Const $HSHELL_APPCOMMAND = 12;
Global Const $HSHELL_WINDOWREPLACED = 13;
Global Const $HSHELL_WINDOWREPLACING = 14;
Global Const $HSHELL_RUDEAPPACTIVATED = 32772;
Global Const $HSHELL_FLASH = 32774;

Global $aMonitor_WinTitles[3] = [2, "Предупреждение системы безопасности", "Подключение к stat.****.net"]
Global $hGUI = GUICreate("Shell Hooker")

;Hook stuff:
GUIRegisterMsg(RegisterWindowMessage("SHELLHOOK"), "HShellWndProc")
ShellHookWindow($hGUI, 1)

While 1
    Sleep(1000)
WEnd

Func
HShellWndProc($hWnd, $Msg, $wParam, $lParam)
    Switch $wParam
        Case $HSHELL_WINDOWCREATED
            Local $s_Title = WinGetTitle($lParam)

            For $i = 1 To $aMonitor_WinTitles[0]
                If $s_Title = $aMonitor_WinTitles[$i] Then
                    WinKill($lParam)
                    ExitLoop
                EndIf
            Next
    EndSwitch
EndFunc

;register/unregister ShellHook
Func ShellHookWindow($hWnd, $bFlag)
    Local $sFunc = 'DeregisterShellHookWindow'
    If $bFlag Then $sFunc = 'RegisterShellHookWindow'

    Local $aRet = DllCall('user32.dll', 'int', $sFunc, 'hwnd', $hWnd)
    Return $aRet[0]
EndFunc

;register window message
Func RegisterWindowMessage($sText)
    Local $aRet = DllCall('user32.dll', 'int', 'RegisterWindowMessage', 'str', $sText)
    Return $aRet[0]
EndFunc

Func _Quit()
    ShellHookWindow($hGUI, 0)
    Exit
EndFunc


FlatX007 30-05-2009 07:37 1130752

Цитата:

Цитата Yashied
Мое мнение: без хука здесь не обойдешься, а так как для этого необходимо писать полноценную DLL (не DllCallBackRegister()), то в AutoIt это зделать очень проблематично (если вообще возможно).
Я думаю проще использовать средства Windows для тихого подключения. Google на это даст множество ответов. »

В каком смысле средства Виндовс для подключения ?
У меня работает отдельная программа которая опрашивает HTTPS сервер о данных баланса (грубо говоря она сохраняет HTML код станицы в файле во временной папке). Эту программу написал один мой знакомый на "HiAsm" ... но она с косяком почему-то периодически появляется это злополучное окошко для ввода логина и пароля. На AutoIT неполучилось написать, как оказалось он отказывается работать с HTTPS.

Цитата:

Цитата Creat0R
Ну вообще чтобы не появлялось наврядли получится. Вот пример с использованием хука, быстрее уже некуда вроде: »

Оба окошка вообще не скрываются .... и в окошко подключения должен вставляться пароль а иначе программа инициатор этого окна небудет работать.

Creat0R 30-05-2009 12:46 1130892

Цитата:

Цитата FlatX007
На AutoIT неполучилось написать, как оказалось он отказывается работать с HTTPS. »

В справке написано что https поддерживается.

Цитата:

Цитата FlatX007
Оба окошка вообще не скрываются .... и в окошко подключения должен вставляться пароль а иначе программа инициатор этого окна небудет работать »

Ну это всего лишь пример, в HShellWndProc можно самому изменить нужные условия проверки (в цикле при переборе заголовков с массива).

FlatX007 30-05-2009 22:15 1131266

Цитата:

Цитата Creat0R
В справке написано что https поддерживается. »

Я вкурсе, что оно потдерживается но на деле неработает ничего :(

Creat0R 30-05-2009 22:24 1131274

Цитата:

Цитата FlatX007
на деле неработает ничего »

Не работает слишком громко сказано, возможно причина вовсе не в протоколе https (это можно попробовать выяснить в отдельной теме).

FlatX007 30-05-2009 22:32 1131285

http://forum.oszone.net/thread-138886.html


Время: 14:10.

Время: 14:10.
© OSzone.net 2001-