2010-04-29 26 views
18

Tôi đang sử dụng một lớp của bên thứ ba để sinh ra một phiên bản của Internet Explorer. Lớp này có thuộc tính, hWnd, trả về hWnd của tiến trình.Làm cách nào để biết liệu hWnd đã cho có còn hợp lệ không?

Sau đó trên xuống dòng, tôi có thể muốn sử dụng lại thể hiện của ứng dụng nếu nó vẫn còn tồn tại, vì vậy tôi cần phải nói với lớp trợ giúp của tôi để đính kèm vào nó. Trước khi làm điều đó, tôi muốn biết nếu hWnd đã cho vẫn còn hợp lệ, nếu không tôi sẽ sinh ra một cá thể khác.

Tôi làm cách nào để thực hiện việc này trong C# & .NET 3.5?

Trả lời

29

Nếu nó là một xử lý cửa sổ, bạn có thể gọi isWindow(hWnd);

Từ MSDN:

Return Value

BOOL

Nếu tay cầm cửa sổ xác định cửa sổ hiện , các giá trị trả lại là không đồng bộ.

Nếu tay cầm cửa sổ không xác định một cửa sổ hiện có, giá trị trả về bằng không. Ghi chú

Chủ đề không được sử dụng IsWindow cho một cửa sổ mà nó không tạo ra vì cửa sổ có thể bị hủy sau chức năng này được gọi. Hơn nữa, vì tay nắm cửa sổ được tái chế tay cầm thậm chí có thể trỏ đến một cửa sổ khác nhau .

Bằng cách này kể từ khi bạn đang ở trong .NET bạn sẽ phải làm một cái gì đó như:

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

Hoàn hảo, chính xác những gì tôi đang tìm kiếm. Cảm ơn đã giúp đỡ! –

+5

Một điểm lưu ý, thuộc tính DllImport nằm trong không gian tên System.Runtime.InteropServices. –

Các vấn đề liên quan