Как я могу определить текущее имя и версию сфокусированного процесса на C#
Вопрос
Например, если я работаю над 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
Не могли бы вы прояснить свой вопрос?Вы имеете в виду, что хотите запустить программу, которая сообщит вам данные о программе в активном окне?Или что вы хотите, чтобы ваша программа сообщала о своей собственной версии?
То, что вы ищете, чтобы получить информацию в любом случае, это Система.Отражение.Сборка.(Смотрите примеры кода по ссылке.)
Как получить сборку из внешней программы?В этом я не уверен...