none
SHBrowseForFolder RRS feed

  • Frage

  • Hallo

    Wie erreiche ich beim Einsatz von  SHBrowseForFolder das ich nicht nur den Namen des gewählten Verzeichnisses erhalte, sondern den kompletten Pfad bis dorthin ?

    Beipspiel:  Ich wähle das Verzeichnis v2 aus diesem Pfad. d:\v1\v2

    Die Funktion gibt mir aber nur v2 zurück. ich möchte den kompletten Pfad zurück.

    Also wie es oben schon steht: d:\v1\v2

     

    Oder gibt es dafür eine spezielle Funktion ?

     

    

    

    

    


    Gruss

    • Bearbeitet Henry_2 Freitag, 6. Januar 2012 04:40
    Freitag, 6. Januar 2012 04:39

Antworten

Alle Antworten

  • SHBrowseForFolder liefert nur eine PIDLIST und keinen Pfad. Es kommt also darauf an wie Du die PIDLIST umgewandelt hast inden gewünschten Pfad.
    Verutlich benutzt Du eine falsche Methode.

    Zeiege uns Deinen Code ansonsten schau Dir mal an wie es hier gemacht wird:
    http://www.codeproject.com/KB/shell/cxsbrowsefolder.aspx


    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    Freitag, 6. Januar 2012 06:36
  • Hallo Martin

     

    Hier die Funktion. Ich übergebe ihr das Handle auf das Progr.fenster. Sie meldet lediglich das gewählte Verzeichnis. SHGetPathFromIDList gibt false zurück.

     

    #include <Shlobj.h> 
    
    
    
    void open_DirNameV2(HWND hwnd)
    {
    	BROWSEINFO biSP;
    	char pfadname[1000];
    	char dirname[1000];
    
    	biSP.hwndOwner = hwnd;
    	biSP.pidlRoot = NULL;
    	biSP.pszDisplayName = dirname;
    	biSP.lpszTitle = "Titel";
    	biSP.ulFlags = 0; //BIF_RETURNONLYFSDIRS | BIF_BROWSEINCLUDEURLS;
    	biSP.lpfn = NULL;
    
    
    	SHBrowseForFolder(&biSP);
    
    	MessageBox(NULL,biSP.pszDisplayName,"dir",MB_OK);
    
    	if(SHGetPathFromIDList(biSP.pidlRoot,pfadname) == true)  
    		MessageBox(NULL,pfadname,"rootdirname",MB_OK);
    
    
    
    }
    
    

     


    Gruss
    Freitag, 6. Januar 2012 07:52
  •         SHBrowseForFolder(&biSP);
    
            MessageBox(NULL,biSP.pszDisplayName,"dir",MB_OK);
    
            if(SHGetPathFromIDList(biSP.pidlRoot,pfadname) == true)
                    MessageBox(NULL,pfadname,"rootdirname",MB_OK);
    }

    Du musst den Rückgabewert von SHBrowseForFolder verwenden.

    Lies bitte die Doku und schau Dir dort die Samples an:
    http://msdn.microsoft.com/en-us/library/windows/desktop/bb762115(v=vs.85).aspx


    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    Freitag, 6. Januar 2012 08:13
  • Hallo Martin

     

    Danke !  Genau das wars: ich habe den Returnwert eingesetzt und die Funktion macht endlich, was sie soll :-)


    Gruss
    Samstag, 7. Januar 2012 08:26