2011-08-17 121 views
0

我想知道是否有可能獲取桌面的窗體。我試圖從桌面獲取hWnd並使用Form.FromHandle獲取表單。但它總是返回null。所以我認爲這是不可能的;如果有可能的話,有人可以給我看一個示例代碼。 以下是以下代碼無效:如何從桌面的句柄獲取Form對象?

hWnd = GetDesktopWindow(); 
desktop = Form.FromHandle(hWnd) as Form; 
System.Diagnostics.Debugger.Break(); 

P.S.有人可以解釋我在這裏做錯了嗎?

+2

是什麼讓你覺得桌面有一種形式?只有窗口在你的過程中有表格。 – Gabe

+0

我的答案指出你爲什麼看到這種行爲。是否有一個特定的原因,你想桌面窗口作爲一個「表格」?我們可能能夠幫助解決您正在嘗試解決的實際問題。 – dlev

回答

6

您不能這樣做,因爲桌面窗口不是FormFromHandle()會嘗試查找與給定窗口句柄相對應的託管Control(在本例中爲Form)。由於不存在這樣的Control,所以它返回null

+1

我明白知道。我一直認爲桌面被認爲是一個窗口。 –

+2

它絕對是一個窗口。但作爲一個窗口並不意味着它是一個「形式」。 '窗體'是一個圍繞非託管窗口的託管抽象。所以所有的Form都是(在某個級別)的窗口,但是*並非所有的窗口都是Form的*。 – dlev