2010-04-29 83 views
18

我正在使用生成Internet Explorer實例的第三方類。這個類有一個屬性hWnd,它返回進程的hWnd。如何判斷給定的hWnd是否仍然有效?

後來,我可能想重用應用程序的實例,如果它仍然存在,所以我需要告訴我的助手類來附加它。在此之前,我想知道給定的hWnd是否仍然有效,否則我會產生另一個實例。

如何在C#中執行此操作#& .NET 3.5?

回答

29

如果它是一個窗口句柄,可以調用isWindow(hWnd);

從MSDN:

返回值

BOOL

如果窗口句柄標識 現有的窗口,返回值爲 非零。

如果窗口句柄未標識 現有窗口,則返回值 爲零。備註

線程不應該使用IsWindow的 窗口,它沒有創建因爲 窗口可能被破壞 後調用此函數。此外, ,因爲窗口句柄回收 句柄甚至可以指向一個 不同的窗口。

順便說一句,因爲你是在.NET中你必須做一些事情,如:

[DllImport("user32.dll")] 
[return: MarshalAs(UnmanagedType.Bool)] 
static extern bool IsWindow(IntPtr hWnd); 
+0

完美,正是我一直在尋找。謝謝您的幫助! – 2010-04-29 16:38:29

+5

需要注意的一點是,DllImport屬性位於System.Runtime.InteropServices命名空間中。 – 2010-04-29 16:56:24

相關問題