Root von SHBrowseForFolder setzen



  • void GUIShellBrowserDialog::SetCSIDL(int csidl)
    {
    	m_csidl = csidl;
    }
    
    std::string GUIShellBrowserDialog::Browse() const
    {
    	LPITEMIDLIST pidlroot = NULL;
        LPITEMIDLIST pidlselect = NULL;
    	LPMALLOC pmalloc = NULL;
    	BROWSEINFO bi;	
    
    	char retval[MAX_PATH + 1] = {0};
    	char displayname[MAX_PATH + 1] = {0};
    
    	strncpy(displayname, m_displayname.c_str(), sizeof(displayname)-1);
    
    	if(SHGetMalloc(&pmalloc) == NOERROR)
    	{
    		if(m_csidl)
    			SHGetSpecialFolderLocation(m_parent, m_csidl, &pidlroot);
    
    		memset(&bi, 0, sizeof(BROWSEINFO));
    		bi.ulFlags = FlagsToValue();
    		bi.hwndOwner = m_parent;
    		bi.pidlRoot  = pidlroot;
    		bi.pszDisplayName = displayname;
    		bi.lpszTitle = m_title.c_str();	
    
    		if((pidlselect = SHBrowseForFolder(&bi)) != NULL)
    		{
    			MessageBox(0, displayname, displayname, 0);
    			strncpy(retval, displayname, sizeof(retval)-1);
    			SHGetPathFromIDList(pidlselect, retval);
    			if(*retval == 0) 
    				strncpy(retval, displayname, sizeof(retval)-1);
    			pmalloc->Free(pidlselect);
    		}
    
    		if(pidlroot) pmalloc->Free(pidlroot);
    
    		pmalloc->Release();
    	}
    
    	return std::string(retval);
    }
    

    ich kann jetzt mit hilfe von

    SetCSIDL(CSIDL_NETWORK);
    

    dirkt auf "My Network Places" springen; bzw. "My Network Places" ist der Root des angezeigten Baumes.

    das ganze sieht jetzt so aus

    - My Network Places
    | - Entire Network
      | + Microsoft Windows Network
      | + Directory
      + c$ on someserver
      + temaballer.de
    

    besteht die möglichkeit, dass "Entire Network" oder gar "Microsoft Windows Network" die Root ist?



  • google mal nach CSIDL. In der MSDN solltest du alle verfügbaren CSIDLs finden. Ich war selber erstaunt, wie viele es davon giebt :).



  • danke;
    die kenn ich aber schon;
    muss ich wohl selbst was stricken



  • hi.

    ich benutze jetzt WNetOpenEnum und WNetEnumResource um die domains und deren pcs selber zu browsen;
    hab aber ein kleines nice-to-have problem.

    wenn die Domain mit SHBrowseForFolder z.b. so angezeigt wird

    Dia2k

    dann sieht sie beim enumerieren so aus

    DIA2K

    das sieht aber nicht so schön aus; servernamen werden auch in Großbuchstaben zurück gegeben; hab ich ne chance, die "schönen" Namen zu erhalten?


Anmelden zum Antworten