【问题标题】:Is there a way to get IShellBrowser from a dialog?有没有办法从对话框中获取 IShellBrowser?
【发布时间】:2016-11-30 01:36:57
【问题描述】:

我知道 Windows 通用对话框有一个 IShellBrowser 接口,它的类名是“SHELLDLL_DefView”。参考this

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

This 与我的问题相同,但是是 delphi(?) 版本。 我不知道德尔福代码。如何用 C++ 或 MFC 代码解决这个问题?

【问题讨论】:

  • Delphi 代码只有两行。您在哪个部分遇到了问题?
  • 为什么首先需要文件打开对话框的IShellBrowser?你打算用它做什么?你不拥有别人的对话,那你为什么要搞砸呢?

标签: c++ shell delphi mfc dialog


【解决方案1】:

这是 Delphi 代码的 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

Querying information from an Explorer window

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

【讨论】:

  • IShellWindows 只能找到资源管理器窗口,不是吗?
  • @Empty: "代表所有打开的shell窗口"
  • 打开shell windows是什么意思?文件打开对话框属于Shell窗口吗?我目前使用“从资源管理器窗口查询信息”一文中的代码。而且我已经测试了代码,但它只能找到当前打开的资源管理器窗口,没有找到当前打开的公共文件打开对话框。
  • @Empty:文件对话框本身,没有。作为一个孩子嵌入其中的资源管理器窗口,是的。
  • 我完全阅读了“从资源管理器窗口查询信息”的帖子,但我找不到有关获取文件打开对话框的 IShellBrowser 界面的方式的信息。
猜你喜欢
  • 2013-10-09
  • 2012-08-23
  • 1970-01-01
  • 2014-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-21
  • 1970-01-01
相关资源
最近更新 更多