Скрыть всплывающее окно ...

Ответить
Аватара пользователя
FlatX007

Скрыть всплывающее окно ...

Сообщение FlatX007 »

Вобщем проблема такая : во время работы периодически появляется окно , я его отлавливаю и скрываю но оно всё равно мигает и пропадает на экране.

Пробовал менял время обработки цикла отлова этого окна - от это только растёт нагрузка на процессор.



Окошко представляет собой системное окошко 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

Re: Скрыть всплывающее окно ...

Сообщение Creat0R »

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



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

Re: Скрыть всплывающее окно ...

Сообщение FlatX007 »

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



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





Код:

Код: Выделить всё

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

Re: Скрыть всплывающее окно ...

Сообщение Yashied »

Цитата FlatX007:



Вобщем проблема такая : во время работы периодически появляется окно , я его отлавливаю и скрываю но оно всё равно мигает и пропадает на экране.

Пробовал менял время обработки цикла отлова этого окна - от это только растёт нагрузка на процессор.

Окошко представляет собой системное окошко Windows для ввода логина и пароля при подключении.

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




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



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

Re: Скрыть всплывающее окно ...

Сообщение Creat0R »

Цитата 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

Re: Скрыть всплывающее окно ...

Сообщение FlatX007 »

Цитата Yashied:



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

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




В каком смысле средства Виндовс для подключения ?

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




Цитата Creat0R:



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




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

Re: Скрыть всплывающее окно ...

Сообщение Creat0R »

Цитата FlatX007:



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




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




Цитата FlatX007:



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




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

Re: Скрыть всплывающее окно ...

Сообщение FlatX007 »

Цитата Creat0R:



В справке написано что https поддерживается.
Скрыть всплывающее окно ...




Я вкурсе, что оно потдерживается но на деле неработает ничего Изображение
Аватара пользователя
Creat0R

Re: Скрыть всплывающее окно ...

Сообщение Creat0R »

Цитата FlatX007:



на деле неработает ничего
Скрыть всплывающее окно ...




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

Вернуться в «AutoIt»