Поиск и работа с процессами 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, "Небезымянный");
Было: "Безымянный — Блокнот"
Стало: "Небезымянный"
Можете менять как хотите прям в цикле, но учитывайте, что:
- Не у всех процессов есть окна, но ошибки не будет, функция как раз возвращает bool в качестве ответа на успех действия.
- У каждого процесса может быть по несколько окон, в таком случае имена окон нужно искать по-другому.
- То единственное окно, что вы видите у процесса, может быть не главным окном.