Сообщение UI Automation Ngate Client Win QT от 31.08.2023 3:53
Изменено 31.08.2023 4:14 Разраб
UI Automation Ngate Client Win QT
Ngate Client под windows от крипто про не имеет насколько я понял возможностей мониторинга и автоподключения.
Вот решил попробовать автоматизировать.
UI Automation кнопку находит, но invoke никакого действия не производит(требуется нажатие).
т.е. вот так(F# .Net FX) кнопка только выделяется но нажатия не происходит.
Есть идеи? Еще вопрос. SendKeys работает в терминальном режиме (например в сессии тимвьюера)? У меня подозрение что как то это мониторится и не работает по хорошему.
Вот решил попробовать автоматизировать.
UI Automation кнопку находит, но invoke никакого действия не производит(требуется нажатие).
т.е. вот так(F# .Net FX) кнопка только выделяется но нажатия не происходит.
#r "UIAutomationClient.dll"
#r "UIAutomationTypes.dll"
open System.Diagnostics
open System.Windows.Automation
let ng = Process.GetProcesses() |> Array.tryFind(fun p -> p.ProcessName = "ngateclient")
let root = AutomationElement.FromHandle ng.Value.MainWindowHandle
let button_id = "MainWindow.centralWidget.tabWidget.qt_tabwidget_stackedwidget.statusTab.connectPushButton"
let btn = root.FindFirst ( TreeScope.Subtree, PropertyCondition( AutomationElement.AutomationIdProperty, button_id))
let inv = btn.TryGetCurrentPattern(InvokePattern.Pattern)
let ip = inv |> snd :?> InvokePattern
btn.SetFocus(); ip.Invoke()
Есть идеи? Еще вопрос. SendKeys работает в терминальном режиме (например в сессии тимвьюера)? У меня подозрение что как то это мониторится и не работает по хорошему.
UI Automation Ngate Client Win QT
Ngate Client под windows от крипто про не имеет насколько я понял возможностей мониторинга и автоподключения.
Вот решил попробовать автоматизировать.
UI Automation кнопку находит, но invoke никакого действия не производит(требуется нажатие).
т.е. вот так(F# .Net FX) кнопка только выделяется но нажатия не происходит.
Есть идеи? Еще вопрос. SendKeys работает в терминальном режиме (например в сессии тимвьюера)? У меня подозрение что как то это мониторится и не работает по хорошему.
Пока думаю так сделать. Но нужно будет как-то определять состояние кнопки, визуально что-то нет желания. Возможно по логу службы или по доступности хоста.
UI текст не дает.
Вот решил попробовать автоматизировать.
UI Automation кнопку находит, но invoke никакого действия не производит(требуется нажатие).
т.е. вот так(F# .Net FX) кнопка только выделяется но нажатия не происходит.
#r "UIAutomationClient.dll"
#r "UIAutomationTypes.dll"
open System.Diagnostics
open System.Windows.Automation
let ng = Process.GetProcesses() |> Array.tryFind(fun p -> p.ProcessName = "ngateclient")
let root = AutomationElement.FromHandle ng.Value.MainWindowHandle
let button_id = "MainWindow.centralWidget.tabWidget.qt_tabwidget_stackedwidget.statusTab.connectPushButton"
let btn = root.FindFirst ( TreeScope.Subtree, PropertyCondition( AutomationElement.AutomationIdProperty, button_id))
let inv = btn.TryGetCurrentPattern(InvokePattern.Pattern)
let ip = inv |> snd :?> InvokePattern
btn.SetFocus(); ip.Invoke()
Есть идеи? Еще вопрос. SendKeys работает в терминальном режиме (например в сессии тимвьюера)? У меня подозрение что как то это мониторится и не работает по хорошему.
Пока думаю так сделать. Но нужно будет как-то определять состояние кнопки, визуально что-то нет желания. Возможно по логу службы или по доступности хоста.
UI текст не дает.
#r "UIAutomationClient.dll"
#r "UIAutomationTypes.dll"
open System.Windows.Forms
open System.Diagnostics
open System.Windows.Automation
open System.Threading
Process.Start @"c:\Program Files\Crypto Pro\NGate\ngateclient.exe" |> ignore
Thread.Sleep 5_000
let ng = Process.GetProcesses() |> Array.tryFind(fun p -> p.ProcessName = "ngateclient")
let root = AutomationElement.FromHandle ng.Value.MainWindowHandle
let button_id = "MainWindow.centralWidget.tabWidget.qt_tabwidget_stackedwidget.statusTab.connectPushButton"
let btn = root.FindFirst ( TreeScope.Subtree, PropertyCondition( AutomationElement.AutomationIdProperty, button_id))
btn.SetFocus(); SendKeys.SendWait("{ENTER}")
System.Windows.Automation.AutomationElement+AutomationElementInformation
{AcceleratorKey = "";
AccessKey = "";
AutomationId = "MainWindow.centralWidget.tabWidget.qt_tabwidget_stackedwidget.statusTab.connectPushButton";
BoundingRectangle = 154;102;205;50;
ClassName = "QPushButton";
ControlType = System.Windows.Automation.ControlType;
FrameworkId = "Qt";
HasKeyboardFocus = false;
HelpText = "";
IsContentElement = true;
IsControlElement = true;
IsEnabled = true;
IsKeyboardFocusable = true;
IsOffscreen = false;
IsPassword = false;
IsRequiredForForm = false;
ItemStatus = "";
ItemType = "";
LabeledBy = null;
LocalizedControlType = "особый";
Name = "";
NativeWindowHandle = 0;
Orientation = None;
ProcessId = 7140;}