Vì vậy, tôi nghĩ điều này sẽ đơn giản và, tốt, tôi đã sai. Dưới đây là một mô tả đơn giản về vấn đề:Cách tìm cửa sổ nền trước một cách đáng tin cậy khi nó không có tiêu điểm
Tôi đang viết một ứng dụng nhỏ cho các nhà sản xuất của chúng tôi sẽ chụp ảnh màn hình toàn bộ màn hình cũng như cửa sổ nền trước khi họ nhấp vào biểu tượng của ứng dụng trong khay hệ thống. Hiện tại, tôi đang sử dụng phương pháp Win32 "GetforegroundWindow" trong sự kiện MouseMove của NotifyIcon để lưu xử lý cửa sổ nền trước và chụp ảnh màn hình trong sự kiện Nhấp chuột.
Điều này đôi khi làm việc, nhưng nếu tôi nhấp vào biểu tượng rất nhanh, tôi thực sự nắm bắt thanh tác vụ thay vì cửa sổ nền trước. Tôi không chắc tại sao điều này lại xảy ra (tôi hiểu rằng thanh tác vụ là một cửa sổ, tôi không hiểu tại sao đôi khi nó dường như tập trung vào MouseMove trước khi tôi nhấp vào), và tôi đã có chút may mắn khi sử dụng phương thức EnumWindows là tốt, có thể bởi vì tôi không hoàn toàn hiểu nó hoạt động như thế nào.
Có vẻ như, nếu tôi có thể lấy vị trí z của mỗi cửa sổ chỉ sử dụng tay cầm cửa sổ, đây sẽ là một vấn đề dễ giải quyết khi sử dụng EnumWindows. Tôi đã không tìm thấy một phương pháp để làm điều đó tuy nhiên.
Vì vậy, tôi hỏi các bạn; làm thế nào bạn sẽ viết một phương pháp để xác định vị trí cửa sổ nền trước đáng tin cậy, cho rằng nó có thể không có tập trung vào thời điểm đó? Hoặc là google-fu của tôi là không cho tôi hoặc thông tin về điều này là thưa thớt. Cảm ơn trước.
Phải, tôi hiểu rằng thanh tác vụ là một cửa sổ, nhưng đó chính xác là những gì tôi đang cố gắng tránh. Tôi cần phải nhận được hWnd của cửa sổ foreground hợp lý. Tôi sẽ cố gắng vượt qua HWND_NEXT và xem liệu điều đó có luôn luôn trả về những gì tôi theo sau hay không. Cảm ơn. –
Tất nhiên, bây giờ tôi cần để có thể tìm thấy tay cầm vào thanh tác vụ = P.có lẽ được định nghĩa ở đâu đó cho tôi, tôi sẽ xem xét (tôi biết máy tính để bàn là 0). –
Thực ra bạn đã có tay cầm tại thời điểm đó. Bạn chỉ cần sử dụng GetClassName để xác định xem đó có phải là thanh tác vụ hay không. Nếu bạn đã cài đặt Spy ++, bạn có thể sử dụng nó để tìm tên lớp. Tôi không biết nó. http://msdn.microsoft.com/en-us/library/ms633582(VS.85).aspx – Josh