Как я могу определить текущее имя и версию сфокусированного процесса на C#

StackOverflow https://stackoverflow.com/questions/117851

  •  02-07-2019
  •  | 
  •  

Вопрос

Например, если я работаю над Visual Studio 2008, мне нужны значения devenv и 2008 или 9.

Номер версии очень важен...

Это было полезно?

Решение

Это будет ПИнвоук-сити...

Вам нужно будет закрепить следующие API в User32.dll

Win32::GetForegroundWindow() в возвращает HWND текущего активного окна.

/// <summary>
/// The GetForegroundWindow function returns a handle to the foreground window.
/// </summary>
[DllImport("user32.dll")]
static extern IntPtr GetForegroundWindow();

Win32::GetWindowThreadProcessId(HWND,LPDWORD) возвращает PID данного HWND

[DllImport("user32.dll", SetLastError=true)]
static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId);

В C#

Process.GetProcessByID() принимает PID для создания объекта процесса на C #

processInstance.MainModule возвращает ProcessModule с прикрепленным FileVersionInfo.

Другие советы

Это проект демонстрирует две необходимые вам функции: Перечислять окна и GetWindowText Получить WindowText

Не могли бы вы прояснить свой вопрос?Вы имеете в виду, что хотите запустить программу, которая сообщит вам данные о программе в активном окне?Или что вы хотите, чтобы ваша программа сообщала о своей собственной версии?

То, что вы ищете, чтобы получить информацию в любом случае, это Система.Отражение.Сборка.(Смотрите примеры кода по ссылке.)

Как получить сборку из внешней программы?В этом я не уверен...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top