我知道windows通用对话框有一个IShellBrowser接口,它的类名是'SHELLDLL_DefView'。请参阅this。有没有办法从对话框中获取IShellBrowser?
如何获取文件打开对话框的IShellBrowser接口? (文件打开对话框在外面,不是我的应用程序的。)
This与我的问题相同,但是是delphi(?)ver。 我不知道delphi代码。如何解决这个问题作为C++或MFC代码?
我知道windows通用对话框有一个IShellBrowser接口,它的类名是'SHELLDLL_DefView'。请参阅this。有没有办法从对话框中获取IShellBrowser?
如何获取文件打开对话框的IShellBrowser接口? (文件打开对话框在外面,不是我的应用程序的。)
This与我的问题相同,但是是delphi(?)ver。 我不知道delphi代码。如何解决这个问题作为C++或MFC代码?
下面是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
服务并要求theIShellBrowser
interface完成的。
Delphi代码只有两行。你有哪些麻烦? –
为什么首先需要文件打开对话框的“IShellBrowser”?你打算用它做什么?你不拥有别人的对话,那么你为什么要乱用它呢? –