Cou*_*sen 8 c++ winapi createprocess
这应该很简单:我正在创建一个使用win32 CreateProcess()函数生成进程的程序.加载此进程后,我会找到其窗口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);
}
Run Code Online (Sandbox Code Playgroud)
上面的代码(几乎?)总是失败; 窗口无法快速创建和发现.如果我把一个线程等待,比如Sleep(1000),在CreateProcess和FindWindow调用之间,它可以正常工作.但这感觉就像一个非常糟糕的黑客.
我怎样才能改善这个?
(编辑):用户IInspectable指出了问题WaitForInputIdle(),并建议使用CBT Hooks.
(...)与SetWindowsHookEx 函数一起使用的回调函数.系统在激活,创建(...)窗口之前调用此函数; (...许多其他事情).
此外,无论出于何种原因,CBT都是基于计算机的培训的缩写.
(旧,请注意,请参阅注释.)您正在寻找WaitForInputIdle().引用:
当父进程创建子进程时,CreateProcess函数返回而不等待子进程完成其初始化.在尝试与子进程通信之前,父进程可以使用WaitForInputIdle函数来确定子进程初始化的完成时间.
| 归档时间: |
|
| 查看次数: |
2644 次 |
| 最近记录: |