Сетевое окружение

Тема в разделе "WASM.WIN32", создана пользователем donaire, 28 апр 2006.

  1. donaire

    donaire New Member

    Публикаций:
    0
    Регистрация:
    8 дек 2004
    Сообщения:
    25
    Адрес:
    k-jarve
    Вот код:



    int CALLBACK fnсallback(HWND hwnd, UINT msg, LPARAM lParam, LPARAM lpData)

    {

    switch(msg)

    {

    case BFFM_INITIALIZED:

    if(lpData)

    ::SendMessage(hwnd, BFFM_SETSELECTION, TRUE, lpData); //это соообщение посылается окну диалога выбора папки

    break;

    }

    return 0;

    }



    if(SUCCEEDED(CoInitialize(NULL))) //инициализируем СОМ

    {

    LPITEMIDLIST pidl = NULL; //ПИДЛ

    TCHAR szCurDir[MAX_PATH] = {0};



    GetCurrentDirectory(MAX_PATH, szCurDir);

    SHGetSpecialFolderLocation(this->m_hWnd, CSIDL_NETWORK, &pidl);



    BROWSEINFO bi = {0};

    bi.hwndOwner = this->m_hWnd;

    bi.pidlRoot = pidl; //если НУЛЛ, то поиск начинается как установит система(??? с Десктопа)

    bi.lpszTitle = _T("Select folder for proect"); //заголовок диалога

    bi.lParam = 0;//(LPARAM)szCurDir; //эти данные посылаются каллвак ф-ии 4м параметром

    bi.lpfn = fnсallback;

    bi.ulFlags = BIF_BROWSEFORCOMPUTER /*| BIF_NEWDIALOGSTYLE | BIF_NONEWFOLDERBUTTON*/;



    pidl = SHBrowseForFolder(&bi);



    if(pidl)

    {

    TCHAR szDisplayName[MAX_PATH];

    SHGetPathFromIDList(pidl, szDisplayName);

    ::SetDlgItemText(this->m_hWnd, IDC_HOST, /*bi.p*/szDisplayName);

    // ::MessageBox(NULL, szDisplayName, _T("Мы остановились на..."), MB_OK);



    CoTaskMemFree(pidl);

    }



    CoUninitialize();

    }



    При выборе компьютера из сети и щелчке на нём не получаю имени компьютера, например //donaire

    а если выберу папку на этом комп., то строка возвращается, например //donaire/my_folder



    Какие надо флаги ставить, как решить проблему?
     
  2. Sharp

    Sharp New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2003
    Сообщения:
    143
    Адрес:
    Ukraine
    Код (Text):
    1.         pidl = SHBrowseForFolder(&bi);
    2.  
    3.         IShellFolder *iSF = NULL;
    4.         STRRET sr;
    5.         SHGetDesktopFolder(&iSF);
    6.         iSF->GetDisplayNameOf( pidl, SHGDN_FORPARSING, &sr );
    7.         wprintf(L"%s\n", sr.pOleStr );


    У меня так заработало