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:
Фото
EUR/USD: Линия тренда протягивает покупателям руку помощи?
Европейская валюта протестировала недельную линию восходящего тренда (проведенную через минимумы 03.02.2025 и 31.03.2026) и уровень поддержки...
Норникель вошел в Национальный доклад РСПП как пример эффективных изменений
Отдельная глава в этом исследовании посвящена анализу корпоративных практик нашей компании. Эксперты выделили три главных направления, в которых...
Фото
Совкомбанк начал покрытие акций ДОМ.PФ
Совкомбанк приступил к аналитическому покрытию акций ДОМ.PФ с рекомендацией — ПОКУПАТЬ и включением акций в топ-пик в финансовом секторе...
Фото
ИИ уничтожит российский software бизнес?
первое касание. быстрая заметка. Disclaimer: никакая часть этой заметки не написана при помощи ИИ. * в материале: = почему обрушились акции...

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

....все тэги



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