Здравствуйте, EDimon, Вы писали:
ED>int main(int _c, char *argv[])
ED>{
ED> __Verify(SUCCEEDED(OleInitialize(NULL)));
ED> {
ED> CComPtr<IShellFolder> PtrIShellFolder;
ED> HRESULT hr = SHGetDesktopFolder(&PtrIShellFolder);
ED> if (SUCCEEDED(hr))
ED> {
ED> ULONG nEaten = 0;
ED> ULONG nAttributes = 0;
ED> CComPtr<IMalloc> PtrIMalloc;
ED> __Verify(SUCCEEDED(SHGetMalloc(&PtrIMalloc)));
ED> LPITEMIDLIST pidl;
ED> hr = PtrIShellFolder->ParseDisplayName(NULL,
ED> NULL,
ED> L"\\\\computer_of_your_domain",
ED> &nEaten,
ED> &pidl,
ED> &nAttributes);
ED> if (SUCCEEDED(hr))
ED> {
ED> // На клик можно отдавать указатель на этот интерфейс или пидл полученый выше
ED> CComPtr<IShellFolder> PtrINetFolder;
ED> hr = PtrIShellFolder->BindToObject(pidl,
ED> NULL,
ED> IID_IShellFolder,
ED> (PVOID*)&PtrINetFolder);
...
ED>
ED>Надеюсь поможет
Помогло
Большое спасибо за совет, чесно сказать я уже прочитал на сайте статью Игоря Вартанова
"Как получить ITEMIDLIST для заданного файла или каталога?"Автор(ы): Игорь Вартанов
, где как раз описывается рекомендованный Вами способ, коим я и воспользовался.
Я получаю pidl для "\\Computer" и в методе IContextMenu.InvokeCommand вызываю IShellBrowser.BrowseObject(pidl, SBSP_DEFBROWSER or SBSP_OPENMODE or SBSP_ABSOLUTE), т.е при клике передаю pidl. А вот с передачей интерфейса через IShellFolder.BindToObject что-то не получается, посто я пока не смог написать реализацию данного метода в случае если на вход передается multi-level pidl, а написал только для single-level pidl. Может кто подскажет как правильно реализовать обработку multi-level pidl в методе IShellFolder.BindToObject.