2016-11-30 55 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

相關問題