QLua(Lua) - скрипт автоматической авторизации в QUIK

Автор записи: Дмитрий (Admin)
1 звезда2 звезды3 звезды4 звезды5 звезд (Голосов 5, среднее: 5,00 из 5)
Загрузка...

Двухфакторная авторизация прошла успешноДля того, чтобы постоянно вручную не вводить логин/пароль в терминале QUIK, используйте данный скрипт, написанный на языке Lua, или QLua (Lua,  интерпретированный под QUIK).

В последних версиях терминала изменилось окно ввода логина и пароля, чтобы этот скрипт мог с ним работать нужно заменить три строки 35 - 37 следующими четырьмя строками:

local hServer = w32.FindWindowEx(hLoginWnd, 0, "", "")
local hLogin = w32.FindWindowEx(hLoginWnd, hServer, "", "")
local nPassw = w32.FindWindowEx(hLoginWnd, hLogin, "", "")
local nBtnOk = w32.FindWindowEx(hLoginWnd, nPassw, "", "")

Код скрипта:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
-- Автологин терминала QUIK
-- (c) http://quik2dde.ru/
-- Версия: 1.0
 
local w32 = require("w32")
 
-- логин и пароль для терминала
QUIK_LOGIN = "MyLogin"
QUIK_PASSW = "MyPassword"
 
 
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 hLogin = w32.FindWindowEx(hLoginWnd, 0, "", "")
            local nPassw = w32.FindWindowEx(hLoginWnd, hLogin, "", "")
            local nBtnOk = w32.FindWindowEx(hLoginWnd, nPassw, "", "")
 
            w32.SetWindowText(hLogin, QUIK_LOGIN)
            w32.SetWindowText(nPassw, QUIK_PASSW)
 
            w32.SetFocus(nBtnOk)
            w32.PostMessage(nBtnOk, w32.BM_CLICK, 0, 0)
 
            while not isConnected() do sleep(10); end;
         end
      end
   end
end

Скачать скрипт (не забудьте разархивировать перед помещением в папку).

Чтобы использовать данный скрипт, нужно в директорию, в которой установлен терминал QUIK, поместить библиотеку w32.dll, скачать которую можно по данной ссылке (не забудьте разархивировать перед помещением в папку).

Если Вы не знаете как запустить скрипт в торговом терминале QUIK, ознакомьтесь с данной статьей.

Если у Вас появились какие-то вопросы, задайте их в комментариях под статьей !!!

Скрипт взят здесь.

Добавить комментарий

QLua(Lua) - скрипт автоматической авторизации в QUIK: 47 комментариев

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

    1. Здравствуйте! Теоретически можно, но на это нужно время, можете сделать заказ, или сами разобраться в работе с окнами через WinAPI. Сразу скажу, что библиотека w32.dll не предоставляет весь необходимый функционал, так что придется делать новую dll.

  2. Привет. Работал исправленный скрипт до сегодня, а сегодня терминал запрашивает у меня пароль в ручном режиме, версия 7.12.1.10. Опять что то менять в коде надо?

      1. Я по своим темам его немного этот код переписал, НО взял опять исходный код и опять что то сделал - по сути все как есть - в принципе как есть должно работать как у Дмитрия(Админа) - здесь на сайте - Крутой - он чувак. Дима - тебе - Привет.

  3. Привет, сегодня столкнулся с такой штукой - сервер рухнул (подключения не было) позвонил в поддержку сказали - подключитесь к другому серверу, стало все норм. Вопрос - можно это сделать в данном скрипте т.е если какое то время не подключается к текущему серверу то подключаться к другому?

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

  4. Можно полюбопытствовать, для чего нужна библиотека w32.dll и почему её изначально нет в ОС? Не люблю запускать код, назначение которого не понимаю.

    1. Это самописный скрипт одного из Гуру с другого сайта (смотрите ссылку "скрипт взят здесь"). Если не доверяете, то не ставьте и не запускайте. Есть альтернативные программы по запуску любых программ. Например Autoit. ссылка на википедию: https://ru.wikipedia.org/wiki/AutoIt

  5. Дмитрий, благодарю за совет...
    Оказывается у меня были сертифицированные ключи, в службе поддержки все разъяснили так: "Для этого Вам необходимо отказаться от использования сертифицированных ключей,
    сгенерировать ключи с помощью программы KeyGen, которая находится в папке терминала Квик и выслать нам ключ pubring на регистрацию.
    Теперь терминал запускается через логин и пароль...Сейчас попробую программу по автозапуску...

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

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

        2. У Кит Финанса так работает:

          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          13
          14
          15
          16
          17
          18
          19
          20
          21
          22
          
           local w32 = require('w32')
           
          function main()
          	while IS_RUN do	
          		if isConnected() == 0 then
          			local windowId = w32.FindWindow('', 'Установка сетевого соединения (SSL-PRO)')
          			if windowId ~= 0 then
          				local button = w32.FindWindowEx(windowId, 0, '', '&Ввод')
          				w32.PostMessage(button, w32.BM_CLICK, 0, 0)
          			end
          			local windowId = w32.FindWindow('', 'SignalComMessagePro')
          			if windowId == 0 then windowId = w32.FindWindow('', 'SignalComSSLPro') end;
          			if windowId ~= 0 then
          				local password = w32.FindWindowEx(windowId, 0, '', '')
          				local button = w32.FindWindowEx(windowId, password, '', '')
          				w32.SetWindowText(password, 'пароль')
          				w32.PostMessage(button, w32.BM_CLICK, 0, 0)				
          			end
          		end
          		sleep(500)
          	end
          end

          Если у вас другие заголовки окон и кнопок - SignalComMessagePro, SignalComSSLPro, Установка сетевого соединения (SSL-PRO), &Ввод, нужно будет изменить их соответствующим образом, также вместо слова "пароль", подставить ваш пароль.

  7. Добрый день!
    Сегодня попался ваш сайт, сайт отличный просто. Есть много что почитать.
    Есть только просьба: проставьте активные ссылки на исходные темы форума, где взята информация. В том числе и про w32 библиотеку.
    В самом деле: там ведь много полезного есть, не надо жадничать.
    А вам удачи! Материалов по C# - у вас просто горы.

  8. Этот скрипт может помочь в решения обрыва связи с сервером брокера?
    Например сегодня было несколько обрывов соединения с брокером во время работы робота, причем робот был в позиции, а меня рядом нет, вернусь вечером, а там уже маржинколл.
    То есть задача скрипта после того как он заметил, что связь с сервером прервалась - подключиться и залогиниться.
    И еще, возможно чтобы этот скрипт запускался вместо с квиком сам?

    1. Этот скрипт не я писал, там в скрипте написан источник в начале. А вообще терминал сам инициализирует новое подключение, когда разрыв связи произошел, если галочка стоит:
      Изображение:

      В QLua нет такой функции подключения, если только через winapi опять же, из QLua можно только узнать подключен ли в данный момент терминал, при помощи функции isConnected().
      Любой скрипт QLua будет запускаться автоматически с терминалом, если Вы его не выключаете перед закрытием терминала.

        1. да
          замените вот так:

          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          
          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)
          sleep(5000)