2010-04-29 8 views
18

Ich verwende eine Drittanbieter-Klasse, die eine Instanz von Internet Explorer hervorbringt. Diese Klasse hat eine Eigenschaft, hWnd, die den hWnd des Prozesses zurückgibt.Wie kann ich feststellen, ob eine gegebene hWnd noch gültig ist?

später auf der ganzen Linie, möchte ich kann die Instanz der Anwendung wiederverwendet werden, wenn sie noch existiert, also muss ich meine Hilfsklasse sagen, um es zu befestigen. Bevor ich das tue, würde ich gerne wissen, ob der angegebene hWnd noch gültig ist, sonst werde ich eine andere Instanz erzeugen.

Wie kann ich dies in C# & .NET 3.5 tun?

Antwort

29

Wenn es ein Fenstergriff ist, können Sie isWindow(hWnd);

Von Msdn nennen:

Rückgabewert

BOOL

Wenn der Fenstergriff ein bestehenden Fenster identifiziert, die Rückgabewert ist ungleich Null.

Wenn der Fensterhandle ein vorhandenes Fenster nicht identifiziert, ist der Rückgabewert Null. Bemerkungen

Ein Thread sollte nicht verwendet werden IsWindow für ein Fenster, das es nicht schaffen, weil konnte das Fenster nach zerstört diese Funktion aufgerufen wurde. Ferner sind weil Fenstergriffe der Griff recycelt sogar zu einem anderes Fenster zeigen könnte.

Durch die Art und Weise, da Sie in .NET sind werden Sie so etwas wie zu tun haben:

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

Perfect, genau das, was ich suchte. Danke für die Hilfe! –

+5

Zu beachten ist, dass sich das DllImport-Attribut im System.Runtime.InteropServices-Namespace befindet. –