Я разрабатываю инструмент на VB. NET для автоматизации некоторых задач другого приложения, однако я хотел бы сделать это скрытно. Я открываю редактор и затем через ShowWindow (Editor, SW_HIDE)
скрываю его окно.
Проблема в том, что в этом редакторе есть кнопка «Сохранить как», которая открывает всплывающее окно для ввода имени и Нажмите Сохранить.
Когда редактор не скрыт, он работает отлично. Однако, когда редактор скрыт, всплывающее окно не загружается (я не могу найти его дескриптор).
Можно ли как-то выполнить эту задачу, желательно со скрытым всплывающим окном тоже?
Заранее спасибо.
РЕДАКТИРОВАТЬ:
PS1: кнопку «Сохранить как» невозможно просмотреть в Spy ++, только когда я использую Inspect.
Стремясь понять разницу между ними, я нашел этот пост.
Чтение этот пост Я понял, что МСА не видит скрытых элементов.
Есть предложения для моего проекта?
Вот мой код:
Private Sub AtualizarGrafico()
Dim nomejanela As String = ""
For Each p As Process In System.Diagnostics.Process.GetProcesses
If (p.MainWindowTitle <> "") Or (p.MainWindowTitle <> " ") Then
If Mid(p.MainWindowTitle, 1, 9) = "ProfitPro" Then
nomejanela = p.MainWindowTitle
End If
End If
Next
If FindWindow(vbNullString, nomejanela) = False Then
MsgBox("A Plataforma não está aberta.")
Exit Sub
End If
Dim Profit As Integer = FindWindow(vbNullString, nomejanela) 'LEVEL 1
Dim Container As Integer = Win32.FindWindowEx(Profit, vbNullString, "MDIClient", vbNullString) 'LEVEL 1.1
Dim Editor As Integer = Win32.FindWindowEx(Container, vbNullString, "TLanguageEditorForm", vbNullString) ' LEVEL 1.1.1
Win32.ShowWindow(Editor, Win32.SW_HIDE)
Win32.SetForegroundWindow(Container)
Win32.SendMessage(Container, Win32.WM_ACTIVATE, 0, 0)
'Shortcut to open
If Editor = 0 Then
SendKeys.Send("^q")
End If
Dim EditorPainel As Integer = Win32.FindWindowEx(Editor, vbNullString, "TPanel", "EditorPanel") 'LEVEL 1.1.1.1
Dim EditorIntraPainel As Integer = Win32.FindWindowEx(EditorPainel, vbNullString, "TPanel", "EditorInnerPanel") 'LEVEL 1.1.1.1.1.1
Dim EditorEstrategia As Integer = Win32.FindWindowEx(EditorIntraPainel, vbNullString, "TLanguageEditor", "") 'LEVEL 1.1.1.1.1.1.1
Dim Painel As Integer = Win32.FindWindowEx(Editor, Nothing, "TPanel", "") 'LEVEL 1.1.1.2
Dim ToolBar As Integer = Win32.FindWindowEx(Painel, Nothing, "TTBToolBar", "ToolBar1") 'LEVEL 1.1.1.2.1
'wait 'til load the form
Thread.Sleep(1000)
Win32.SetForegroundWindow(EditorEstrategia)
Win32.SetActiveWindow(EditorEstrategia)
SendKeys.SendWait("^{HOME}") '
SendKeys.SendWait("^+{END}") '
SendKeys.SendWait("{DEL}")
SendKeys.SendWait("^v")
'ROTINA PARA SALVAR
'backSaveAs:
Dim HandleBtnSalvarComo = AutomationElement.FromHandle(ToolBar)
Dim FindSaveAs = HandleBtnSalvarComo.FindFirst(TreeScope.Children, New PropertyCondition(AutomationElement.NameProperty, "Salvar como..."))
Dim btnSaveAs As InvokePattern = DirectCast(FindSaveAs.GetCurrentPattern(InvokePattern.Pattern), InvokePattern)
btnSaveAs.Invoke()
Thread.Sleep(1000)
Dim windowSaveAs As Integer = Win32.FindWindow(vbNullString, "Salvar Como") 'LEVEL 2
Dim fieldNameSaveAs As Integer = Win32.FindWindowEx(windowSaveAs, vbNullString, "TEdit", vbNullString) 'LEVEL 2.1
'VARIÁVEL DO NOME DA ESTRATÉGIA
Win32.SendMessageT(fieldNameSaveAs, Win32.WM_SETTEXT, 0, numero_editor & "EE")
Dim HandleBtnSave = AutomationElement.FromHandle(windowSaveAs)
Dim FindSave = HandleBtnSave.FindFirst(TreeScope.Children, New PropertyCondition(AutomationElement.NameProperty, "Salvar"))
Dim btnSave As InvokePattern = DirectCast(FindSave.GetCurrentPattern(InvokePattern.Pattern), InvokePattern)
Win32.ShowWindow(Editor, Win32.SW_SHOW)
btnSave.Invoke()
End Sub