代码大致如下:
bool success = CreateProcess(....);
if(success)
{
//这里如果调用Thread.Sleep(100)或者WaitForSingleObject(pi.hProcess,100)
// 那么下面的语句就能找到该住窗体的句柄。
Handle hwnd = FindWindow(className,windowName)
}那么问题是我并不知道我到底应该阻塞当前进程多少时间,新创建的进程才能把主窗体显示出来,我才能在当前进程通过FindWidow去找到相应窗体的句柄,而我也不想当前进程一直阻塞。问各位大虾可有解决方法!!!!
bool success = CreateProcess(....);
if(success)
{
//这里如果调用Thread.Sleep(100)或者WaitForSingleObject(pi.hProcess,100)
// 那么下面的语句就能找到该住窗体的句柄。
Handle hwnd = FindWindow(className,windowName)
}那么问题是我并不知道我到底应该阻塞当前进程多少时间,新创建的进程才能把主窗体显示出来,我才能在当前进程通过FindWidow去找到相应窗体的句柄,而我也不想当前进程一直阻塞。问各位大虾可有解决方法!!!!
解决方案 »
- 怎么在IE工具栏使用不同宽度的图标???
- 抄了一个send的全局钩子, 为什么对控制台程序不起作用...还有就是qq也不起作用...好多程序也会因为它挂掉....
- OpenGL中纹理映射的小问题?
- 多个记录集的联合查询
- 使用ado向数据库插入数据,应该使用什么语句来打开数据集?
- 如何提高在数据库增加数据的速度(MFC ODBC)?
- 一个看似简单的问题
- 求教,如何准备3分钟面试?在线等待,急!!!
- 哪位朋友晓得如何在edit box 里面获取数值信息,而且当数值信息超过一定值的时候自动出现错误提示
- 如何获得屏幕上具有输入焦点的窗口 包括其他进程的
- 关于延迟提交(OnRenderFormat)的问题
- 各位大哥帮我解决这个C++问题啊,谢谢了
可以用事件对象
大致原理就是设置一全局的事件对象,初始值为没有信号,当你的CreateProcess中创建完成以后,将此对象设置成有信号,而当前线程中则不需要使用Thread.Sleep(),它等待同步事件变成有信号时就可以执行FindWindow()的操作了
for(int i=0; i<MAX; i++)
{
Handle hwnd = FindWindow(className,windowName)
if(NULL != hwnd)
break;
sleep(10);
}
if (WaitForInputIdle(hProcess,INFINITE) == 0)
{
HWND hWnd = FindWindow(szClassName,szWindowTitle);
}