2016-11-30 57 views
-1

我知道windows通用对话框有一个IShellBrowser接口,它的类名是'SHELLDLL_DefView'。请参阅this有没有办法从对话框中获取IShellBrowser?

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

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

+2

Delphi代码只有两行。你有哪些麻烦? –

+0

为什么首先需要文件打开对话框的“IShellBrowser”?你打算用它做什么?你不拥有别人的对话,那么你为什么要乱用它呢? –

回答

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对于给定HWND

Querying information from an Explorer window

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

+1

IShellWindows只能找到资源管理器窗口,不是吗? – Empty

+0

@Empty:“*表示**所有打开的shell窗口**。”“ –

+0

打开shell窗口是什么意思?文件打开对话框属于Shell窗口?我目前在'从资源管理器窗口查询信息'这篇文章中使用了代码。我已经测试了代码,但它可以找到当前打开的资源管理器窗口,找不到当前打开的公共文件打开对话框。 – Empty

相关问题