Datei-Eigenschaftsdialog (->Explorer)



  • Wenn man im Explorer auf eine Datei rechtsklickt, und dann Eigenschaften wählt, kommt der entsprechende Dialog. Wie kann ich diesen programmiertechnisch für eine bestimmte Datei aufrufen?

    Ich mein nicht das echte Windows-Kontextmenü, sondern das echte Eigenschaftsdialog, wo Größen wie Versionsnummer, Dateiname/größe, etc. auftauchen... Das kann doch nicht so schwer sein!?



  • Ich glaube, da gibt es keinen direkten Befehl. Was du machen kannst, ist per SHGetFileInfo die Infos zu bekommen und dann die DLL zu laden, in der sich der Dialog befindet. Oder mach dir selber einen.



  • Ich glaube, da gibt es keinen direkten Befehl.

    Einen Befehl nicht, aber eine Funktion: ShellExecuteEx.

    BOOL FileProperties(HWND hWndParent, LPCTSTR lpFileName)
    {
      SHELLEXECUTEINFO sei;
    
        ZeroMemory((PVOID)&sei, sizeof(sei));
    
        sei.cbSize     = sizeof(sei);
        sei.fMask      = SEE_MASK_INVOKEIDLIST;
        sei.hwnd       = hWndParent;
        sei.lpVerb     = TEXT("properties");
        sei.lpFile     = lpFileName;
        sei.nShow      = SW_SHOW;
    
      return(ShellExecuteEx(&sei));
    }
    


  • -King- is King!
    Hm, das hatte ich mir in der SDK-Hilfe vorhin auch angeschaut, hab's wohl aber zu schnell überflogen.



  • habs jetzt im bcb als ereignisbehandlungsroutine so:

    HWND hWndParent = MainForm;
    LPCTSTR lpFileName = "C:\Eigene Dateien\test.txt";
    SHELLEXECUTEINFO sei;

    ZeroMemory( ( PVOID )&sei, sizeof( sei ) );

    sei.cbSize = sizeof( sei );
    sei.fMask = SEE_MASK_INVOKEIDLIST;
    sei.hwnd = hWndParent;
    sei.lpVerb = TEXT( "properties" );
    sei.lpFile = lpFileName;
    sei.nShow = SW_SHOW;

    ShellExecuteEx( &sei );

    es kommen keine fehler, jedoch wird auch NICHTS geöffnet oder jegliche reaktion gezeigt; Wieso? (btw: die datei existiert, keine sorge...)



  • weil der dateiname falsch ist.



  • @<Win-Api>
    Erstens solltest du dich bedanken bei -King-, und zweitens wird ein Backslash in konstanten String-Ausdrücken als \\ geschrieben.



  • schnurre. schnurre. danke. danke.



  • Hey nice, nach dem habe ich gerade auch gesucht!
    DANKE AN KING!!!!!!!!!!!! :p
    man sollte sich sofort bedanken



  • Hallo,

    habe obige Routine eingebaut u. mit zwei FileListBoxen kombiniert. Klicke ich also in eines dieser FileListBoxen u. aktiviere damit ein Kontextmenü, über das ich "Eigenschaften" wählen kann, so wird folgendes aufgerufen:

    SHELLEXECUTEINFO sei;
       ZeroMemory(&sei, sizeof(SHELLEXECUTEINFO)); 
       sei.cbSize = sizeof(sei); 
       sei.fMask = SEE_MASK_INVOKEIDLIST; 
       sei.hwnd = Handle; 
       sei.lpVerb = "properties"; 
       if (Form1->KontextMenu1->PopupComponent->Name=="FileListBox1")
         sei.lpFile = (Form1->FileListBox1->FileName).c_str();
       if (Form1->KontextMenu1->PopupComponent->Name=="FileListBox2")
         sei.lpFile = (Form1->FileListBox2->FileName).c_str();
       ShellExecuteEx(&sei);
    

    Problem:
    Bei manchen Dateinamen funktioniert das nicht (z.B. "BSDFS01.dot") u. es kommt eine Fehlermeldung wie z.B: "FileListBox2 konnte nicht gefunden werden...", obwohl ich in die FileListBox1 geklickt habe.

    Wer kann helfen?


Anmelden zum Antworten