Есть несколько проблем с вашим кодом.
окно редактора, которое вы ищете, является дочерним MDI, поэтому вам нужно получить HWND
его родителя MDIClient
окно первое, чего вы не делаете.
в вашем последнем вызове FindWindowEx()
вы передаете текст редактора в параметре lpszClass
вместо параметра lpszWindow
.
вы не всегда можете передать дочернее окно в SetForegroundWindow()
. Поскольку вы знаете, что редактор - это ребенок MDI, вам следует дать MDI указание сосредоточиться на редакторе, если это именно то, что вы пытаетесь сделать.
Попробуйте вместо этого:
Sub Find_Window
Dim Profit As IntPtr = Win32.FindWindow("TProfitChartForm", "ProfitPro - 5.0.0.35 - Registrado")
Dim MDI As IntPtr = Win32.FindWindowEx(Profit, IntPtr.Zero, "MDIClient", "")
Dim Editor As IntPtr = Win32.FindWindowEx(MDI, IntPtr.Zero, "TLanguageEditorForm", "Editor de Estratégias")
If Editor <> 0 Then
Win32.SetForegroundWindow(Profit)
Win32.SendMessage(MDI, WM_MDIACTIVATE, Editor, 0)
' TODO: add this
' Dim ChildTextFieldInsideOfEditor as IntPtr = Win32.FindWindowEx(Editor, ...)
' Dim ThisThreadId = Win32.GetCurrentThreadId()
' Dim EditorThreadId as Integer = Win32.GetWindowThreadProcessId(Editor, ref ProcID)
' Win32.AttachThreadInput(ThisThreadId, EditorThreadId, True);
' Win32.SetFocus(ChildTextFieldInsideOfEditor)
' Win32.AttachThreadInput(ThisThreadId, EditorThreadId, False);
SendKeys.Send("{TAB}")
End If
End Sub