有没有办法从对话框中获取IShellBrowser?

Is there a way to get IShellBrowser from a dialog?

本文关键字:获取 IShellBrowser 对话框 有没有      更新时间:2023-10-16

我知道Windows公共对话框有一个IShellBrowser界面,它的类名是'SHELLDLL_DefView'。参考这个。

如何获取文件打开对话框的IShellBrowser界面? (文件打开对话框在外面,而不是我的应用程序。

这与我的问题相同,但是是德尔菲(? 我不知道德尔菲密码。如何以C++或MFC代码的形式解决此问题?

以下是德尔菲代码的 C/C++ 翻译:

const UINT CWM_GETISHELLBROWSER = WM_USER + 7;
IShellBrowser *ShellBrowser = (IShellBrowser*) SendMessage(aDialog, CWM_GETISHELLBROWSER, 0, 0);
if (ShellBrowser) {
ShellBrowser->AddRef();
// use ShellBrowser as needed... 
ShellBrowser->Release();
}

您可能还想阅读以下文章,它提供了一种稍微更官方(即更可靠,但更复杂)的方式来获取给定HWNDIShellBrowser

从资源管理器窗口查询信息

从 ShellWindows 对象开始,该对象表示所有打开的 shell 窗口。您可以使用 Item 属性枚举它们...从每个项目中,我们可以询问它的窗口句柄,看看它是否是我们想要的......好的,现在我们已经通过其IWebBrowserApp找到了该文件夹,我们需要进入顶部的shell浏览器。这是通过查询SID_STopLevelBrowser服务并请求IShellBrowser接口来完成的。