Как я могу сказать, является ли данный hWnd все еще действительным? - PullRequest
21 голосов
/ 29 апреля 2010

Я использую сторонний класс, который порождает экземпляр Internet Explorer. Этот класс имеет свойство hWnd, которое возвращает hWnd процесса.

Позже, возможно, я захочу повторно использовать экземпляр приложения, если он все еще существует, поэтому мне нужно указать своему вспомогательному классу присоединиться к нему. Прежде чем сделать это, я хотел бы знать, является ли данный hWnd все еще действительным, иначе я вызову другой экземпляр.

Как я могу сделать это в C # & .NET 3.5?

1 Ответ

33 голосов
/ 29 апреля 2010

Если это дескриптор окна, вы можете позвонить isWindow(hWnd);

Из MSDN:

Возвращаемое значение

BOOL

Если дескриптор окна идентифицирует существующее окно, возвращаемое значение отлична от нуля.

Если дескриптор окна не идентифицирует существующее окно, возвращаемое значение это ноль. Примечания

Поток не должен использовать IsWindow для окно, которое он не создал, потому что окно может быть разрушено после эта функция была вызвана. В дальнейшем, потому что оконные ручки переработаны ручка может даже указывать на другое окно.

Кстати, поскольку вы находитесь в .NET, вам придется сделать что-то вроде:

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