Re: Автологин в QUIK (на Lua)
Вопрос: может быть у вас с библиотекой что-то не так?
У нас всё так, всё работает уже много лет )
Не нашел как тут прицепить файл к сообщению, хотел готовый w32 дать на пробу.
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
QUIK -> DDE → Автоматизация терминала QUIK внешними средствами → Автологин в QUIK (на Lua)
Вопрос: может быть у вас с библиотекой что-то не так?
У нас всё так, всё работает уже много лет )
Не нашел как тут прицепить файл к сообщению, хотел готовый w32 дать на пробу.
У нас всё так, всё работает уже много лет )
Товарищи, простите меня, я вчера бился бился, ничего не работало, а сегодня все чудным образом заработало.(( Потрите мой флуд и мои сообщения.
Добрый день, а с QUIK 8.3.2.4
автозапуск работает?
Добрый день, а с QUIK 8.3.2.4
автозапуск работает?
Да. Прямо сейчас у меня работает.
Добрый день, а с QUIK 8.3.2.4
автозапуск работает?
Да. Только теперь другой вопрос, при обрыве связи:
1) сам нажимаешь кнопку разъединения;
2) отключаешь вай-фай на время, а потом снова подключаешь.
сам терминал не показывает окно логина, не пытается восстановить соединение (галочка в настройках стоит как в первом топике).
И еще вопрос:
Вот эта функция в скрипте
она где применяется?
Товарищи, помогите пожалуйста.
После автологина появляется сообщение о том, что сообщение успешно установлено.[url=https://ibb.co/BBYQ7n5][/url]
Указатель на окно получил, а дальше как? Попробовал также как и с автологином, получить указатели на элементы окна функцией FindWindowEx, но толи кол-ко элементов не то, толи к ним нельзя так обращаться. Как закрыть окно?)
отключить в настройках его появление проще всего.
Люди добрые, подскажите пожалуйста, сделал все как написано, винда 64х битная
Запускаю макрос луа, выдает ошибку
error loading module 'w32' from file 'M:\Sergey\Program\QuikFinam-bid\w32.dll':
Не найдена указанная процедура.
Сам файл там лежит, взял именно 64х битную
Запустил с правами администратора, на всякий случай
Раньше пользовался на винде 32х битной, все работало шикарно, вот теперь при переходе на квик 8.5 какие-то непонятнки (
Запускаю макрос луа, выдает ошибку
error loading module 'w32' from file 'M:\Sergey\Program\QuikFinam-bid\w32.dll':
Не найдена указанная процедура.
Пробуйте, у меня тоже с начала не получалось, но потом чудесным образом скрипт запустился.
SergD пишет:Запускаю макрос луа, выдает ошибку
error loading module 'w32' from file 'M:\Sergey\Program\QuikFinam-bid\w32.dll':
Не найдена указанная процедура.Пробуйте, у меня тоже с начала не получалось, но потом чудесным образом скрипт запустился.
А что пробовать? Как вчера не работало, так и сегодня ) Все вроде по инструкции делаю, и файл она видит, но вот не работает
Попробовал создать скрипт из одной строки: local w32 = require("w32")
Все равно та же ошибка
error loading module 'w32' from file 'M:\Sergey\Program\QuikFinam-bid\w32.dll':
Не найдена указанная процедура.
Все равно та же ошибка
error loading module 'w32' from file 'M:\Sergey\Program\QuikFinam-bid\w32.dll':
Библиотека точно лежит в одной папке со скриптом?
отключить в настройках его появление проще всего.
Не подскажете, где это в настройках. Я подозреваю, что в "Система - Настройки - Основные настройки - Сообщения - Оповещения", снять галочку Показывать уведомления. Но... Не затроент ли изменение этого пункта какие-нибудь другие оповещения?
SergD пишет:
Все равно та же ошибка
error loading module 'w32' from file 'M:\Sergey\Program\QuikFinam-bid\w32.dll':Библиотека точно лежит в одной папке со скриптом?
Да точно, я ее и в папку скрипта клал, в папку квика, в windows\system32
Все равно одно и тоже пишет
SergD пишет:
Все равно та же ошибка
error loading module 'w32' from file 'M:\Sergey\Program\QuikFinam-bid\w32.dll':Библиотека точно лежит в одной папке со скриптом?
Причем точно такая же ситуация повторяется на ноутбуке с виндой 64х битной. Сначала думал может первая ситуация была проблемная из-за сервера 2016.
Квик 8.5, файл луа лежит lua53.dll
Помогите пожалуйста разобраться, откуда ноги растут , не понимаю
Квик 8.5, файл луа лежит lua53.dll
Помогите пожалуйста разобраться, откуда ноги растут , не понимаю
из квика 8.5. w32.dll у вас, скорее всего, для lua 5.1. попробуйте с предыдущим квиком. квик 8.5 очень сырой и глючный.
SergD пишет:Квик 8.5, файл луа лежит lua53.dll
Помогите пожалуйста разобраться, откуда ноги растут , не понимаюиз квика 8.5. w32.dll у вас, скорее всего, для lua 5.1. попробуйте с предыдущим квиком. квик 8.5 очень сырой и глючный.
В QUIK 8.5 уже LUA 5.3. w32.dll для 5.1 работать не будет.
Используя опыт авторов автологина на сайте quik2dde ru и bot4sale ru/download-categories/2012-06-13-15-10-36/item/avtologin-dlya-quik.html
доработал макрос autologin таким образом:
сделал определение, какая версия квика, так что работает как на 7й версии (32х, использует старую библиотеку w32) так и на 8й (х64, использует новую библиотеку bot4sale64.dll)
1) прежде чем нажать на "ОК" он делает небольшую паузу, чтобы можно было выбрать другой сервер
2) после подключения, выдает сообщение, к какому серверу подключился (к сожалению, работает только на версии 7 с библиотекой w32, т.к. в новой библиотеке bot4sale64.dll не нашел функции w32.GetWindowTe xt, буду признателен, если добавите такую функцию в Вашу библиотеку)
3) выдает сообщения, если связь потеряна
4) в папке квика создает текстовый файл _time_when_conn ect в который записывает время подключения (у меня это используется для других макросов)
Выложил архив здесь denegin ru/files/autologin.rar
Можно использовать в любых целях без упоминания авторства
Квик 8.5, файл луа лежит lua53.dll
Помогите пожалуйста разобраться, откуда ноги растут , не понимаю
В QUIK 8.5 уже LUA 5.3. w32.dll для 5.1 работать не будет.
Сборка библиотеки w32 обновлена, теперь она совместима и с QUIK 8.5/
Ссылки в первом сообщении темы
Здравствуйте, подскажите,у меня почемуто скрипт в поле логина сначала логин подставляет а потом ту даже и пароль. Соотвестственно не могу соедениться по нему
Версия 8.6
Здравствуйте, подскажите,у меня почемуто скрипт в поле логина сначала логин подставляет а потом ту даже и пароль. Соотвестственно не могу соедениться по нему
Версия 8.6
Вроде все работает.
Значит в самом скрипте в этих строках где-то ошибка:
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)
266157921 пишет:Здравствуйте, подскажите,у меня почемуто скрипт в поле логина сначала логин подставляет а потом ту даже и пароль. Соотвестственно не могу соедениться по нему
Версия 8.6Вроде все работает.
Значит в самом скрипте в этих строках где-то ошибка: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)
я не разбираюсь в этом, вот как у меня:
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)
end
end
end
end
я не разбираюсь в этом, вот как у меня:
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) end end end end
По ссылке в первом сообщении нерабочий скрипт. Нужно поменять функцию main
function main()
while is_run do
sleep(timeout)
if isConnected() == 0 then
local hWnd = FindLoginWindow()
if hWnd ~= 0 then
local hLoginWnd = w32.FindWindowEx(hWnd, 0, "", "")
local hLogin = w32.FindWindowEx(hWnd, hLoginWnd, "", "")
local nPassw = w32.FindWindowEx(hWnd, hLogin, "", "")
local nBtnOk = w32.FindWindowEx(hWnd, nPassw, "", "")
w32.SetWindowText(hLogin, QUIK_LOGIN)
w32.SetWindowText(nPassw, QUIK_PASSW)
w32.SetFocus(nBtnOk)
w32.PostMessage(nBtnOk, w32.BM_CLICK, 0, 0)
end
end
end
end
Долгое время уже пользуюсь скриптом от swerg'а
Немного модифицировал его под себя и добавил функционала, думаю другим тоже может пригодится.
Добавил поддержку соединения, учитывающую выходные и праздничные дни и время работы биржи, так как встроенные возможности QUIK не устраивали.
Ну и "причесал" код, как мне это нравится.
-- Автологин терминала QUIK
-- (c) http://quik2dde.ru/
-- Версия: 3.0 (BlaZed Edition)
local w32 = require("w32")
QUIK_LOGIN="ЛОГИН" -- Логин
QUIK_PASSW="ПАРОЛЬ" -- Пароль
START_HOUR=9 -- Время начала поддержки соединения, часы
START_MIN=50 -- Время начала поддержки соединения, минуты
TIMEOUT=1000 -- Таймаут между проверками соединения, мс
is_run = true
function main()
while is_run do
if(isConnected()==0)then
if(WorkTime()==true)then
QuikConnect() -- Нажать кнопку "Установить соединение с информационным сервером"
end
QuikLogin() -- Ввести Логин/Пароль и нажать кнопку "Вход"
end
sleep(TIMEOUT)
end
end
function OnStop()
is_run=false
return 100
end
function QuikConnect() -- Нажать кнопку "Установить соединение с информационным сервером"
local hWnd=w32.FindWindow("InfoClass","")
if hWnd~=0 then
w32.PostMessage(hWnd,w32.WM_COMMAND,100,0)
end
end
function QuikLogin() -- Ввести Логин/Пароль и нажать кнопку "Вход"
local hWnd=w32.FindWindow("", "Идентификация пользователя")
if hWnd==0 then hWnd=w32.FindWindow("", "User identification") end
if hWnd~=0 then
local hServe=w32.FindWindowEx(hWnd,0,"","")
local hLogin=w32.FindWindowEx(hWnd,hServe,"","")
local nPassw=w32.FindWindowEx(hWnd,hLogin,"","")
local nBtnOk=w32.FindWindowEx(hWnd,nPassw,"","")
w32.SetWindowText(hLogin,QUIK_LOGIN)
w32.SetWindowText(nPassw,QUIK_PASSW)
w32.SetFocus(nBtnOk)
w32.PostMessage(nBtnOk,w32.BM_CLICK,0,0)
end
end
function WorkTime() -- Возвращает флаг рабочего времени
local GMT3=3*60*60 -- Часовой пояс биржи GMT+3 (Москва)
local dt=os.date("!*t",os.time()+GMT3)
-- Суббота и воскресенье - нерабочие дни
if(dt.wday==1)or(dt.wday==7)then return false end
-- Нерабочие дни смотрим в торговом календаре на московской бирже
if(dt.year==2020)and(dt.month==01)and(dt.day==01)then return false end -- 1 января 2020
if(dt.year==2020)and(dt.month==01)and(dt.day==02)then return false end -- 2 января 2020
if(dt.year==2020)and(dt.month==01)and(dt.day==07)then return false end -- 7 января 2020
if(dt.year==2020)and(dt.month==02)and(dt.day==24)then return false end -- 24 февраля 2020
if(dt.year==2020)and(dt.month==03)and(dt.day==09)then return false end -- 9 марта 2020
if(dt.year==2020)and(dt.month==05)and(dt.day==11)then return false end -- 11 мая 2020
if(dt.year==2020)and(dt.month==06)and(dt.day==24)then return false end -- 24 июня 2020
if(dt.year==2020)and(dt.month==07)and(dt.day==01)then return false end -- 1 июля 2020
if(dt.year==2020)and(dt.month==11)and(dt.day==04)then return false end -- 4 ноября 2020
-- Отсекаем время "до" начала поддержки соединения
if(dt.hour<START_HOUR)or((dt.hour==START_HOUR)and(dt.min<START_MIN))then return false end
return true
end
На данный момент скрипт работает на QUIK 8.8.4.3
calendar=
{
[1] = true, [7] = true,
[20200101] = true,
}
function WorkTime() -- Возвращает флаг рабочего времени
local GMT3=3*60*60 -- Часовой пояс биржи GMT+3 (Москва)
local dt=os.date("!*t",os.time()+GMT3)
if calendar[dt.wday] then return false end
local d = tonumber(os.date("%Y%m%d", os.time(dt)))
if calendar[d] then return false end
-- Отсекаем время "до" начала поддержки соединения
if(dt.hour<START_HOUR)or((dt.hour==START_HOUR)and(dt.min<START_MIN))then return false end
return true
end
QUIK -> DDE → Автоматизация терминала QUIK внешними средствами → Автологин в QUIK (на Lua)
Форум работает на PunBB, при поддержке Informer Technologies, Inc