Anwendung zur Erweiterung finden.



  • Wie kann ich am einfachsten eine Anwendung starten, die für eine bestimmte Dateierweiterung registriert ist, ohne das ich eine entsprechende Datei hab, die geöffnet werden soll?



  • In der Registry nachschauen, welche Anwendung für den Dateityp registriert ist. Steht im Unterschlüssel HKEY_CLASSES_ROOT, ist in der WinAPI-Hilfe dokumentiert und auch mit dem Registrierungseditor leicht nachvollziehbar.



  • Hatte ich schon befürchtet, dass das wieder so ein Registry gefrickel wird. Ne einfache Funktion in der WinAPI gibts da nicht?



  • naja du kannst doch - so weit ich mich erinnere - einfach mit shellexcute die datei "starten" Dann sollte imho das prog geöffnet werden.

    mfg tobZel



  • Ja, aber ich hab die Datei nicht.



  • 1000000 schrieb:

    Ja, aber ich hab die Datei nicht.

    Dann erstelle eine leere Datei und gib der leeren Datei die entsprechende Endung :

    // 1. Datei kann leer sein, hauptsache die Endung stimmt
    // 2. Pfad und Dateiname müssen aber existieren
    
     unsigned char datei  [] = "C:\\TEMP\\fake.txt";
     unsigned char pfad   [] = "C:\\TEMP\\";
     unsigned char buffer [400]; // enthält nach Aufruf von FindExecutable () den Pfad und Name 
                                 // des für diesen Dateityps registrierten Programms
    
     unsigned int  error     = (unsigned int) FindExecutable (datei,pfad,buffer);
    
     switch ( error ) {
      case  0 : { break; }  // "system is out of memory or resources"
      case  2 : { break; }  // ERROR_FILE_NOT_FOUND
      case  3 : { break; }  // ERROR_PATH_NOT_FOUND
      case 11 : { break; }  // ERROR_BAD_FORMAT
      case 31 : { break; }  // Dateierweiterung nicht registriert
      default : { WinExec (buffer,SW_SHOWNORMAL); break; } // sollte NOTEPAD starten
     }
    


  • Warum einfach, wenns auch umständlich geht?
    Außerdem hat die Anwendung vielleicht gar keine Schreibrechte in C:\TEMP 🙄



  • @audacia: Jo, seh ich genau so.

    @merker:

    MSDN zu WinExec schrieb:

    Note: This function is provided only for compatibility with 16-bit Windows. Applications should use the CreateProcess function.

    Quelle: http://msdn2.microsoft.com/en-us/library/ms687393.aspx


Anmelden zum Antworten