Поиск и работа с процессами C#

Я получаю список всех процессов с нужным мне названием, есть ли возможность поменять название окон этих процессов, например на их ID. И менять фокус на эти окна.

Process[] localByName = Process.GetProcessesByName("notepad");
        for (int i = 0; i<localByName.Length; i++)
        {
            comboBox1.Items.Add(localByName[i].ProcessName.ToString() + " ID_" + localByName[i].Id.ToString());
        }

Ответы (1 шт):

Автор решения: Blackmeser

using System.Runtime.InteropServices;

Извлечение списка с именами и id окон процессов:

Process[] processlist = Process.GetProcesses();
foreach (Process process in processlist)
{
    if (!String.IsNullOrEmpty(process.MainWindowTitle))
    {
        Console.WriteLine("Process: {0} ID: {1} WindowHandle {2} Window title: {3}", process.ProcessName, process.Id, process.MainWindowHandle, process.MainWindowTitle);
    }
}

Подключение WinAPI функции для изменения имени окна

[DllImport("user32.dll")]
static extern bool SetWindowText(IntPtr hWnd, string text);

Например у меня есть окно:
Process: notepad ID: 20200 WindowHandle 1708798 Window title: Безымянный — Блокнот
Вызываю функцию:

SetWindowText((IntPtr)1708798, "Небезымянный");

Было: "Безымянный — Блокнот"
Стало: "Небезымянный"

Можете менять как хотите прям в цикле, но учитывайте, что:

  1. Не у всех процессов есть окна, но ошибки не будет, функция как раз возвращает bool в качестве ответа на успех действия.
  2. У каждого процесса может быть по несколько окон, в таком случае имена окон нужно искать по-другому.
  3. То единственное окно, что вы видите у процесса, может быть не главным окном.
→ Ссылка