1 (2014-06-25 10:07:09 отредактировано swerg)

Тема: Автологин в QUIK (на Lua)

Установка:

В скрипте изменяем логин и пароль на нужные в следующих строках:

-- логин и пароль для терминала
QUIK_LOGIN = "7"
QUIK_PASSW = "123"

Использование:
Настраиваем вывод экрана логина QUIK сразу при запуске терминала:

https://quik2dde.ru/static-img/80/quik_autologin-01.png

https://quik2dde.ru/static-img/80/quik_autologin-02.png

Добавляем скрипт в терминал через меню Таблицы --> Lua --> Доступные скрипты
Запускаем скрипт на выполнение.

Теперь каждый раз, когда связь с сервером отсутствует и появится окно логина - скрипт обнаружит появление окна, автоматически подставит логин и пароль и подключить терминал.

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


Разумеется, для пущей секретности места хранение логина и пароля можно изменить, поправив соответствующим образом скрипт.

2

Re: Автологин в QUIK (на Lua)

Проверил:

  • логин и пароль русские работают отлично;

  • запущенный шедулером (по расписанию) QUIK успешно подключается к серверу без необходимости логина пользователя в систему.

3

Re: Автологин в QUIK (на Lua)

Посчитал что здесь будет более уместно

Нажатие на кнопках "Установить связь с..." и "Разорвать связь с..."

    -- константа из windows.h
    local WM_COMMAND = 0x0111
    -- поиск главного окна
    hWnd = w32.FindWindow("InfoClass","")
    -- нажимаем кнопку
    w32.PostMessage(hWnd,WM_COMMAND,100,0)

w32.PostMessage(hWnd,WM_COMMAND,100,0) -- нажать на кнопку "Установить связь с..."
w32.PostMessage(hWnd,WM_COMMAND,101,0) -- нажать на кнопку "Разорвать связь с..."

4

Re: Автологин в QUIK (на Lua)

AgentSmit,
А Вы не пробовали докопаться до "Таблицы" - "Lua" - "Доступные скрипты", чтобы встроить это в Автологин?
Хорошо было бы получать это окошко открытым при запуске терминала. ) Я б сделал, но пока не разобрался как до него добраться )

5

Re: Автологин в QUIK (на Lua)

sam063rus,
да, вы безусловно правы. Это пример лишь для статного квикового логина.
Но чтобы развивать далее - надо брать QUIK от конкретного брокера и на нём уже смотреть что за окна возникают, как их искать и т.д. Если у кого-то есть надобность/желание сделать автологин при двойной аутоитентификации - с удовольствием помогу, тем более, что ничего криминального в этом нет: ведь пользователь сам соглашается с тем, что у него работает автологин.

указываешь каждый раз при входе место расположения ключевого контейнера

Я надеюсь это место каждый раз одинаковое на определенном компьютере?

6

Re: Автологин в QUIK (на Lua)

Доброго здоровья,

скачал тут с Арки версию Квика 7.11.1.5, разработчики изменили окно идентификации, было

https://image.prntscr.com/image/aa714d171cfb42418f36106186d819b2.png

стало

https://image.prntscr.com/image/7d836b4f9bd544769c3768a3268009f4.png

теперь алгоритм вставляет пароль в окно логина и не нажимает никаких кнопок. Сам не могу разобраться с библиотекой, не мог бы кто переделать скрипт под новый терминал. )

Новый терминал тут http://arqatech.com/ru/support/files/

7

Re: Автологин в QUIK (на Lua)

Всё, разобрался )))

-- Автологин терминала QUIK
-- (c) http://qui2dde.ru/
-- Версия: 2.0
-- для Quik от версии 7.11.1.5

local w32 = require("w32")

-- логин и пароль для терминала
QUIK_LOGIN = "логин"
QUIK_PASSW = "пароль"

function FindLoginWindow()
  hLoginWnd = w32.FindWindow("", "Идентификация пользователя")
  if hLoginWnd == 0 then
    hLoginWnd = w32.FindWindow("", "User identification")
  end
  return hLoginWnd
end

timeout = 1000  -- таймаут между попытками поиска окна логина
is_run = true

function OnStop()
  timeout = 1
  is_run = false
end

function main()
  while is_run do
    sleep(timeout)

    if isConnected() == 0 then
  
      local hLoginWnd = FindLoginWindow()
      if hLoginWnd ~= 0 then

        local n1 = w32.FindWindowEx(hLoginWnd, 0, "", "")
        local n2 = w32.FindWindowEx(hLoginWnd, n1, "", "")
        local n3 = w32.FindWindowEx(hLoginWnd, n2, "", "")
        local n4 = w32.FindWindowEx(hLoginWnd, n3, "", "")

        w32.SetWindowText(n2, QUIK_LOGIN)
        w32.SetWindowText(n3, QUIK_PASSW)


        w32.SetFocus(n4)
        w32.PostMessage(n4, w32.BM_CLICK, 0, 0)

      end 
    end

  end
end

8

Re: Автологин в QUIK (на Lua)

GREEN_X5 пишет:

Всё, разобрался )))

А у меня психологический тромб какой-то. Был квик 7.9, сделал всё как самом верхнем сообщении. Автологин не работает.
Обновился до 7.12.1.10 - окошко авторизации чуть изменилось: появился чекбокс "запомнить имя", как на скриншоте выше, подключил подправленный скрипт из сообщения выше - не работает. Ошибок никаких не выдает.
Куда копать?

9

Re: Автологин в QUIK (на Lua)

Поставил сейчас себе  7.12.1.10, мой правленый вариант отлично работает.

10

Re: Автологин в QUIK (на Lua)

Еще раз скачал библиотеку w32.dll, скопировал скрипт в файл, подправил логин и пароль, в настройках скрипт заменил на новый, запустил, ошибок нет.
Закрыл QUIP, запускаю - по-прежнему требует пароль...
У меня брокер "Открытие", но в данном случае, думаю, он не при чем, т.к. откуда он знает, что логин и пароль вводит скрипт, а не человек...
Куда еще можно посмотреть...?

11

Re: Автологин в QUIK (на Lua)

Разобрался! (данное решение обсуждалось на другом форуме со ссылкой на эту страницу)
Ключевой момент: скрипт должен быть в кодировке cp1251, а у меня редактор при подстановке логина и пароля сохранил в UTF8 (по работе полностью перешел на данную кодировку и соответственно настроил свой софт).
Пардон за беспокойство.

12

Re: Автологин в QUIK (на Lua)

GREEN_X5 пишет:

Всё, разобрался )))

-- Автологин терминала QUIK
-- (c) http://qui2dde.ru/
-- Версия: 2.0
-- для Quik от версии 7.11.1.5

Спасибо вам за код!

13

Re: Автологин в QUIK (на Lua)

Vladisslav пишет:

скрипт должен быть в кодировке cp1251, а у меня редактор при подстановке логина и пароля сохранил в UTF8

А у вас логин или пароль на русском?
Если логин - то его не обязательно оказывать полностью (в конце статьи "Логин состоит из русских букв").

14

Re: Автологин в QUIK (на Lua)

swerg пишет:
Vladisslav пишет:

скрипт должен быть в кодировке cp1251, а у меня редактор при подстановке логина и пароля сохранил в UTF8

А у вас логин или пароль на русском?
Если логин - то его не обязательно оказывать полностью (в конце статьи "Логин состоит из русских букв").

Нет. Ни логин, ни пароль русских букв не содержат.

Подозреваю, что вот такая строка могла неправильно обрабатываться:

hLoginWnd = w32.FindWindow("", "Идентификация пользователя")

15

Re: Автологин в QUIK (на Lua)

Точно, про тексты для поиска окон я и забыл совсем.

16

Re: Автологин в QUIK (на Lua)

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