This should be an easy one: I am creating a program that spawns a process using the win32 CreateProcess() function. Once this process is loaded, I find its window using FindWindow and send it messages using SendMessage(). The question is, how do I know when that window is ready to accept messages?
Consider the following:
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);
}
The code above will (almost?) always fail; the window cannot be created and found that quickly. If I put a thread wait, say Sleep(1000), between the CreateProcess and FindWindow calls, it works fine. But this feels like a very bad hack.
How can I improve this?
(Edit): User IInspectable pointed out problems with
WaitForInputIdle(), and suggested CBT Hooks instead.Also, CBT is short for computer-based training, for whatever reason.
(Old, beware, see comments.) You are looking for WaitForInputIdle(). Quote: