How can I tell if a given hWnd is still valid?

Ian P picture Ian P · Apr 29, 2010 · Viewed 14.8k times · Source

I'm using a third-party class that spawns an instance of Internet Explorer. This class has a property, hWnd, that returns the hWnd of the process.

Later on down the line, I may want to reuse the instance of the application if it still exists, so I need to tell my helper class to attach to it. Prior to doing that, I'd like to know if the given hWnd is still valid, otherwise I'll spawn another instance.

How can I do this in C# & .NET 3.5?

Answer

Francisco Soto picture Francisco Soto · Apr 29, 2010

If it is a window handle, you can call isWindow(hWnd);

From msdn:

Return Value

BOOL

If the window handle identifies an existing window, the return value is nonzero.

If the window handle does not identify an existing window, the return value is zero. Remarks

A thread should not use IsWindow for a window that it did not create because the window could be destroyed after this function was called. Further, because window handles are recycled the handle could even point to a different window.

By the way since you are in .NET you'll have to do something like:

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