CreateProcess()
これは簡単なことです。win32関数を使用してプロセスを生成するプログラムを作成しています。このプロセスがロードされると、を使用してウィンドウを見つけ、を使用FindWindow
してメッセージを送信しますSendMessage()
。問題は、そのウィンドウがいつメッセージを受け入れる準備ができているかをどうやって知ることができるかということです。
次のことを考慮してください。
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);
}
上記のコードは(ほとんど?)常に失敗します。ウィンドウを作成してすぐに見つけることはできません。たとえば、と呼び出しSleep(1000)
の間にスレッドを待機させると、正常に機能します。しかし、これは非常に悪いハックのように感じます。CreateProcess
FindWindow
どうすればこれを改善できますか?