2009-05-04 54 views
13

Tôi đang tạo ứng dụng cho một ứng dụng khác mainWindowhandle nó thu thập thông tin về trạng thái cửa sổ. Tôi không gặp vấn đề gì khi thu thập thông tin về cửa sổ con, nhưng tôi không thể truy cập vào các cửa sổ đang mở khác của một ứng dụng hoặc thậm chí cả các menu. Có cách nào để có được tất cả các cửa sổ xử lý của một ứng dụng?Xử lý cửa sổ của ứng dụng

+0

Check-out giải pháp làm việc này: http://stackoverflow.com/a/28055461/1274092 –

Trả lời

15

Bạn có thể làm gì Process.MainWindowHandle dường như làm: sử dụng P/Gọi để gọi hàm EnumWindows, gọi phương thức gọi lại cho mọi cửa sổ cấp cao nhất trong hệ thống.

Trong gọi lại của bạn, hãy gọi GetWindowThreadProcessId và so sánh id quá trình của cửa sổ với Process.Id; nếu id quá trình khớp nhau, hãy thêm tay cầm cửa sổ vào danh sách.

8

Trước tiên, bạn sẽ phải có được windowhandle của mainwindow của ứng dụng.

[DllImport("user32.dll", SetLastError = true)] 
static extern IntPtr FindWindow(string lpClassName, string lpWindowName); 

IntPtr hWnd = (IntPtr)FindWindow(windowName, null); 

Sau đó, bạn có thể sử dụng tay cầm này để có được tất cả childwindows:

[DllImport("user32.dll")] 
[return: MarshalAs(UnmanagedType.Bool)] 
static extern bool EnumChildWindows(IntPtr hwndParent, EnumWindowsProc lpEnumFunc, IntPtr lParam); 

private List<IntPtr> GetChildWindows(IntPtr parent) 
{ 
    List<IntPtr> result = new List<IntPtr>(); 
    GCHandle listHandle = GCHandle.Alloc(result); 
    try 
    { 
     EnumWindowProc childProc = new EnumWindowProc(EnumWindow); 
     EnumChildWindows(parent, childProc, GCHandle.ToIntPtr(listHandle)); 
    } 
    finally 
    { 
     if (listHandle.IsAllocated) 
       listHandle.Free(); 
    } 
    return result; 
} 
+0

Mez vấn đề isn' Tôi có thể làm điều đó một cách dễ dàng, những gì tôi không thể làm là đến các cửa sổ khác bên cạnh mainWindow và con của nó ... – user361526

+0

Điều này làm việc cho bất kỳ cửa sổ nào, cũng cho các cửa sổ không thuộc về ứng dụng riêng. Xin lỗi nếu tôi hiểu lầm câu hỏi của bạn. – Mez

+0

Từ đâu đến 'EnumWindowProc'? –

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