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:
🔔 Приглашаем на вебинар по результатам Займера в I квартале
В следующую пятницу, 15 мая, Займер представит финансовые результаты I квартала 2026 года по МСФО. Генеральный директор Роман Макаров и...
Фото
⚡ Получайте кэшбэк за сделки
Мы запустили акцию для тех, кто давно не пользовался нашим торговым терминалом — или только хочет попробовать.  Можно получать...
😎 Дочка SOFL – лидер роста в сегменте ИБ-сервисов
Infosecurity (входит в Группу Софтлайн) получила награду от «Лаборатории Касперского». Компанию признали лидером по темпам роста в MSSP – за...
Фото
Выработка электроэнергии в РФ в марте 2026г. по Росстату и объем потребления энергии в апреле 2026г.
Росстат представил данные по выработке электроэнергии в РФ в марте 2026г.: 👉 выработка электроэнергии в РФ — 106,34 млрд кВт*ч. ( -0,7%...

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

....все тэги



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