2012-07-20 70 views
1

我有一個系統服務啓動另一個應用程序。這個應用程序(用C#編寫)在某些時候需要獲取所有打開的窗口(應用程序)並列出它們的名稱。C# - 獲取打開的窗口不工作,因爲它應該

我用EnumWindow(Win32中),我用Process.GetProcesses()process.MainWindowTitle(從C#)我得到的是這樣的:

過程:UI0Detect

窗口標題:交互式服務檢測

如果我手工運行該應用程序,它會給我所有的窗戶,因爲它應該。但是當系統服務運行應用程序時,我所得到的只是這一項服務。

我該如何讓應用程序獲得正確的活動窗口列表?

謝謝

+1

系統服務在哪個帳戶下運行?它是否具有機器上的管理級別權限? – mellamokb 2012-07-20 13:43:39

+0

是的。我從我的帳戶(也帶有管理權限)安裝它並從管理員運行 – 2012-07-20 13:45:45

+3

您是否使用Windows Seven?如果是這樣,我不確定服務可以訪問這些信息。 – Marco 2012-07-20 13:46:46

回答

1

Windows服務無法在相同的「會話」作爲一個正常的程序運行,所以第二啓動的程序也開始在特別會議上,當你的服務啓動它。您將需要使用CreateProcessAsUser並在您要監控的用戶會話中創建第二個應用。

有關編寫交互式服務的更多信息,請參閱this MSDN article

+0

uuuuuu你真聰明!謝謝!這真的幫助我。它現在有效。 – 2012-07-20 14:01:38