首页 > 解决方案 > 如何在 C# 中获取 Web 浏览器控件的查找对话框?

问题描述

我想将查找对话框(使用 control + F 打开)作为对象,以了解它是否处于活动状态。

我怎么做?

我检查了 Web 浏览器控件的所有参数,但一无所获。

标签: c#winforms

解决方案


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 枚举属于特定进程的所有窗口?


推荐阅读