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

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   VNC авторизация (http://forum.oszone.net/showthread.php?t=212909)

batyaPS 09-08-2011 13:10 1728517

VNC авторизация
 
Может есть у кого готовый или помогите создать скрипт для автоматической авторизации при vnc подключении.
Требуется входить как с доменной авторизацией так и просто по паролю (окна при этих авторизациях разные).

т.е. нужен процесс или служба работающая в ожидании нужного окна (запрос авторизации по VNC)
и при появлении требуемого (их бывает два - с доменной авторизацией и авторизация по паролю - они разные) окна
осуществляла ввод (нужного) логина + пароля (в случае с доменной авторизацией) или просто пароля (в случае обычной авторизации).

думаю многим очень будет полезна данная наработка


решение
реализация с ini файлом

batyaPS 11-08-2011 11:46 1729710

Данные окна с доменной авторизацией

Title:Ultr@VNC Авторизация
Class:#32770
Поле с логином
Class:Edit
Instance:1
Поле с паролем
Class:Edit
Instance:2

Данные окна с авторизацией по паролю
Title:VNC Авторизация
Class:#32770
Поле с паролем
Class:Edit
Instance:1

madmasles 11-08-2011 12:47 1729784

batyaPS,
А есть кнопка, на которую надо нажимать?

batyaPS 11-08-2011 15:12 1729899

madmasles,

Данные окна с доменной авторизацией

Title:Ultr@VNC Авторизация
Class:#32770
Поле с логином
Class:Edit
Instance:1
Поле с паролем
Class:Edit
Instance:2
кнопка "войти"
Class:Button
Instance:1


Данные окна с авторизацией по паролю
Title:VNC Авторизация
Class:#32770
Поле с паролем
Class:Edit
Instance:1
кнопка "войти"
Class:Button
Instance:1


либо Enter

madmasles 11-08-2011 16:51 1729976

batyaPS,
Попробуйте так:
Код:

#NoTrayIcon
#include <WinAPIEx.au3>;Yashied, http://autoit-script.ru/index.php/topic,47.0.html

Opt('MustDeclareVars', 1)
Opt('TrayMenuMode', 1)

Global $sTitleScript = @ScriptName & '{[/@$@\]}', $sTitleLogPass = '[Title:Ultr@VNC Авторизация;Class:#32770]', _
        $sTitlePass = '[Title:VNC Авторизация;Class:#32770]', $fLogPass, $fPass, $nExitItem, $msg

If WinExists($sTitleScript) Then Exit
AutoItWinSetTitle($sTitleScript)

HotKeySet('{Esc}', '_Exit')
$nExitItem = TrayCreateItem('Выход')
TraySetState()
TraySetToolTip('<VNC Авторизация>' & @LF & 'Выход - нажать кнопку "Esc"')
_WinAPI_EmptyWorkingSet()
While 1
    $msg = TrayGetMsg()
    If WinExists($sTitleLogPass) Then
        If Not $fLogPass Then
            _AvtorLogPass()
            If Not @error Then $fLogPass = True
        EndIf
    Else
        $fLogPass = False
    EndIf
    If WinExists($sTitlePass) Then
        If Not $fPass Then
            _AvtorPass()
            If Not @error Then $fPass = True
        EndIf
    Else
        $fPass = False
    EndIf
    Switch $msg
        Case 0
            ContinueLoop
        Case $nExitItem
            _Exit()
    EndSwitch
WEnd

Func _AvtorLogPass()
    Local $h_Win, $n_Log = '[Class:Edit;Instance:1]', $n_Pass = '[Class:Edit;Instance:2]', _
            $n_Button = '[Class:Button;Instance:1]', $s_Log = 'TestUser', $s_Pass = 'TestPass';свои данные поставьте
    $h_Win = WinGetHandle($sTitleLogPass)
    If Not $h_Win Then Return SetError(1)
    ControlSetText($h_Win, '', $n_Log, $s_Log)
    ControlSetText($h_Win, '', $n_Pass, $s_Pass)
    If ControlGetText($h_Win, '', $n_Log) <> $s_Log Then Return SetError(1)
    If ControlGetText($h_Win, '', $n_Pass) <> $s_Pass Then Return SetError(1)
    ControlClick($h_Win, '', $n_Button)
    If WinExists($h_Win) Then Return SetError(1)
    Return SetError(0)
EndFunc  ;==>_AvtorLogPass

Func _AvtorPass()
    Local $h_Win, $n_Pass = '[Class:Edit;Instance:1]', $n_Button = '[Class:Button;Instance:1]', _
            $s_Pass = 'TestPass';свои данные поставьте
    $h_Win = WinGetHandle($sTitlePass)
    If Not $h_Win Then Return SetError(1)
    ControlSetText($h_Win, '', $n_Pass, $s_Pass)
    If ControlGetText($h_Win, '', $n_Pass) <> $s_Pass Then Return SetError(1)
    ControlClick($h_Win, '', $n_Button)
    If WinExists($h_Win) Then Return SetError(1)
    Return SetError(0)
EndFunc  ;==>_AvtorPass

Func _Exit()
    Exit
EndFunc  ;==>_Exit


batyaPS 11-08-2011 19:34 1730066

При компиляции ошибка
Aut2Exe Error

Line 2 (File .......)
#include <WinAPIEx.au3>
Error: Error opening the file/



у меня чего то в наборе не хватает я так понимаю ??

Iska 11-08-2011 20:04 1730086

Расширение стандартной AutoIt библиотеки WinAPI.au3

madmasles 11-08-2011 20:53 1730108

Цитата:

Цитата batyaPS
При компиляции ошибка »

Как Вы считаете, я во второй строке кода дал ссылку просто так?

batyaPS 12-08-2011 09:38 1730328

Цитата:

Цитата madmasles
Как Вы считаете, я во второй строке кода дал ссылку просто так? »

я заметил, скачал, положил в папку с программой, но ошибка повторяеться

batyaPS 12-08-2011 09:57 1730333

Всё, разобрался. Окна отлавливаются, ввод логина+пароля / пароля осуществляеться.
Кнопка "Войти" не отрабатывает .

madmasles 12-08-2011 11:55 1730411

Цитата:

Цитата batyaPS
Кнопка "Войти" не отрабатывает »

Попробуйте заменить
Код:

;...
ControlClick($h_Win, '', $n_Button)
;на
ControlSend($h_Win, '', '', '{ENTER}')
;или на
ControlSend($h_Win, '', $n_Button, '{ENTER}')


batyaPS 12-08-2011 13:34 1730496

Цитата:

Цитата madmasles
Попробуйте заменить »

испробовал оба варианта.
чет не хочет нажиматься.
может задержку надо сделать ?

madmasles 12-08-2011 14:16 1730542

Цитата:

Цитата batyaPS
может задержку надо сделать ? »

Попробуйте, мне проверить негде.

batyaPS 12-08-2011 14:27 1730555

Цитата:

Цитата madmasles
может задержку надо сделать ? »
Попробуйте, мне проверить негде. »

чет не получается .
может заменить нажатие ентер на клик мыши ?

madmasles 12-08-2011 17:50 1730705

batyaPS,
Интересно, что покажет этот код при открытом окне.
Код:

$hWin = WinGetHandle('[Title:Ultr@VNC Авторизация;Class:#32770]')
If $hWin Then
    MsgBox(64, 'Info', ControlGetHandle($hWin, '', '[Class:Button;Instance:1]'))
Else
    MsgBox(16, 'Error', 'Нет окна')
EndIf


El Sanchez 12-08-2011 21:25 1730799

Цитата:

Цитата madmasles
Интересно, что покажет этот код при открытом окне. »

madmasles, дескриптор определяет. Проблема в другом, а именно в ControlGetText - возвращает пустую строку, до кнопки дело не доходит, т.к. после условия _AvtorPass()/_AvtorLogPass() вернут эррор. А так оба варианта нажатия отрабатывают.

madmasles 12-08-2011 22:23 1730822

Цитата:

Цитата El Sanchez
ControlGetText - возвращает пустую строку »

А если так попробовать:
Код:

#NoTrayIcon
#include <WinAPIEx.au3>;Yashied, http://autoit-script.ru/index.php/topic,47.0.html

Opt('MustDeclareVars', 1)
Opt('TrayMenuMode', 1)

Global $sTitleScript = @ScriptName & '{[/@$@\]}', $sTitleLogPass = '[Title:Ultr@VNC Авторизация;Class:#32770]', _
        $sTitlePass = '[Title:VNC Авторизация;Class:#32770]', $fLogPass, $fPass, $nExitItem, $msg

If WinExists($sTitleScript) Then Exit
AutoItWinSetTitle($sTitleScript)

HotKeySet('{Esc}', '_Exit')
$nExitItem = TrayCreateItem('Выход')
TraySetState()
TraySetToolTip('<VNC Авторизация>' & @LF & 'Выход - нажать кнопку "Esc"')
_WinAPI_EmptyWorkingSet()
While 1
    $msg = TrayGetMsg()
    If WinExists($sTitleLogPass) Then
        If Not $fLogPass Then
            _AvtorLogPass()
            If Not @error Then $fLogPass = True
        EndIf
    Else
        $fLogPass = False
    EndIf
    If WinExists($sTitlePass) Then
        If Not $fPass Then
            _AvtorPass()
            If Not @error Then $fPass = True
        EndIf
    Else
        $fPass = False
    EndIf
    Switch $msg
        Case 0
            ContinueLoop
        Case $nExitItem
            _Exit()
    EndSwitch
WEnd

Func _AvtorLogPass()
    Local $h_Win, $n_Log = '[Class:Edit;Instance:1]', $n_Pass = '[Class:Edit;Instance:2]', _
            $n_Button = '[Class:Button;Instance:1]', $s_Log = 'TestUser', $s_Pass = 'TestPass';свои данные поставьте
    $h_Win = WinGetHandle($sTitleLogPass)
    If Not $h_Win Then Return SetError(1)
    If Not ControlSetText($h_Win, '', $n_Log, $s_Log) Then Return SetError(1)
    If Not ControlSetText($h_Win, '', $n_Pass, $s_Pass) Then Return SetError(1)
    ControlClick($h_Win, '', $n_Button)
    If WinExists($h_Win) Then Return SetError(1)
    Return SetError(0)
EndFunc  ;==>_AvtorLogPass

Func _AvtorPass()
    Local $h_Win, $n_Pass = '[Class:Edit;Instance:1]', $n_Button = '[Class:Button;Instance:1]', _
            $s_Pass = 'TestPass';свои данные поставьте
    $h_Win = WinGetHandle($sTitlePass)
    If Not $h_Win Then Return SetError(1)
    If Not ControlSetText($h_Win, '', $n_Pass, $s_Pass) Then Return SetError(1)
    ControlClick($h_Win, '', $n_Button)
    If WinExists($h_Win) Then Return SetError(1)
    Return SetError(0)
EndFunc  ;==>_AvtorPass

Func _Exit()
    Exit
EndFunc  ;==>_Exit


El Sanchez 13-08-2011 11:53 1730971

madmasles, спасибо, работает. Мне этот код тоже пригодится.

batyaPS 15-08-2011 09:11 1732014

madmasles, большое спасибо. всё работает.

batyaPS 16-08-2011 08:48 1732823

маленькая хотелка - можно ли что бы логин и пароли брал из инишника лежащего рядом с exe?

madmasles 16-08-2011 10:01 1732855

Цитата:

Цитата batyaPS
что бы логин и пароли брал из инишника лежащего рядом с exe? »

Они зашифрованы?

batyaPS 16-08-2011 13:06 1733023

Цитата:

Цитата madmasles
Они зашифрованы? »

нет. но с шифрованием вообще предел мечтаний .

madmasles 16-08-2011 15:50 1733145

batyaPS,
Попробуйте.

batyaPS 16-08-2011 18:16 1733243

Цитата:

Цитата madmasles
Попробуйте. »

работает, только не учли, что пароли в (логин пароль) и просто пароль разные.

madmasles 16-08-2011 18:26 1733250

Цитата:

Цитата batyaPS
только не учли, что пароли в (логин пароль) и просто пароль разные. »

Это я первый раз от Вас сейчас слышу. :) Поменяю чуть позже.

batyaPS 16-08-2011 18:49 1733277

и определения окон поменяйте на
Код:

[Title: Ultr@VNC Авторизация;Class:#32770]
[Title:VNC Авторизация ;Class:#32770]

пробелы оказывается нужны (без них окно не определяеться)

madmasles 16-08-2011 20:48 1733334

batyaPS,
Поменял, проверьте. Может добавить опцию добавить - убрать автозагрузку?

batyaPS 17-08-2011 08:52 1733519

Цитата:

Цитата madmasles
Поменял, проверьте. Может добавить опцию добавить - убрать автозагрузку? »

работает чётко. автозагрузка думаю лишнее. это уже можно самому любым способом.

batyaPS 17-08-2011 11:23 1733618

есть проблема - из любого приложения по нажатию Esc закрывается программа.
можно сделать без клавиши.

madmasles 17-08-2011 12:37 1733686

Цитата:

Цитата batyaPS
можно сделать без клавиши. »



Время: 23:41.

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