我怎样才能得到前景窗口的exe路径
问题描述:
我想获得活动前景窗口的可执行文件的路径。我怎样才能得到前景窗口的exe路径
我已经有前台窗口的句柄:
[DllImport("user32.dll")]
static extern IntPtr GetForegroundWindow();
IntPtr handlerAppActual = GetForegroundWindow();
,我想获得it's可执行文件的路径,像一条捷径。 (例如:C:\ application \ application.exe)
为什么我需要这个? 要在以后用它来与它的过程的呼叫自动执行应用程序,就像这样:
Process process = new Process();
process.StartInfo.FileName = @parametros[0];
process.Start();
其中“parametros [0]”是文件的路径。我需要前景窗口的应用程序的路径,但如果你知道任何其他方式来做我所需要的(获得前台应用程序的主要过程来执行它),我会请听到它。
谢谢并致敬!
答
您可以使用GetWindowThreadProcessId获取进程ID,使用OpenProcess从进程ID获取进程句柄,然后在句柄上使用psapi方法GetProcessImageFileName获取可执行文件的路径。
或(根据Frank的回答),一旦拥有进程ID,您可以使用Process.GetProcessById(pid)
,然后使用Process
对象实例的MainModule.FileName
属性。这样你只需要p /调用GetWindowThreadProcessId
,甚至不使用OpenProcess/GetProcessImageFileName。
答
看看System.Diagnostics.Process课程。您可以使用其MainWindowHandle
属性来询问进程的窗口句柄,并将其与您获取的窗口的句柄进行比较。
为了让您的系统上运行的所有可用的进程列表使用Process.GetProcesses()
如果有匹配的进程对象使用Process.MainModule.FileName属性来获取可执行文件的路径。
即使对于相同的进程,MainWindowHandle也不需要与GetForeGroundWindow返回的句柄相同。 – 2010-02-15 12:13:57