webbrowser 弹出模态对话框

csl312211865 2010-05-05 09:37:48
参照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)。
求解。
...全文
283 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
蒋晟 2010-05-17
  • 打赏
  • 举报
回复
在容器里实现IDocHostShowUI::ShowMessage
csl312211865 2010-05-06
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 visualassist4680 的回复:]
一了百了,反正你也不想要messagebox,要了也要点掉,索性断了它的是非根
[/Quote]这个不是我说不要就不要。。。网站是人家建的。。
dianhui 2010-05-06
  • 打赏
  • 举报
回复
学习了,这方面做的少,帮忙顶下!
visualassist4680 2010-05-06
  • 打赏
  • 举报
回复
一了百了,反正你也不想要messagebox,要了也要点掉,索性断了它的是非根
csl312211865 2010-05-06
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 visualassist4680 的回复:]
hook messagebox,所有 messagebox 一概禁止
[/Quote]这个。。。太极端了吧。。。
visualassist4680 2010-05-06
  • 打赏
  • 举报
回复
hook messagebox,所有 messagebox 一概禁止
csl312211865 2010-05-06
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zyq5945 的回复:]
不要用EnumWindows,直接用FindWindowEx查找确定按钮就行了

C/C++ code
HWND hIE = ::FindWindowEx(m_hWnd, NULL, NULL, "Microsoft Internet Explorer"); //找到IE这个子窗口
if ( hIE != NULL )
{
HWND hBtn = ::FindWindowEx(hIE……
[/Quote]
在OnTimer里加了你的代码,同时也在HWND hBtn = ::FindWindowEx(hIE, NULL, NULL, "确定"); 前加了个MessageBox,但是MessageBox一直未弹出。。。该网页的脚本语言是VBscript
LitteGreen 2010-05-06
  • 打赏
  • 举报
回复
正好我也想了解一下,帮顶
zyq5945 2010-05-06
  • 打赏
  • 举报
回复
不要用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;
}
}
}
visualassist4680 2010-05-06
  • 打赏
  • 举报
回复
detours
csl312211865 2010-05-06
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 visualassist4680 的回复:]
那你怎么知道那个要,那个不要?
alert 出来的messagebox,有的你需要点掉,有的你不需要点掉?
你怎么知道那个需要点掉,那个不需要点掉?
[/Quote]额。。。那能不能,给个例子,怎么hook messagebox,咱是新手。
visualassist4680 2010-05-06
  • 打赏
  • 举报
回复
那你怎么知道那个要,那个不要?
alert 出来的messagebox,有的你需要点掉,有的你不需要点掉?
你怎么知道那个需要点掉,那个不需要点掉?
Un1 2010-05-05
  • 打赏
  • 举报
回复
用kb_event试试,不过就算行,这也是个笨办法。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧