← Назад

Получение времени сервера для QUIK.

У меня есть такое предложение.

А почему бы не получать время сервера из Статусбара QIUK?

Если кому интерсно, у меня это уже сделанно. И работает безотказно.

C# + WinApi

Комментарии (14)

Вход или Создать аккаунт, Войдите или зарегистрируйтесь, чтобы оставить комментарий

Mikhail Sukhov
Mikhail Sukhov

Выкладывай. А какую проблему это решит?

HaMMeR
HaMMeR Автор

using System; using System.Diagnostics; using System.Linq; using System.Text.RegularExpressions; using ManagedWinapi.Windows;

internal static class ServerTime { //Экземпляр Статусбара private static readonly SystemWindow StatusBar;

   static ServerTime()
    {
        //Поличаем список всех процессов
        Process[] processlist = Process.GetProcesses();

       //Находим процесс QUIK
        Process infoExe = processlist.Single(process =>

(process.ProcessName == "info"));

       //Получаем обработчик окна QUIK
        var swnd = new SystemWindow(infoExe.MainWindowHandle); //

msctls_statusbar32

       //Находим Статусбар
        StatusBar = swnd.AllChildWindows.Single(window =>

(window.ClassName.Equals("msctls_statusbar32"))); }

   public static DateTime GetServerTime()
    {
        //Начальная инициализация времени сервера
        //Берем текушее время
        DateTime serverTime = DateTime.Now;
        DateTime wndSrvTime = serverTime;

       //Текст статусбара
        String srvTimeString = StatusBar.Content.LongDescription;
        try
        {
            String dateTime = "";

           //Успользуем регулярное выражение, чтобы найти время
            var regexObj = new Regex(@"\d\d:\d\d:\d\d");
            Match matchResult = regexObj.Match(srvTimeString);
            if (matchResult.Success)
            {
                dateTime = matchResult.Value;
            }

           //Успользуем регулярное выражение, чтобы найти дату
            regexObj = new Regex(@"\d\d[/.]\d\d[/.]\d\d\d\d");
            matchResult = regexObj.Match(srvTimeString);
            if (matchResult.Success)
            {
                dateTime = matchResult.Value + " " + dateTime;
            }
            wndSrvTime = DateTime.Parse(dateTime);
        }
        catch (ArgumentException)
        {
            // Syntax error in the regular expression
        }
        catch(FormatException)
        {
            //
        }

       return wndSrvTime;
    }
}
HaMMeR
HaMMeR Автор

Не надо будет волноваться о синхрнизации премени компютера с временем на бирже.

А еще можно получить премя используя портфель и QPILE.

takanaev
takanaev

Так вроде QPILE-скрипт запускается каждые n секунд, думаю, не вариант.

HaMMeR
HaMMeR Автор

Я согласен с вами и нашел алтернативный вариант. Который у меня безотказно работает.

ddd888
ddd888

Интересно, а какую еще информацию можно "выудить" таким образом из квика?

HaMMeR
HaMMeR Автор

А что именно вам надо?

ddd888
ddd888

Если б знать, что возможно, то тогда и спрос соответствующий появился бы. :) Да вопросов возникает куча, на самом деле. Хотя бы, например, какие таблицы открыты или насколько корректно происходит обновление информации - нет ли запаздываний в приеме данных. Каков статус соединения с брокером и т.д.

HaMMeR
HaMMeR Автор

Можно например получить

  • какие таблицы открыты
  • статус соединения с брокером

Да и много чего. Можно с примером поиграть. В режиме Debug постаь точку остановки и посмотри swnd.AllChildWindows, думаю найдеш мнсого чего интересного.

ddd888
ddd888

Супер! На досуге надо будет обязательно "поковыряться". :)

takanaev
takanaev

Сейчас если открыта закладка, в которой нет таблицы экспорта (они в другой закладке), то возникает ошибка. Очень полезно будет создать механизм открытия той закладки, которая необходима типа new QuikTrader(quikPath, zakladkaName, ddeServer, dllName);

HaMMeR
HaMMeR Автор

Какая закладка? Вы имейте ввиду закладка в QIUK-е , они в принцыпе фальшивые и не имеет значение какя закладка выбрана. Какую именно ошибка у вас вазникает?

E G
E G

В вашем примере используется директива using ManagedWinapi.Windows

Я что-то не могу найти библиотек такую, не подскажите где ее можно скачать?

E G
E G

Все нашел, спасибо.