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();

Данная публикация является личным мнением автора. Мнение владельца сайта может не совпадать с мнением автора.

115 | ★1
1 комментарий
Wft?! Как тут вобще посты удалять?

Читайте на SMART-LAB:
Селигдар не будет платить дивиденды за 2025 год
Совет директоров Селигдара ожидаемо отказался от дивидендных выплат за 2025 год. Решение полностью укладывается в финансовую картину компании. По...
Фото
Топ-5 популярных фьючерсов на Мосбирже в апреле 2026
Московская биржа опубликовала итоги торгов на срочном рынке FORTS за апрель 2026 г. Максимальный практический интерес представляет...
Фото
⚡ Получайте кэшбэк за сделки
Мы запустили акцию для тех, кто давно не пользовался нашим торговым терминалом — или только хочет попробовать.  Можно получать...
Фото
Россети Московский регион. Новая инвестпрограмма увеличивает прогноз по капитальным расходам!
Сегодня Минэнерго РФ на сайте опубликовал новую инвестиционную программы (ИПР) до 2030г. (публикуют здесь ) и что же там интересного:

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

....все тэги



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