簡體   English   中英

在Windows 7中,是否可以在沒有用戶登錄的情況下獲取GUI應用程序主窗口的標題? 我知道,立即回答是否定的

[英]In Windows 7, is it possible to grab the title of the main window of a GUI application without a user being logged in? I know, immediate answer is no

編輯:編輯我希望是清晰的

有一個GUI應用程序,只有一個主窗口。 那個主窗口的標題欄中有文字; 我的任務是檢索主窗口標題欄中的文本。

通常,如果用戶登錄,應用程序啟動就好了,我可以使用PowerShell通過調用System.Diagnostic.Process.MainWindowTitle來獲取主窗口的標題,沒問題。

但是,當沒有用戶登錄時,我需要獲取相同的信息。我打算編寫一個腳本或一個小型控制台應用程序,由任務調度程序啟動它來執行此操作。 奇怪的是,我知道:當沒有用戶登錄系統時,我需要啟動此應用程序,並在其唯一主窗口的標題欄中檢索文本。

我知道當沒有用戶登錄時,任務調度程序顯然仍然會盡職盡責地嘗試運行腳本或可執行文件。 但是,由於沒有用戶登錄,因此這些計划的可執行文件或腳本將無法訪問Windows GUI子系統 因此,如果計划任務嘗試啟動需要繪制窗口的應用程序,那么將不會繪制該窗口。

這意味着我不能簡單地安排一個腳本來啟動這個GUI應用程序,在tile欄中獲取文本然后終止應用程序(我不能這樣做,因為應用程序將永遠不會繪制它的主窗口)。

我有一些想法,我希望得到他們的意見(甚至是另一種選擇):

  • 最簡單但最不可取的,我會嘗試強制用戶登錄(即使沒有實際用戶)。 這應該加載GUI子系統並顯示主窗口。 抓住主窗口標題的文本后我再次注銷。

  • 在某些時候,應用程序將調用一些Windows API,要求繪制一個窗口(由於前面提到的缺少GUI子系統而不會繪制窗口 )。 也許我可以以某種方式捕獲這個請求,也許在這個請求中,我可以找到主窗口標題? 還是指向內存中的指針? 什么東西?

  • 這似乎不太可行,但也許我可以為機器本身建立一個RDP。 我的想法是,當您將RDP插入無頭服務器時,服務器正在生成它發送回客戶端的可視元素。 因此,當建立RDP連接時, GUI子系統應處於活動狀態以繪制需要發回的元素。 在我的情況下,元素不會發送到任何地方,但我希望它們仍然會被創建,所以我可以抓住窗口文本。

最后,我想指定我已經嘗試解析字符串的二進制文件,希望在編譯時從存儲在二進制文件中的主窗口標題中查找信息。 但是,它不夠可靠,不能始終如一地使用。

如果有人真的到達了這個牆壁文本的末尾真是太棒了,謝謝你們。 我將采用任何語言的解決方案,但我最擅長C ++和C#。

創建此項以便公開解決方案。

事實證明, System.Diagnostic.Process.MainWindowTitle並不總是按預期運行。 最后,我所要做的就是使用EnumWindows枚舉頂級窗口並使用GetWindowText來獲取GUI應用程序的標題。

我寫了一個控制台應用程序來完成這個,控制台應用程序能夠啟動GUI應用程序並獲取其主窗口標題。 它通過遠程PowerShell會話以及通過任務計划程序啟動時工作。

不知道為什么System.Diagnostic.Process.MainWindowTitle與枚舉頂部窗口和使用GetWindowText不同,但我想這是另一次。

感謝大家伸出援助之手。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM