Я собираюсь ответить с точки зрения Win32, потому что я более знаком с Win32, чем .Net Framework, и вы можете найти соответствующие функции в .Net Framework или использовать P / Invoke для вызова этих функций Win32.
Я предполагаю, что вы знаете следующее:
- Идентификатор процесса приложения X.
- Имя (или текст) или Windows 1, 2, 3, и что эти окна имеют уникально идентифицируемый текст.
Если вы не знаете идентификатор процесса, вам нужно перечислить процессы и сравнить имя каждого процесса с приложением X, и когда вы получите совпадение, тогда вы знаете идентификатор процесса.
Чтобы найти три окна, первое, что нам нужно сделать, это найти окна верхнего уровня с идентификатором процесса. Одним из них будет предок подокон.
Перечислить все окна, используя EnumWindows (); Во время перечисления запишите все окна (их может быть несколько), в которых есть искомый идентификатор процесса.
Имея список окон, соответствующий идентификатору процесса, вам необходимо проверить все потомки каждого окна в этом списке. Вы можете сделать это с помощью EnumChildWindows (); Убедитесь, что вы делаете все дочерние окна дочерних окон и т. Д., Пока их больше нет. Таким образом, вы будете закрывать все окна в процессе. Для каждого найденного вами окна сравните его с известным текстом подокнов, которые вы ищете. Когда вы получаете магазин спичек, который где-то находится в HWND, вы можете его использовать.
Теперь, когда у вас есть HWND, я предполагаю, что вы можете превратить их в .Net используемые элементы управления Windows.
Я сделал быстрый поиск, похоже, что EnumWindows не является частью .Net Framework, поэтому вам придется использовать P / Invoke для этой работы. Возможно, вам будет проще написать вспомогательную функцию на C / C ++, которая выполняет весь поиск и просто передает HWND в массиве - таким образом, вам нужно вызвать только одну функцию через P / Invoke и всю работу для этого. поиск может быть выполнен в C / C ++, где непосредственный вызов Win32 будет более простым.