主界面弹出提示框后,它变成不可操作的,状态会有什么变化?有什么函数能判断出来么?我要用代码操作一个程序的界面,在最后完成时,会有一个MessageBox弹出来提示成功,我用下面的代码把提示框关闭 while (true)
{
hChild = ::GetLastActivePopup(hWnd);//hWnd是主界面句柄
hChild = ::GetWindow(hChild, GW_CHILD);//获取“确定”按钮的句柄
::GetClassName(hChild, pszText, sizeof(pszText));
if (NULL == hChild || strcmpi(pszText, "button") != 0)
{
Sleep(100);
continue;
}
::SendMessage(hChild, WM_LBUTTONDOWN, NULL, NULL);
::SendMessage(hChild, WM_LBUTTONUP, NULL, NULL);
break;
}
现在的问题是,偶尔会有几次不弹出MessageBox的情况,这种情况下如何不让程序继续在这死循环?想了一下,可以限制循环次数,但觉得这样不太好,看能不能通过判断主界面的状态来跳出循环,或者其它方法也可。

解决方案 »

  1.   

    其实完全可以自己新建一个DLG,里面弄个确定按钮,当主界面完成时,弹出这个DLG,你可以在这个DLG里把它关闭
      

  2.   

    不更改你的结构的话,就用PostMessage
      

  3.   

    最简单的办法,写一个你自己的MessageBox,你可以随意控制它的状态
      

  4.   


    ::SendMessage(...)
    换成
    ::SendMessageTimeOut(...)
      

  5.   

    现在问题的关键是如何确定是否弹出了提示框,如果一直没有弹出,根本都不会运行到SendMessage那里,会直接continue继续循环。
      

  6.   

    不是很明白楼主的意思。
    如果我没理解错误的话,负责弹出对话框的主窗口也是楼主写的代码,那怎么会需要这么复杂的方式来解决问题?
    楼主的目的是要弹出对话框的同时主窗口也能有个某种状态上的值的变化、以便于执行你需要的代码对吧?
    直接弄个bool变量,当弹出MessageBox的时候变量改值,然后在可循环的函数里比如onpaint之类用if(true == 变量){……}
    这样不就OK了么?