弹出网页对话框后,怎样拿回控制权?

tjahz tjahz 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
用VBA控制网页,弹出网页对话框后,系统等待,vbA程序不往下面运行(我的任务是继续往下运行,并进一步控制网页对话框),怎么办?

查阅相关资料:
用webbrowser控件自动执行一些任务时,例如新增,修改,删除这些操作,会有js对话框的确认信息,例如:新增成功的消息对话框,修改,删除的确认对话框,必须选择是或者否。由于对话框是模态的(MODAL)如果不处理,程序就会停住,不能执行。
解决方案分析:
可以通过windows发送消息,让对话框消失,相当于鼠标或者键盘点击。
对于消息对话框解决的方案比较多:
1 关闭窗口的消息,简单,直接关闭之;
2 发送键盘消息,因为只有一个按钮,默认按钮就是他,模拟键盘的回车键,空格键或者ESC键,消息对话框也会关闭;
3 发送按钮消息,直接模拟IDOK消息就可以了;
确认对话框如果选择是,那么采用第二个和第三个方案就可以。
要解决的关键技术问题就是如何调用windows api函数,并且由于程序已经在弹出对话框的地方停住了,等待用户响应,程序怎么重新获得控制权,继续执行。
程序解决方案:
第一个问题:C#声明windows API
检索到这样的文章在C#中通过 P/Invoke 调用Win32 DLL(英文版本),这个问题基本就解决了,代码如下:
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern IntPtr GetLastActivePopup(IntPtr hWnd);
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern Boolean PostMessage(IntPtr hWnd,int Msg, IntPtr wParam, IntPtr lParam);
GetLastActivePopup api说明参见:http://msdn2.microsoft.com/en-us/library/ms633507.aspx
PostMessage api说明参见:http://msdn.microsoft.com/en-us/library/ms644944%28VS.85%29.aspx
第二个问题:通过定时器控件,在弹出对话框前启动定时器,
timer2.Start();
webBrowser1.Document.All.GetElementsByName(“event_submit_do_delete”)[0].InvokeMember(“click”); //这句话会弹出一个确认对话框
第三个问题:关键代码
说明:几个常用的变量数值作为备忘
WM_KEYDOWN=100H
VK_RETURN=0DH
WM_COMMAND=111H
IDOK=1H
更多的变量可以访问 http://www.pinvoke.net/,这里的很全。
private void timer2_Tick(object sender, EventArgs e) {
timer2.Stop();
IntPtr PopupHandle = GetLastActivePopup(this.Handle);
//如果弹出对话框的句柄不是0(有对话框),并且对话框不是webbrowser,就送 WM_CLOSE(0×10)到这个对话框
if ((PopupHandle != IntPtr.Zero) || (PopupHandle != webBrowser1.Handle)) {
//PostMessage(PopupHandle, 0×10, new IntPtr(1), [...]

[color=#FF0000]现在问题:

VBA怎么用上面的方法? 用Application.OnTime。。。一样解决不了问题![/
color]
...全文

相关推荐

javascript的对话框详解与参数

对话框可以分为模式对话框和无模式对话框两种,两者区别是在对话框被关闭之前用户能否在同一应用程序的其他地方进行工作。举例说明:打开文件对话框便是典型的模式对话框,在你选择好要打开的文件按下确定后,或者取消打开文件操作后,才可以在同一应用程序进行其他操作。而常见的查找和替换对话框便是无模式对话框的典型,在该对话框打开的同时,我们还可以进行其他工作。模式对话框会始终保持焦点。除非关闭对话框,否则无法切换窗口。 无模式对话框不会始终保持焦点,但始终保持显示在最前端。 弹出网页窗口全攻略(html/hta) 1.弹启一个全屏窗口  <html> <body onload=”window.open( ht

weixin_38623080

天翼网关3.0/4.0超级管理员密码获取与家庭网络优化实战

家庭网络管理是网络工程中的基础实践,其核心在于对网络设备的访问控制与配置权限的理解。在运营商提供的网关设备中,通常存在普通用户与超级管理员两种权限层级,其原理是通过账户体系实现功能隔离与安全管理。掌握超级管理员权限的技术价值在于,用户可以对自有设备进行深度诊断与性能调优,例如优化NAT类型、管理连接数、调整QoS策略等,从而提升内网应用体验与稳定性。这一过程常涉及对设备配置文件的获取与解密技术,属于家庭网络**高级管理**的范畴。具体到应用场景,用户可通过分析**配置文件**中的加密信息,提取关键凭证,进而

weixin_34033624

layer和div两种弹出层.zip

layer和div两种弹出层

陆小马

jquery弹出大图特效

jquery特效,页面上显示小图片。可根据点击、移动后出发事件弹出大图特效

zoudatian

移动网页开发UIdemo

这是作为 移动手机 网页开发 的UIdemo,包含提交表单,各种弹出框,下拉框,加载进度条

紫电清霜
评论 7
收藏 已收藏
分享
返回顶部
tjahz
VBA 2,506 成员 10,830 内容