2010-09-15 81 views
2

實例A正試圖恢復實例B的窗口,但我無法獲取B的窗口句柄。我認爲這個問題是窗口正在被B最小化,使用系統盤:如何讓另一個應用程序的窗口句柄最小化到系統托盤?

this.Visibility = Visibility.Hidden; 

和A嘗試使用獲得B的窗口句柄:

Process process = Process.GetCurrentProcess(); 
Process.GetProcessesByName(process.ProcessName).First().MainWindowHandle; 

等於IntPtr.Zero

我也試圖通過類名稱中使用間諜++獲取窗口句柄,但類名有每個實例的格式如下GUID:

HwndWrapper[FileName.exe;;ad445199-cf93-48a4-bd24-2f97d54c8af8] 

回答

3

那是因爲你想基本上是不存在的,並且MainWindowHandle的概念是一個嚴重誤用的概念,它潛入.Net框架中,造成永久混淆。來自There can be more than one (or zero): Converting a process to a window

「我有一個線程ID,我如何獲得 對應的窗口?」

您可以使用EnumThreadWindows 函數獲取 線程上的所有窗口。

「是的,我知道EnumThreadWindows, 但我如何獲得我想要的窗口?」

那麼,你還沒有說你想要什麼 呢。

「我想要窗口對應於 的線程。」

但是哪一個?你如何在所有窗口中決定 ?

「這就是我問你的!」

但你還沒有描述你想要什麼 。

「我想要窗口對應 的線程。爲什麼你不回答我的 問題?」

注意,他說:「我正在尋找 頂級無主窗口」是一個 進步,但它仍然沒有 唯一標識一個窗口。有 可以是一個進程中的多個頂級無主窗口 。例如,資源管理器 通常有許多頂級的 無主窗口。有桌面, 任務欄,您打開的文件夾窗口, 和屬性表。如果您要求 「 Explorer」的頂級無主窗口,您需要哪一個窗口?

也許人們越來越想法 是有辦法來唯一指定 「的」窗口過程 因爲的System.Diagnostics.Process 對象有一個名爲 MainWindowHandle財產。該屬性的文檔 也不會執行任何操作 來消除該概念。我有 不知道該屬性如何在多個頂級無主 窗口中決定 。

主題也闡述了在MSDN Q &一個Get the Main Window

Q我如何才能找到一個進程的主窗口?我正在編寫一個類似Spy的工具,我需要爲進程獲取主窗口(HWND),以便可以向其發送消息,如WM_ACTIVATEAPP。

A您的意思是哪個主窗口?

相關問題