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

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

Установка:

  • распаковываем из [url=https://quik2dde.ru/static-img/78/w32.dll.zip]архива с библиотекой w32[/url] файл w32.dll, копируем его в каталог с терминалом QUIK (туда, где info.exe). ([url=https://quik2dde.ru/viewtopic.php?id=78]почитать подробнее про библиотеку w32[/url])

  • сохраняем [url=https://quik2dde.ru/static-img/80/quik_autologin.lua]скрипт Lua для автологина[/url] на диск (не обязательно в папку с терминалом QUIK, можно в любую другую)

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

-- логин и пароль для терминала
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

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

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

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) [url]http://qui2dde.ru/[/url]
-- Версия: 2.0
-- для Quik от версии 7.11.1.5

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

13

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

Vladisslav пишет:

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

А у вас логин или пароль на русском?
Если логин - [url=https://iquik.info/2011/09/02/user-or-server-key-not-found/]то его не обязательно оказывать полностью[/url] (в конце статьи "Логин состоит из русских букв").

14

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

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

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

А у вас логин или пароль на русском?
Если логин - [url=https://iquik.info/2011/09/02/user-or-server-key-not-found/]то его не обязательно оказывать полностью[/url] (в конце статьи "Логин состоит из русских букв").

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

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

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

15

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

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

16

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

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

17

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

Здравствуйте. Какое то время не пользовался, а сейчас обнаружил, что скрипт не срабатывает. квик версия  7.19.051

Название окно с паролем - SignalComMessagePro

QUIK_LOGIN = "pass"
local w32 = require("w32")

timeout = 500  
is_run = true

function OnStop()
  timeout = 1
  is_run = false
end

function main()
    while is_run do
        sleep(timeout)
        
        if isConnected() == 0 then
        
            -- первое окно
            local hWin = w32.FindWindow("", "SignalComMessagePro")
            if hWin ~= 0 then
            message("hello") -- тоже не срабатывает
                local hLogin = w32.FindWindowEx(hWin, 0, "", "")
                w32.SetWindowText(hLogin, QUIK_LOGIN) 
                local nBtnOk = w32.FindWindowEx(hWin, hLogin, "", "")  
                w32.SetFocus(nBtnOk)
                w32.PostMessage(nBtnOk, w32.BM_CLICK, 0, 0)
            end
            --второе окно

18

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

Скачал новую w32 - все равно не работает

19 (2020-04-15 09:49:34 отредактировано Xantrax)

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

И я подниму тему. Скачал библиотеку w32, взял оттуда библиотеку для своей 64-битной системы. Скачал luaforwindows вместе SciTe. Пишу первую же строчку кода в SciTe, пробую подключить эту библиотеку.

local w32 = require("G:\\lua\\w32")

Компилирую, он мне сразу же выдает букет ошибок,

[+]Spoiler

>lua -e "io.stdout:setvbuf 'no'" "find_window.lua"
lua: find_window.lua:2: module 'G:\lua\w32' not found:
    no field package.preload['G:\lua\w32']
    no file 'G:\lua\lua\G:\lua\w32.lua'
    no file 'G:\lua\lua\G:\lua\w32\init.lua'
    no file 'G:\lua\G:\lua\w32.lua'
    no file 'G:\lua\G:\lua\w32\init.lua'
    no file 'G:\lua\..\share\lua\5.4\G:\lua\w32.lua'
    no file 'G:\lua\..\share\lua\5.4\G:\lua\w32\init.lua'
    no file '.\G:\lua\w32.lua'
    no file '.\G:\lua\w32\init.lua'
    no file 'C:\Program Files (x86)\Lua\5.1\lua\G:\lua\w32.luac'
    no file 'G:\lua\G:\lua\w32.dll'
    no file 'G:\lua\..\lib\lua\5.4\G:\lua\w32.dll'
    no file 'G:\lua\loadall.dll'
    no file '.\G:\lua\w32.dll'
stack traceback:
    [C]: in function 'require'
    find_window.lua:2: in main chunk
    [C]: in ?
>Exit code: 1

что я делаю не так?

20

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

Пишите коротко

local w32 = require("w32")

Положите файл в ту же папку где лежит ваш запускаемый lua файл

21 (2020-04-15 09:49:04 отредактировано Xantrax)

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

GREEN_X5 пишет:

Пишите коротко

local w32 = require("w32")

Положите файл в ту же папку где лежит ваш запускаемый lua файл

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

[+]Spoiler

>lua -e "io.stdout:setvbuf 'no'" "find_window.lua"
lua: error loading module 'w32' from file 'G:\lua\w32.dll':
    Не найден указанный модуль.

22 (2020-04-15 09:58:09 отредактировано GREEN_X5)

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

Xantrax пишет:
GREEN_X5 пишет:

Пишите коротко

local w32 = require("w32")

Положите файл в ту же папку где лежит ваш запускаемый lua файл

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

[+]Spoiler

>lua -e "io.stdout:setvbuf 'no'" "find_window.lua"
lua: error loading module 'w32' from file 'G:\lua\w32.dll':
    Не найден указанный модуль.

Чудеса какие-то. Как можно не найти то что там явно есть. Или что-то косячите, или разбирайтесь с правами на папку.
Попробуйте положить файл w32 и в папку G:\lua\w32
local w32 = require("w32") напишите первой строчкой в коде.

23 (2020-04-15 09:53:07 отредактировано swerg)

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

Xantrax, уточните: у вас вопрос про компиляцию библиотеки, вы её хотите самостоятельно скомпилировать, или вопрос по использованию готовой библиотеки (.dll) в своих проектах?
Просто обсуждение вопросов компиляции хотелось бы перенести в другую ветку.

24

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

GREEN_X5 пишет:

Или что-то косячите, или разбирайтесь с правами на папку.

Слушайте, а вы правы наверное... Надо запускать SciTe с правами администратора...

25

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

swerg пишет:

Xantrax, уточните: у вас вопрос про компиляцию библиотеки, вы её хотите самостоятельно скомпилировать, или вопрос по использованию готовой библиотеки (.dll) в своих проектах?

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