2010-04-29 17 views
18

Sto utilizzando una classe di terze parti che genera un'istanza di Internet Explorer. Questa classe ha una proprietà, hWnd, che restituisce l'hWnd del processo.Come posso sapere se un determinato hWnd è ancora valido?

Più avanti lungo la linea, potrei voler riutilizzare l'istanza dell'applicazione se esiste ancora, quindi devo dire al mio helper di collegarvi. Prima di farlo, mi piacerebbe sapere se l'hWnd dato è ancora valido, altrimenti creerò un'altra istanza.

Come posso farlo in C# & .NET 3.5?

risposta

29

Se si tratta di un handle di finestra, è possibile chiamare isWindow(hWnd);

da MSDN:

Return Value

BOOL

Se la maniglia della finestra identifica un finestra esistente, la il valore restituito è diverso da zero.

Se la maniglia della finestra non identifica una finestra esistente, il valore restituito è zero. Commento

Un filo non dovrebbe usare IsWindow per una finestra che non ha creato perché finestra potrebbe essere distrutto dopo questa funzione è stato chiamato. Inoltre, perché le maniglie delle finestre vengono riciclate , l'handle potrebbe anche puntare a una finestra diversa .

Tra l'altro da quando ci si trova in .NET dovrete fare qualcosa di simile:

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

perfetto, esattamente quello che stavo cercando. Grazie per l'aiuto! –

+5

Un punto di nota, l'attributo DllImport si trova nello spazio dei nomi System.Runtime.InteropServices. –

Problemi correlati