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

时间:2016-11-30 01:36:57

标签: c++ shell delphi mfc dialog

我知道windows常用对话框有一个IShellBrowser接口,其类名是'SHELLDLL_DefView'。请参阅this

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

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

1 个答案:

答案 0 :(得分: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();
}

您可能还想阅读以下文章,该文章提供了更为官方(即更可靠但更复杂)的方式来获取给定IShellBrowser的{​​{1}}:

Querying information from an Explorer window

  

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