Получение caption-ов\тайтлов всех запущенных приложений - C#
Формулировка задачи:
Добрый день. Нужно получить тайтлы для всех запущенных приложений, у которых они есть. Сейчас пользуюсь этим :
Process.MainWindowTitle, и все бы прекрасно, только она не выводит тайтлы неактивных окон хрома и ФФ.
Так вот, товарищи, не подскажите, как бы мне это реализовать в консольном приложении? В гугл не отсылайте, был там. Форум тоже изучал(и даже нашел готовое решение для хрома на WinAPI, но оно не работало)
Решение задачи: «Получение caption-ов\тайтлов всех запущенных приложений»
textual
Листинг программы
- class Program
- {
- private static void Main(string[] args)
- {
- foreach (KeyValuePair<IntPtr, string> window in OpenWindowGetter.GetOpenWindows())
- {
- IntPtr handle = window.Key;
- string title = window.Value;
- Console.WriteLine("{0}: {1}", handle, title);
- }
- Console.ReadLine();
- }
- }
- /// <summary>Contains functionality to get all the open windows.</summary>
- public static class OpenWindowGetter
- {
- /// <summary>Returns a dictionary that contains the handle and title of all the open windows.</summary>
- /// <returns>A dictionary that contains the handle and title of all the open windows.</returns>
- public static IDictionary<IntPtr, string> GetOpenWindows()
- {
- IntPtr shellWindow = GetShellWindow();
- Dictionary<IntPtr, string> windows = new Dictionary<IntPtr, string>();
- EnumWindows(delegate (IntPtr IntPtr, int lParam)
- {
- if (IntPtr == shellWindow) return true;
- if (!IsWindowVisible(IntPtr)) return true;
- int length = GetWindowTextLength(IntPtr);
- if (length == 0) return true;
- StringBuilder builder = new StringBuilder(length);
- GetWindowText(IntPtr, builder, length + 1);
- windows[IntPtr] = builder.ToString();
- return true;
- }, 0);
- return windows;
- }
- private delegate bool EnumWindowsProc(IntPtr IntPtr, int lParam);
- [DllImport("USER32.DLL")]
- private static extern bool EnumWindows(EnumWindowsProc enumFunc, int lParam);
- [DllImport("USER32.DLL")]
- private static extern int GetWindowText(IntPtr IntPtr, StringBuilder lpString, int nMaxCount);
- [DllImport("USER32.DLL")]
- private static extern int GetWindowTextLength(IntPtr IntPtr);
- [DllImport("USER32.DLL")]
- private static extern bool IsWindowVisible(IntPtr IntPtr);
- [DllImport("USER32.DLL")]
- private static extern IntPtr GetShellWindow();
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д