masyura

Автоматическая авторизация в Альфа-Директ

В Stock# коннектор для Альфа-Директ добавил возможность автоматической авторизации в терминале.

Весь код находится в свободном доступe на CodePlex.

Пример использования данной функциональности есть в Alfa/Samples/AlfaTest — задать свой логин и пароль, поставить галку AutoLogin и кликнуть Connect.

С точки зрения пользователя, после вызова _trader.Connect() вызываем ((AlfaTrader)_trader).Login(textBoxLogin.Text, textBoxPassword.Text), которому передаем данные для авторизации.



Для интересующихся реализацией краткое описание:
  • Все взаимодействие с окнами Альфа-Директ осущеаствляется посредством SystemWindow из библиотеки Managed Windows API.
  • Обработка авторизации происходит в отдельном потоке, используем ThreadPool из System.Threading.ThreadPool.QueueUserWorkItem(obj => new AlfaTerminal().Login(login, password, this));
  • AlfaTerminal — класс, в котором заложена вся логика авторизации, метод Login.
  • Далее проверям подключен ли терминал «if(trader.IsConnected)». Если подключен, то просто выходим, если нет, то при данном запросе он запуститься автоматически, так как будет создана сущность ADLite.Interop.
  • Ищем процесс альфа-директа — Process.GetProcessesByName(_processName). Он нам необходим для получения списка всех дочерних окон приложения.
  • При запуске терминала у нас автоматически появляется окно авторизации. Поиск нужного окна осуществляется через SystemWindow.AllChildWindows по параметрам ClassName и Title.
  • Для поиска окон реализованы различные вспомогательные функции — WaitForOpen, GetAlfaWindows, GetLoginWindows..
  • Нажатие кнопки OK осуществляется через отправку сообщения о нажатии левой кнопки мыши по центру кнопки: var buttonOkCtrl = loginWindow.AllChildWindows.First(w => w.Title == «OK»); var coords = WinApi.MakeParam(buttonOkCtrl.Size.Width / 2, buttonOkCtrl.Size.Height / 2); buttonOkCtrl.SendMessage(WM.LBUTTONDOWN, 0x0001, coords); buttonOkCtrl.SendMessage(WM.LBUTTONUP, 0, coords);
  • Далее дожидаемся пока подключится терминал:WaitFor(() => trader.IsConnected, «Альфа-Директ подключен», 180);
  • Находим окно приветствия и закрываем его: var welcomeWnd = WaitForOpen(() => GetWelcomeWindows(process), «Окно успешной авторизации»); welcomeWnd.SendClose();
Данная публикация является личным мнением автора. Мнение владельца сайта может не совпадать с мнением автора.
128 | ★1
1 комментарий
Wft?! Как тут вобще посты удалять?

Читайте на SMART-LAB:
Дорогая нефть повысит доходы бюджета РФ и укрепит рубль
Рост Brent выше $85 пока нельзя считать полностью устойчивым, но и сводить его только к спекуляциям вокруг Ормузского пролива уже неправильно....
Фото
Портфель Акции / Деньги (+3,5% за 12 мес) уходит в закат
Если за основной отчетный период, последние 12 месяцев, портфель PRObonds Акции / Деньги в маленьком, но плюсе, +3,5%. То за полгода с...
Фото
Топливный кризис усилил неопределенность. Что ждет экономику России в 2026 году?
В 2026 году в экономике России наблюдается сложная и неоднозначная ситуация. В первом квартале она переживала спад, а во втором — начала...
Фото
АЛРОСА на дне (18 руб за 1 акцию), но со дна продолжают стучать - есть ли шансы на иксы?
5 лет назад акции АЛРОСы стоили 150 рублей за 1 акцию и были сверхпопулярны — классный вечный сектор (все девушки любят бриллианты), большие...

теги блога Сергей Масюра

....все тэги



UPDONW
Новый дизайн