Получение “Истинного имени” процесса

186
13 октября 2017, 12:54

Для программы понадобилось получить "истинное имя процесса" под этим я подразумеваю человеческое описание программы как в диспетчере задач:

Как видно отображается красивое название открытой консоли Git "Git for Windows". Я использую стандартную библиотеку user32.dll и функции из нее:

[DllImport("user32.dll")]
public static extern IntPtr GetForegroundWindow();
public static extern UInt32 GetWindowThreadProcessId(IntPtr hwnd, ref Int32 pid);

Так же во всех приведены примерах pid я получаю следующим путем:

// Получаю pid активного окна
GetWindowThreadProcessId(GetForegroundWindow(), ref pid);
// Получаю процесс исходя из pid активного окна
Process process = Process.GetProcessById(pid);

Вот с этим процессом я дальше и работаю. Я пытаюсь получить название с помощью следующих вариантов:

1) Самый приятный вариант, так как дает наиболее человеческие названия:

p.MainModule.FileVersionInfo.FileDescription;

2) Просто получает заголовок окна приложения. Не всегда приятен, например в случае с git не работает(см. рисунок ниже):

p.MainWindowTitle;

Если брать у этого окна заголовок то получается белиберда и совсем не понятно.

3) Просто берем название процесса. Так же отклонил по понятным причинам (название процесса зачастую не равно название программы)

ProcessHeader = p.ProcessName;

Сейчас я использую все три варианта в том порядке в каком они приведены, если первый ничего не дает то используется второй, а если и со вторым облом то использую третий. До сих пор такая схем работала, но вот осечка (см. ниже). Ищу как апгрейдить.

P.S. Название сайтов получаю другим способом, не через процессы.

Answer 1

Если я не ошибаюсь, то на вкладке "Процессы" отображается описание процесса, а не его название. Само название отображается в "Подробности".

Описание процесса, храниться в самом файле. Для его получения вам надо вытащить инфу от туда примерно таким способом:

var fileVersionInfo = FileVersionInfo.GetVersionInfo(processPath); //получаем инфо из файла
var processDescription = fileVersionInfo.FileDescription; //Получаем описание.

Вот хорошая статья: тык

READ ALSO
Альтернатива window.pageYoffset и window.scrollY в Angular4

Альтернатива window.pageYoffset и window.scrollY в Angular4

Насколько мне известно, бегунок находится вне DOM, поэтому его можно прочитать только через 2 вышеуказанных метода

321
React Native: как собрать apk?

React Native: как собрать apk?

Как правильно собрать apk из react native? Я нашел вариант с expoНо apk чего-то не появляется:

1171
Не работает шара в вайбер и вотсап [требует правки]

Не работает шара в вайбер и вотсап [требует правки]

При нажатие на кнопку репост вайбер или вотсап ссылка не проходит

276