Войти

Показать полную графическую версию : Скрыть всплывающее окно ...


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

Окошко представляет собой системное окошко 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
Можно установить ожидание окна в 0: Opt("WinWaitDelay", 0)

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

FlatX007
29-05-2009, 16:21
Всё равно мигает - только быстрее пропадает

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

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
Вобщем проблема такая : во время работы периодически появляется окно , я его отлавливаю и скрываю но оно всё равно мигает и пропадает на экране.
Пробовал менял время обработки цикла отлова этого окна - от это только растёт нагрузка на процессор.
Окошко представляет собой системное окошко Windows для ввода логина и пароля при подключении.
Можно его как-то скрывать до его появления, что бы оно не мигало? ... с учётом того, что ... »
Мое мнение: без хука здесь не обойдешься, а так как для этого необходимо писать полноценную DLL (не DllCallBackRegister()), то в AutoIt это зделать очень проблематично (если вообще возможно).

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

Creat0R
29-05-2009, 19:46
Всё равно мигает - только быстрее пропадает »
Ну вообще чтобы не появлялось наврядли получится. Вот пример с использованием хука, быстрее уже некуда вроде:

#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
Мое мнение: без хука здесь не обойдешься, а так как для этого необходимо писать полноценную DLL (не DllCallBackRegister()), то в AutoIt это зделать очень проблематично (если вообще возможно).
Я думаю проще использовать средства Windows для тихого подключения. Google на это даст множество ответов. »

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

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

Creat0R
30-05-2009, 12:46
На AutoIT неполучилось написать, как оказалось он отказывается работать с HTTPS. »
В справке (http://www.autoitscript.com/autoit3/docs/functions/InetGet.htm) написано что https поддерживается.

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

FlatX007
30-05-2009, 22:15
В справке написано что https поддерживается. »

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

Creat0R
30-05-2009, 22:24
на деле неработает ничего »
Не работает слишком громко сказано, возможно причина вовсе не в протоколе https (это можно попробовать выяснить в отдельной теме).

FlatX007
30-05-2009, 22:32
http://forum.oszone.net/thread-138886.html




© OSzone.net 2001-2012