Re: Shell Name Space Extension
От: EDimon  
Дата: 17.01.05 13:46
Оценка: 1 (1)
Здравствуйте, idiMAN, Вы писали:

MAN>2) Как сделать чтобы при открытии моей виртуальной папки, отображающей компьютер, происходило перенаправление на браузинг этого компьютера, т.е. открывалось окно \\Computer


#include <ShlObj.h>

//////////////////////////////////////////////////////////////////////////

int main(int _c, char *argv[]) 
{
    __Verify(SUCCEEDED(OleInitialize(NULL)));

    {
        CComPtr<IShellFolder> PtrIShellFolder;

        HRESULT hr = SHGetDesktopFolder(&PtrIShellFolder);
        if (SUCCEEDED(hr))
        {
            ULONG nEaten = 0;
            ULONG nAttributes = 0;
            
            CComPtr<IMalloc> PtrIMalloc;
            __Verify(SUCCEEDED(SHGetMalloc(&PtrIMalloc)));

            LPITEMIDLIST pidl;
            hr = PtrIShellFolder->ParseDisplayName(NULL, 
                NULL, 
                L"\\\\computer_of_your_domain", 
                &nEaten, 
                &pidl, 
                &nAttributes);

            if (SUCCEEDED(hr))
            {
                                // На клик можно отдавать указатель на этот интерфейс или пидл полученый выше
                CComPtr<IShellFolder> PtrINetFolder;
                hr = PtrIShellFolder->BindToObject(pidl, 
                    NULL, 
                    IID_IShellFolder, 
                    (PVOID*)&PtrINetFolder);

                if (SUCCEEDED(hr))
                {
                    CComPtr<IEnumIDList> PtrIEnumIDLIST;
                    hr = PtrINetFolder->EnumObjects(NULL, 
                        SHCONTF_FOLDERS|SHCONTF_NONFOLDERS, 
                        &PtrIEnumIDLIST);

                    if (SUCCEEDED(hr))
                    {
                        ULONG nFetch;
                        LPITEMIDLIST pidl2;
                        while(PtrIEnumIDLIST->Next(1, &pidl2, &nFetch) == S_OK)
                        {
                            STRRET str;
                            if (SUCCEEDED(PtrINetFolder->GetDisplayNameOf(pidl2, 
                                SHGDN_NORMAL, 
                                &str)))
                            {
                                if (str.uType == STRRET_CSTR)
                                {
                                    _tprintf(__T("%s\n"), str.cStr);
                                }
                                else if (str.uType == STRRET_WSTR)
                                {
                                    _tprintf(__T("%ls\n"), str.pOleStr);
                                    PtrIMalloc->Free(str.pOleStr);
                                }
                            }

                            PtrIMalloc->Free(pidl2);
                        }
                    }
                }

                PtrIMalloc->Free(pidl);
            }
        }
    }

    CoUninitialize();
}


Надеюсь поможет
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.