Получение caption-ов\тайтлов всех запущенных приложений - C#

Узнай цену своей работы

Формулировка задачи:

Добрый день. Нужно получить тайтлы для всех запущенных приложений, у которых они есть. Сейчас пользуюсь этим : Process.MainWindowTitle, и все бы прекрасно, только она не выводит тайтлы неактивных окон хрома и ФФ. Так вот, товарищи, не подскажите, как бы мне это реализовать в консольном приложении? В гугл не отсылайте, был там. Форум тоже изучал(и даже нашел готовое решение для хрома на WinAPI, но оно не работало)

Решение задачи: «Получение caption-ов\тайтлов всех запущенных приложений»

textual
Листинг программы
  1. class Program
  2.     {
  3.         private static void Main(string[] args)
  4.         {
  5.             foreach (KeyValuePair<IntPtr, string> window in OpenWindowGetter.GetOpenWindows())
  6.             {
  7.                 IntPtr handle = window.Key;
  8.                 string title = window.Value;
  9.  
  10.                 Console.WriteLine("{0}: {1}", handle, title);
  11.             }
  12.  
  13.             Console.ReadLine();
  14.         }
  15.     }
  16.  
  17.     /// <summary>Contains functionality to get all the open windows.</summary>
  18.     public static class OpenWindowGetter
  19.     {
  20.         /// <summary>Returns a dictionary that contains the handle and title of all the open windows.</summary>
  21.         /// <returns>A dictionary that contains the handle and title of all the open windows.</returns>
  22.         public static IDictionary<IntPtr, string> GetOpenWindows()
  23.         {
  24.             IntPtr shellWindow = GetShellWindow();
  25.             Dictionary<IntPtr, string> windows = new Dictionary<IntPtr, string>();
  26.  
  27.             EnumWindows(delegate (IntPtr IntPtr, int lParam)
  28.             {
  29.                 if (IntPtr == shellWindow) return true;
  30.                 if (!IsWindowVisible(IntPtr)) return true;
  31.  
  32.                 int length = GetWindowTextLength(IntPtr);
  33.                 if (length == 0) return true;
  34.  
  35.                 StringBuilder builder = new StringBuilder(length);
  36.                 GetWindowText(IntPtr, builder, length + 1);
  37.  
  38.                 windows[IntPtr] = builder.ToString();
  39.                 return true;
  40.  
  41.             }, 0);
  42.  
  43.             return windows;
  44.         }
  45.  
  46.         private delegate bool EnumWindowsProc(IntPtr IntPtr, int lParam);
  47.  
  48.         [DllImport("USER32.DLL")]
  49.         private static extern bool EnumWindows(EnumWindowsProc enumFunc, int lParam);
  50.  
  51.         [DllImport("USER32.DLL")]
  52.         private static extern int GetWindowText(IntPtr IntPtr, StringBuilder lpString, int nMaxCount);
  53.  
  54.         [DllImport("USER32.DLL")]
  55.         private static extern int GetWindowTextLength(IntPtr IntPtr);
  56.  
  57.         [DllImport("USER32.DLL")]
  58.         private static extern bool IsWindowVisible(IntPtr IntPtr);
  59.  
  60.         [DllImport("USER32.DLL")]
  61.         private static extern IntPtr GetShellWindow();
  62.     }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы