Как я могу получить дочерние окна окна, учитывая его HWND?

Я думаю, что лучшие диаграммы Flash amCharts - симпатичны, высоконастраиваемы и свободны (если Вы не возражаете против ссылки назад на amcharts.com)

26
задан Shog9 1 September 2009 в 16:24
поделиться

4 ответа

Я нашел лучшее решение - управляемый WindowsAPI . У него был элемент управления CrossHair, который можно было использовать для выбора окна (не являющийся частью вопроса), и метод AllChildWindows для получения всех дочерних окон, которые, вероятно, являются оболочкой для функции EnumChildWindows. Лучше не изобретать велосипед.

8
ответ дан 28 November 2019 в 07:04
поделиться

Используя:

internal delegate int WindowEnumProc(IntPtr hwnd, IntPtr lparam);

[DllImport("user32.dll")]
internal static extern bool EnumChildWindows(IntPtr hwnd, WindowEnumProc func, IntPtr lParam);

, вы получите обратные вызовы для переданной функции.

11
ответ дан 28 November 2019 в 07:04
поделиться

Это управляемая альтернатива EnumWindows, но вам все равно придется использовать EnumChildWindows , чтобы найти дескриптор дочернего окна.

foreach (Process process in Process.GetProcesses())
{
   if (process.MainWindowTitle == "Title to find")
   {
      IntPtr handle = process.MainWindowHandle;

      // Use EnumChildWindows on handle ...
   }
}
3
ответ дан 28 November 2019 в 07:04
поделиться

Используйте EnumChildWindows с p / invoke. Вот интересная ссылка о его поведении: https://blogs.msdn.microsoft.com/oldnewthing/20070116-04/?p=28393

Если вы не знаете дескриптор окна, но только заголовок, вам нужно будет использовать EnumWindows. http://pinvoke.net/default.aspx/user32/EnumWindows.html

6
ответ дан 28 November 2019 в 07:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: