Re[2]: Shell Name Space Extension
От: idiMAN  
Дата: 18.01.05 08:05
Оценка:
Здравствуйте, 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.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.