Đây phải là một cách dễ dàng: Tôi đang tạo một chương trình sinh ra một quá trình bằng cách sử dụng hàm win32 CreateProcess()
. Khi quá trình này được tải, tôi tìm thấy cửa sổ của nó bằng cách sử dụng FindWindow
và gửi tin nhắn bằng cách sử dụng SendMessage()
. Câu hỏi là, làm cách nào để biết khi nào cửa sổ đó sẵn sàng chấp nhận tin nhắn?Làm thế nào để xác định khi nào quá trình sinh sản đã sẵn sàng? (Sử dụng CreateProcess() và FindWindow())
xem xét như sau:
HWND wnd;
BOOL Start()
{
// Spawn the process
if (! CreateProcess(...))
return FALSE;
// Find the process's window (class and name already known)
wnd = FindWindow(MY_WINDOW_CLASS, MY_WINDOW_NAME);
// Always returns FALSE because window has not yet been created.
return (wnd != NULL);
}
Đoạn mã trên sẽ (? Hầu như) luôn luôn thất bại; cửa sổ không thể được tạo ra và thấy rằng một cách nhanh chóng. Nếu tôi đặt một chuỗi chờ, hãy nói Sleep(1000)
, giữa các cuộc gọi CreateProcess
và FindWindow
, nó hoạt động tốt. Nhưng điều này có cảm giác giống như một hack rất.
Làm cách nào để cải thiện điều này?
Hoàn hảo. Cảm ơn bạn! –
API Windows rất lớn không ai có thể mong đợi để biết tất cả.Tôi đã học được điều gì đó mới mẻ hôm nay, cảm ơn. –
Đây là lỗi đang chờ xảy ra. 'WaitForInputIdle' được phát minh để đáp ứng các yêu cầu của DDE. Sử dụng nó cho bất cứ điều gì khác sẽ thất bại, theo những cách tinh tế nhất. Đọc có liên quan: [WaitForInputIdle thực sự nên được gọi là WaitForProcessStartupComplete] (https://blogs.msdn.microsoft.com/oldnewthing/20100325-00/?p=14493) và [WaitForInputIdle đợi bất kỳ chuỗi nào, có thể không phải là chuỗi bạn quan tâm đến] (https://blogs.msdn.microsoft.com/oldnewthing/20100326-00/?p=14483). – IInspectable