Я думаю, что лучшие диаграммы Flash amCharts - симпатичны, высоконастраиваемы и свободны (если Вы не возражаете против ссылки назад на amcharts.com)
Я нашел лучшее решение - управляемый WindowsAPI . У него был элемент управления CrossHair, который можно было использовать для выбора окна (не являющийся частью вопроса), и метод AllChildWindows для получения всех дочерних окон, которые, вероятно, являются оболочкой для функции EnumChildWindows. Лучше не изобретать велосипед.
Используя:
internal delegate int WindowEnumProc(IntPtr hwnd, IntPtr lparam);
[DllImport("user32.dll")]
internal static extern bool EnumChildWindows(IntPtr hwnd, WindowEnumProc func, IntPtr lParam);
, вы получите обратные вызовы для переданной функции.
Это управляемая альтернатива EnumWindows, но вам все равно придется использовать EnumChildWindows , чтобы найти дескриптор дочернего окна.
foreach (Process process in Process.GetProcesses())
{
if (process.MainWindowTitle == "Title to find")
{
IntPtr handle = process.MainWindowHandle;
// Use EnumChildWindows on handle ...
}
}
Используйте EnumChildWindows с p / invoke. Вот интересная ссылка о его поведении: https://blogs.msdn.microsoft.com/oldnewthing/20070116-04/?p=28393
Если вы не знаете дескриптор окна, но только заголовок, вам нужно будет использовать EnumWindows. http://pinvoke.net/default.aspx/user32/EnumWindows.html