如何在 C# 中确定当前关注的进程名称和版本

Posted

技术标签:

【中文标题】如何在 C# 中确定当前关注的进程名称和版本【英文标题】:How can I determine the current focused process name and version in C# 【发布时间】:2010-09-12 04:24:08 【问题描述】:

例如,如果我正在使用 Visual Studio 2008,我想要值 devenv 和 2008 或 9。

版本号很重要...

【问题讨论】:

【参考方案1】:

这将是 PInvoke 城市...

您需要在 User32.dll 中 PInvoke 以下 API

Win32::GetForegroundWindow() in 返回当前活动窗口的 HWND。

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

Win32::GetWindowThreadProcessId(HWND,LPDWORD) 返回给定 HWND 的 PID

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

在 C# 中

Process.GetProcessByID() 使用 PID 创建 C# 进程对象

processInstance.MainModule 返回一个带有 FileVersionInfo 的 ProcessModule。

【讨论】:

你能举个例子说明如何使用 to 吗?【参考方案2】:

你能澄清你的问题吗?你的意思是你想要一个程序运行,它会告诉你关于活动窗口中程序的数据?或者您希望您的程序报告自己的版本?

无论哪种方式,您都希望通过 System.Reflection.Assembly 获取信息。 (请参阅链接中的代码示例。)

如何从外部程序获取程序集?那个我不确定...

【讨论】:

【参考方案3】:

这个project 演示了你需要的两个函数:EnumWindows 和GetWindowtext

【讨论】:

以上是关于如何在 C# 中确定当前关注的进程名称和版本的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C# 中获取打开端口的进程名称?

如何在 C# 中获取当前可执行文件的名称?

使用 C#,如何确定是哪个进程锁定了文件?

已知进程ID,如何获取进程名称 以及路径。

如何在任务管理器中使用不同的进程名称(对于当前进程)名称?

确定当前的 PowerShell 进程是 32 位还是 64 位?