c# - 如何在 C# 中获取 Web 浏览器控件的查找对话框?
问题描述
我想将查找对话框(使用 control + F 打开)作为对象,以了解它是否处于活动状态。
我怎么做?
我检查了 Web 浏览器控件的所有参数,但一无所获。
解决方案
WebBrowser 控件和本机 IWebBrowser2 界面都不会公开查找对话框。唯一的交互是通过调用 OLE 命令启动对话框:
SHDocVw.WebBrowser webBrowserInstance = webBrowser1.ActiveXInstance as SHDocVw.WebBrowser;
webBrowserInstance.ExecWB(
SHDocVw.OLECMDID.OLECMDID_FIND,
SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DODEFAULT,
null, null);
这很好用,但你既不能传递任何变量,也不能得到任何回报。不幸的是,查找对话框不是子窗口,它没有任何标识类或属性。基本上,您需要检查属于您的进程的所有顶级窗口,并找出其中一个是否是有问题的对话框。然后你可以发送一个 WM_CLOSE 到窗口,或者调用 CloseWindow,或者类似的东西。
这里有一个很好的函数集合来搜索属于一个进程的(顶级)窗口: 如何使用 .NET 枚举属于特定进程的所有窗口?
推荐阅读
- ios - 如何快速重置/重新加载 UI 页面控制器视图
- reactjs - 带有迷你 css 插件的 react-loadable.json 在样式上返回未定义
- python - 创建人员类
- awk - 如何在脚本中使用 awk 命令来保存永久修改
- html - Bootstrap 4.1 中悬停时的下拉子菜单
- javascript - 如何使用 Jasmine 测试 Angular 6 中包装在 ng-container 中的元素?
- vba - 如何为数据透视表选择数据源的动态范围(从活动选择中)
- android - E/libEGL: validate_display:99 错误 3008 (EGL_BAD_DISPLAY)
- c# - 难倒递归解决方案
- azure - 在 Azure 中通过 ARM 模板部署 Windows 和 Linux VM