Получение 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();
    }

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


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

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

5   голосов , оценка 4 из 5
Похожие ответы