2011-08-17 124 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