Программный разрыв соединения

Страницы: 1
RSS
Программный разрыв соединения
 
Вопрос такой - Можно ли завершить соединение или закрыть Quik программно через язык Lua. Искал подобные функции, но выводит лишь isConnected, которая показывает просто результат текущего соединения - 1 или 0.
Грубо говоря при каком-то условии в скрипте нам необходимо оборвать соединение и закрыть Quik до следующего дня, например. Эти условия прогоняются при каждом открытии Quik и пока следующий день не настанет, при каждом подключении будет выдавать сообщение и автоматически закрывать.
Заранее спасибо.
 
Вот почему решения приходят после того, как напишешь сюда
Добился через командную строку
os.execute("taskkill /F /IM info.exe")
Но это через команды cmd всё же, есть ли какая-то специальная функция в арсенале библиотеки qLua?
 
os.exit()
 
Цитата
os.exit()
QUIK свалится с дампом.
Т.е. он закроется, конечно, но как-то очень некультурно.
 
Предлагаю такой вариант:
Код
-- закрыть QUIK из Lua

local w32 = require("w32")

hQuikWnd = w32.FindWindow("InfoClass", "")
w32.PostMessage(hQuikWnd, 16, 0, 0)

Библиотеку w32 брать здесь.

Правда если настроено запрашивать подтверждение завершения работы - то оно запросится.
Но можно его просто выключить в настройках. Или считать это "будет выдавать сообщение".
 
Цитата
Sergey Gorokhov написал:
os.exit()
А таки "Разорвать соединение с информационным сервером" можно программно из Lua QUIK? Отключиться от сервера на ночь.
 
Цитата
Юрий Волошин написал:
А таки "Разорвать соединение с информационным сервером" можно программно из Lua QUIK? Отключиться от сервера на ночь.
С помощью библиотеки w32 (ссылка есть выше в теме) буквально в три строчки
Код
local w32=require("w32")
local hWnd=w32.FindWindow("InfoClass","")
w32.PostMessage(hWnd,w32.WM_COMMAND,101,0)
 
Цитата
BlaZed написал:
Код
 local  w32 =  require ( "w32" )
 local  hWnd =  w32.FindWindow ( "InfoClass" ,"")
 w32.PostMessage (hWnd,w32.WM_COMMAND, 101 , 0 )  
Я не понимаю этот код (поэтому не могу его использовать в программе биржевого робота Lua QUIK -- по завету Уоррена Баффета).
Могли бы Вы чуть подробней объяснить что это за код и как он работает?
У всех ли он будет работать?
Какие подводные камни?
На сколько это кашерный код?
 
Цитата
Юрий Волошин написал:
Цитата
BlaZed написал:
 
Код
    local   w32  =   require (  "w32"  )
  local   hWnd  =   w32.FindWindow (  "InfoClass"  ,"")
 w32.PostMessage (hWnd,w32.WM_COMMAND,  101  ,  0  )    
 
Я не понимаю этот код (поэтому не могу его использовать в программе биржевого робота Lua QUIK -- по завету Уоррена Баффета).
Могли бы Вы чуть подробней объяснить что это за код и как он работает?
У всех ли он будет работать?
Какие подводные камни?
На сколько это кашерный код?
Это использование библиотеки w32.dll - функции winAPI адаптированные для работы из LUA
Поддерживает библиотеку swerg

Ссылка выше в теме есть, там и сама библиотека и ее описание и примеры.

Этот код загружает библиотеку, потом ищет хандл окна квика и тыкает кнопку разорвать соединение. Все.
 
Цитата
Юрий Волошин написал:
что это за код и как он работает
Ищет главное окно квика и имитирует нажатие кнопки отключиться. Никаких ужасов в этом нет, кроме того, что код кнопки теоретически может внезапно поменяться в какой-нибудь из новых версий квика и вместо отключения нажмется что-нибудь другое. Практически не припомню, чтобы менялись. Ну, можно еще посетовать, что w32 не до конца под 64 бита переделана, но для данной простой задачи достаточно.
 
Добавлю, что искать окно лучше через EnumThreadWindows, приведенный код может найти не свой квик, если их несколько одновременно работает.
Страницы: 1
Читают тему
Наверх