Огромное спасибо!
Модифицировал скрипт, добавил функционал перебора серверов
Функционал данной модификации:
с 9:50 по 0:00 МСК поддерживает соединение;
поддержка соединения работает только в рабочие дни Московской биржи;
вводит логин и пароль и соединяется с сервером;
с первой попытки пытается соединиться с сервером по умолчанию,
при неудаче начинает перебор с первого по последний по кругу.
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
dt=os.date("!*t",os.time()+GMT3)
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
return true
end
Работает на 8.9.0.107
Не забудьте обновить библиотеку w32.dll из первого поста, она изменилась.