2010-02-15 140 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