निम्नलिखित BrowseToFolder
फ़ंक्शन AHandle
डिवाइस (यदि मौजूद है) के AFolderPath
फ़ोल्डर (यदि मौजूद है) के विंडोज एक्सप्लोरर के मौजूदा उदाहरण को नेविगेट करता है। यदि आप दूसरे पैरामीटर को निर्दिष्ट नहीं करेंगे, तो शीर्षतम विंडो को नेविगेट करने के लिए लिया जाना चाहिए (या कम से कम प्रलेखन का दावा है; वास्तविकता सबसे पुरानी मौजूदा विंडो लेती है)। समारोह सच देता है, अगर नेविगेशन सफल रहा है, झूठी अन्यथा:
procedure TForm1.Button1Click(Sender: TObject);
var
ExplorerHandle: HWND;
begin
ExplorerHandle := 123456;
if not BrowseToFolder('c:\Windows\System32\', ExplorerHandle) then
ShowMessage('Navigation to a folder failed!')
else
ShowMessage('Navigation to a folder succeeded!');
end;
यहाँ एक complete testing project
और the blog post
जहाँ से मैं प्रेरणा लिया है है:
uses
ActiveX, ShlObj, ShellAPI, SHDocVw;
const
IID_IServiceProvider: TGUID = '{6D5140C1-7436-11CE-8034-00AA006009FA}';
SID_STopLevelBrowser: TGUID = '{4C96BE40-915C-11CF-99D3-00AA004AE837}';
function GetItemIDListFromPath(const AFolderPath: WideString): PItemIDList;
var
Count: ULONG;
Attributes: ULONG;
ShellFolder: IShellFolder;
begin
Result := nil;
if Succeeded(SHGetDesktopFolder(ShellFolder)) then
begin
Count := 0;
if Failed(ShellFolder.ParseDisplayName(0, nil, PWideChar(AFolderPath),
Count, Result, Attributes))
then
Result := nil;
end;
end;
function BrowseToFolder(const AFolderPath: WideString;
AHandle: HWND = HWND_TOPMOST): Boolean;
var
I: Integer;
WndIface: IDispatch;
ItemIDList: PItemIDList;
ShellBrowser: IShellBrowser;
ShellWindows: IShellWindows;
WebBrowserApp: IWebBrowserApp;
ServiceProvider: IServiceProvider;
begin
Result := False;
if Succeeded(CoCreateInstance(CLASS_ShellWindows, nil, CLSCTX_LOCAL_SERVER,
IID_IShellWindows, ShellWindows)) then
begin
for I := 0 to ShellWindows.Count - 1 do
begin
if (AHandle <> HWND_TOPMOST) then
WndIface := ShellWindows.Item(VarAsType(I, VT_I4))
else
WndIface := ShellWindows.Item(VarAsType(SWC_EXPLORER, VT_UI4));
if Succeeded(WndIface.QueryInterface(IID_IWebBrowserApp,
WebBrowserApp)) then
begin
if (AHandle = HWND_TOPMOST) or (WebBrowserApp.HWnd = AHandle) then
begin
if Succeeded(WebBrowserApp.QueryInterface(IID_IServiceProvider,
ServiceProvider)) then
begin
if Succeeded(ServiceProvider.QueryService(SID_STopLevelBrowser,
IID_IShellBrowser, ShellBrowser)) then
begin
ItemIDList := GetItemIDListFromPath(AFolderPath);
Result := Succeeded(ShellBrowser.BrowseObject(ItemIDList,
SBSP_SAMEBROWSER or SBSP_ABSOLUTE));
end;
end;
Break;
end;
end;
end;
end;
end;
यहां उदाहरण के उपयोग है।
आपके पास एक्सप्लोरर के लिए एचडब्ल्यूएनडी है? क्या आप इस के लिए IShellBrowser और IShellView का उपयोग करने का मतलब नहीं हैं? –
@ डेविड हेफरन, मैं आपकी सिफारिश के लिए कुछ जानकारी दूंगा। धन्यवाद। –
@ कबामारू: Google की कोई आवश्यकता नहीं है, क्योंकि आप जानते हैं कि आप एमएसडीएन की ओर बढ़ रहे हैं: ['आईशेलब्रोसर'] (http://msdn.microsoft.com/en-us/library/windows/desktop/bb775123 (v = बनाम। 85) .aspx), ['IShellView'] (http://msdn.microsoft.com/en-us/library/windows/desktop/bb774834 (v = vs.85) .aspx) –