2010-02-15 93 views
3

我想获得活动前景窗口的可执行文件的路径。我怎样才能得到前景窗口的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]”是文件的路径。我需要前景窗口的应用程序的路径,但如果你知道任何其他方式来做我所需要的(获得前台应用程序的主要过程来执行它),我会请听到它。

谢谢并致敬!

回答

0

您可以使用GetWindowThreadProcessId获取进程ID,使用OpenProcess从进程ID获取进程句柄,然后在句柄上使用psapi方法GetProcessImageFileName获取可执行文件的路径。

或(根据Frank的回答),一旦拥有进程ID,您可以使用Process.GetProcessById(pid),然后使用Process对象实例的MainModule.FileName属性。这样你只需要p /调用GetWindowThreadProcessId,甚至不使用OpenProcess/GetProcessImageFileName。

0

看看System.Diagnostics.Process课程。您可以使用其MainWindowHandle属性来询问进程的窗口句柄,并将其与您获取的窗口的句柄进行比较。

为了让您的系统上运行的所有可用的进程列表使用Process.GetProcesses()

如果有匹配的进程对象使用Process.MainModule.FileName属性来获取可执行文件的路径。

+0

即使对于相同的进程,MainWindowHandle也不需要与GetForeGroundWindow返回的句柄相同。 – 2010-02-15 12:13:57