参照lihuasoft大虾在http://topic.csdn.net/u/20080313/00/5e2add09-6103-405f-8f6b-6bbb220e9cfd.html中的回复,类似的用VC做了一个,代码如下:
BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)
{
  HWND hWnd = (HWND)lParam;//lParam是主窗口的窗口句柄
HWND hChild = ::FindWindowEx(hWnd, NULL, "Button", "确定");
if(hChild != NULL)
{
::SendMessage(hChild, WM_LBUTTONDOWN, 0, 0);
::SendMessage(hChild, WM_LBUTTONUP, 0, 0);
  }
return TRUE;
}程序主界面里有个webbrowser控件,会出来一个确定的模态对话框(标题是"Microsoft Internet Explorer"),原本需手工去点击“确定”,程序才能继续运行。于是就想用代码区实现自动点击,按照lihuasoft的方法,在OnTimer里调用EnumWindows,然后转到EnumWindowsProc,但是死活找不到“确定”按钮的窗口句柄,每次都返回NULL;而::FindWindowEx(hWnd, NULL, "Button", "取消");去找主窗口上的一个“取消”按钮,能找到。
另外从Spy++中,发现"Microsoft Internet Explorer"窗口的Owner Window和Parent Window均为我的主界面,而该窗口上的“确定”按钮的Parent Window为"Microsoft Internet Explorer"窗口,Owner Window为(None)。
求解。

解决方案 »

  1.   

    用kb_event试试,不过就算行,这也是个笨办法。
      

  2.   

    不要用EnumWindows,直接用FindWindowEx查找确定按钮就行了
    HWND hIE = ::FindWindowEx(m_hWnd, NULL, NULL, "Microsoft Internet Explorer"); //找到IE这个子窗口
    if ( hIE != NULL )
    {
     HWND hBtn = ::FindWindowEx(hIE, NULL, NULL, "确定"); //找到确定按钮句柄
    if (hBtn != NULL)
    {
    // 偶尔出错,发送失败,加个while判断一下。
    while (!::PostMessage(hBtn, BM_CLICK, 0, 0))
    {
         if (::IsWindow(Btn))
               Sleep(20);
         else
               break;
    }
    }
    }
      

  3.   

    在OnTimer里加了你的代码,同时也在HWND hBtn = ::FindWindowEx(hIE, NULL, NULL, "确定"); 前加了个MessageBox,但是MessageBox一直未弹出该网页的脚本语言是VBscript
      

  4.   

    hook messagebox,所有 messagebox 一概禁止
      

  5.   

    一了百了,反正你也不想要messagebox,要了也要点掉,索性断了它的是非根
      

  6.   

    那你怎么知道那个要,那个不要?
    alert 出来的messagebox,有的你需要点掉,有的你不需要点掉?
    你怎么知道那个需要点掉,那个不需要点掉?
      

  7.   

    额那能不能,给个例子,怎么hook messagebox,咱是新手。
      

  8.   

    在容器里实现IDocHostShowUI::ShowMessage