IE页面上弹出的Modal对话框上有两个按钮“OK” 和 “Cancel”,我现在
通过API方法FindWindowEX可以找到这个Modal对话框的句柄。请问我如何找到 “Cancel”两个按钮,并自动点击它。
请给出切实好用的代码

解决方案 »

  1.   

    SendKeys.Send()和keybd_event
    模拟回车
      

  2.   


            if(g_hWnd <= 0 ) return;
    HWND hWnd = FindWindowEx(g_hWnd,0,NULL,_T("确定"));
    SetForegroundWindow(g_hWnd);
    if(hWnd > 0)
    {
    SendMessage(hWnd,WM_KEYDOWN,VK_SPACE,NULL);
    SendMessage(hWnd,WM_KEYUP,VK_SPACE,NULL);
    }
      

  3.   


    g_hWnd = FindWindow(NULL,_T("来自网页的消息"));
    if(g_hWnd <= 0 ) return;
    HWND hWnd = FindWindowEx(g_hWnd,0,NULL,_T("确定"));
    SetForegroundWindow(g_hWnd);
    if(hWnd > 0)
    {
    SendMessage(hWnd,WM_KEYDOWN,VK_SPACE,NULL);
    SendMessage(hWnd,WM_KEYUP,VK_SPACE,NULL);
    }
    不好意思少贴了一句。
      

  4.   


    自动点掉webbrowser的对话框
      

  5.   


    SendKeys.Send()我已经尝试过了,第一次好用。但是第二次使用的时候,不好用。很不稳当的
      

  6.   


    [DllImport("User32.dll", EntryPoint = "FindWindow")]
      private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
      [DllImport("User32.dll", EntryPoint = "SendMessage")]
      private static extern int SendMessage(  int hWnd,   // handle to destination window   int Msg,   // message   int wParam, // first message parameter   int lParam // second message parameter   ); 
    int WM_CLOSE = 0x010;
    string lpszParentWindow = "弹出窗体标题";
      int ParenthWnd = (int)FindWindow(null, lpszParentWindow);
      if (ParenthWnd != null)
      {
      //向系统发送关闭窗体指令
      int WndPr = SendMessage(ParenthWnd, WM_CLOSE, 0, 0);
      } 你的这种方法我已经试过了,的确是好用的。但是你的这种方法是把弹出的Modal对话框关闭(相当于点右上角的X)。
    我现在想实现的是找到Modal对话框上的“确定”或者“取消”按钮,再模拟鼠标点击它。
    我在网上搜索还有另外一种思路,就是通过得到的Modal对话框句柄,得到这个Modal对话框的HtmlDocument,再调用相应的方法去完成鼠标操作。得到这个Modal对话框的HtmlDocument好像很复杂。
      

  7.   

    在容器里面实现IDocHostShowUI::ShowMessage 
    参考
    http://www.codeproject.com/KB/miscctrl/csEXWB.aspx
      

  8.   


    g_hWnd = FindWindow(NULL,_T("来自网页的消息"));
        if(g_hWnd <= 0 ) return;
        HWND hWnd = FindWindowEx(g_hWnd,0,NULL,_T("确定"));
        SetForegroundWindow(g_hWnd);
        if(hWnd > 0)
        {
            SendMessage(hWnd,WM_KEYDOWN,VK_SPACE,NULL);
            SendMessage(hWnd,WM_KEYUP,VK_SPACE,NULL);
        }LZ,我在四楼恢复的这个代码实现不了吗?我在我本机已经测试通过,但是一定要SetForegroundWindow(g_hWnd);先把要点击的对话框置前激活,然后模拟键盘发送空格键(相当于点回车了。。)。
      

  9.   


    g_hWnd = FindWindow(NULL,_T("来自网页的消息"));
        if(g_hWnd <= 0 ) return;
        HWND hWnd = FindWindowEx(g_hWnd,0,NULL,_T("确定"));
        SetForegroundWindow(g_hWnd);
        if(hWnd > 0)
        {
            SendMessage(hWnd,WM_KEYDOWN,VK_SPACE,NULL);
            SendMessage(hWnd,WM_KEYUP,VK_SPACE,NULL);
        }LZ,我在四楼恢复的这个代码实现不了吗?我在我本机已经测试通过,但是一定要SetForegroundWindow(g_hWnd);先把要点击的对话框置前激活,然后模拟键盘发送空格键(相当于点回车了。。)。
      

  10.   

    我在四楼写的代码,已经测试通过了。但是你需要把要Modal窗口置前激活。
      

  11.   


    HWND hWnd = FindWindowEx(g_hWnd,0,NULL,_T("确定"));你弹出的Modal对话框中的按钮是“确定”吗?