Огромное спасибо!
Модифицировал скрипт, добавил функционал перебора серверов
Функционал данной модификации:
с 9:50 по 0:00 МСК поддерживает соединение;
поддержка соединения работает только в рабочие дни Московской биржи;
вводит логин и пароль и соединяется с сервером;
с первой попытки пытается соединиться с сервером по умолчанию,
при неудаче начинает перебор с первого по последний по кругу.
-- Автологин терминала QUIK
-- (c) http://quik2dde.ru/
-- Версия: 3.3 (BlaZed Edition)
local w32 = require("w32")
QUIK_LOGIN="LOGIN" -- Логин
QUIK_PASSW="PASSWORD" -- Пароль
serv_n=-1
is_run = true
function main()
while is_run do
if(isConnected()==0)then
if(WorkTime()==true)then
QuikConnect() -- Нажать кнопку "Установить соединение с информационным сервером"
end
QuikLogin() -- Ввести Логин/Пароль и нажать кнопку "Вход"
else
serv_n=-1
end
sleep(1000)
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,"","")
if(serv_n>=0)then -- при первой попытке коннект к серверу из последнего соединения, при неудачном коннекте перебор
local serv_count=w32.SendMessage(hServe,w32.CB_GETCOUNT,0,0)
serv_n=serv_n%serv_count
w32.SendMessage(hServe,w32.CB_SETCURSEL,serv_n,0)
end
serv_n=serv_n+1
w32.SetWindowText(hLogin,QUIK_LOGIN)
w32.SetWindowText(nPassw,QUIK_PASSW)
w32.PostMessage(hWnd,w32.WM_COMMAND,1,0)
end
end
function WorkTime() -- Возвращает флаг рабочего времени
local GMT3=10800 -- Часовой пояс биржи GMT+3 Москва (3*60*60=10800 - количество секунд в 3 часах)
dt=os.date("!*t",os.time()+GMT3)
-- Торговый календарь московской биржи
-- 2021 год www.moex.com/s3196
-- true - рабочий день, false - не рабочий день, nil - проверяем день недели
local calendar={[20201231]=false,[20210101]=false,[20210107]=false,[20210220]=true,[20210223]=false,[20210308]=false,[20210503]=false,[20210510]=false,[20210614]=false,[20211104]=false,[20211231]=false}
local today=calendar[dt.year*10000+dt.month*100+dt.day]
if(today==false)or((today==nil)and((dt.wday==1)or(dt.wday==7)))then return false end
if(dt.hour*60+dt.min < 590) then return false end -- Отсекаем время до 9:50 (9*60+50=590 - количество минут с 0:00 до 9:50)
return true
end
Работает на 8.9.0.107
Не забудьте обновить библиотеку w32.dll из первого поста, она изменилась.