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
Trả lời
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.
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;
}
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
Đ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
Từ đâu đến 'EnumWindowProc'? –
- 1. Xử lý cửa sổ Delphi XE2, vcl
- 2. Xử lý quá trình kết thúc của một ứng dụng cửa sổ
- 3. Xử lý cửa sổ X11 từ GtkWidget
- 4. Xử lý cửa sổ trong C#
- 5. Xử lý nhiều cửa sổ bằng Python
- 6. cách xử lý nút đóng cửa sổ trong ca cao
- 7. Vấn đề Winforms - Lỗi khi tạo cửa sổ xử lý
- 8. Xử lý WM_NCACTIVATE trong cửa sổ khởi động chặn tất cả các cửa sổ khác
- 9. Xử lý các cửa sổ tối đa bằng SDL
- 10. Cách xử lý chính xác cửa sổ WPF là gì?
- 11. xử lý python với 2 cửa sổ gtk
- 12. cách xử lý tín hiệu trên cửa sổ bằng haskell?
- 13. nút đóng cửa sổ xử lý trong wpf MVVM
- 14. Nhận cửa sổ xử lý (IntPtr) từ cửa sổ hiện tại của trình duyệt web Selenium GUID
- 15. Ứng dụng Cacao không cửa sổ
- 16. Cách xóa MenuBar của ứng dụng bằng API cửa sổ?
- 17. Nhận xử lý cửa sổ cụ thể sử dụng Office interop
- 18. Phương pháp tốt nhất để xử lý chuỗi kết nối trong ứng dụng biểu mẫu cửa sổ là gì?
- 19. Grid.ShowGridLines trong cửa sổ ứng dụng cửa hàng
- 20. Làm thế nào để bạn có được Số lượng Xử lý Cửa sổ Hiện tại và Hạn chế Xử lý Cửa sổ trong .NET?
- 21. Cách xử lý cửa sổ tải lên tệp windows khi sử dụng selenium
- 22. Xử lý cửa sổ bật lên bằng cách sử dụng selenium
- 23. Khi nào các cửa sổ báo hiệu một quá trình xử lý?
- 24. Ứng dụng DirectX trên cửa sổ 64 bit
- 25. CollectionViewSource trong ứng dụng cửa sổ tàu điện ngầm
- 26. Cách tin cậy chứng chỉ tự ký trong ứng dụng cửa sổ cửa sổ
- 27. Nhận một nút xử lý từ một ứng dụng khác
- 28. không thể mở dịch vụ cửa sổ trên máy tính '.' trong ứng dụng cửa sổ
- 29. Lệnh chuyển tiếp trong cửa sổ 8 cửa sổ ứng dụng lưu trữ
- 30. Xử lý thay đổi kích thước cửa sổ bằng OpenGL và SDL
Check-out giải pháp làm việc này: http://stackoverflow.com/a/28055461/1274092 –