Dateiendung eim System registrieren



  • Hi Leutz,

    ich schreib gerade für ein Prog von mir eine kleine Installroutine. In diese Funktion soll auch eine gewisse Dateiendung im System registrieren so das ich im Explorer einfach die gespeicherte datei anklicken kann und mein Prog wird geöffnet.Kann mir jemand erklären wie ich das hin bekomme? 😕 😕
    Zweite Frage dazu wie kann ich solche Einstellungen auslesen ? Also herausfinden welches Programm bei welcher Endung gestartet wird ? 😕 😕



  • Du erstellst unter HKEY_CLASSES_ROOT einen key den du ".deineendung" nennst, also nehmen wir mal ".waw", dann schreibst du unter den Default Wert einen beliebigen Namen zum Beispiel "WAWFiles".

    Jetzt erstellst du unter HKEY_CLASSES_ROOT einen neuen key mit dem Namen "WAWFiles", dann erstellst du die folgende Struktur:

    WAWFiles
    ----shell
    ----shell----open
    ----shell----open----command

    In den Default Wert von command schreibst du dann welches Programm aufgeführt werden soll, nehmen wir mal als Beispiel der Opera soll aufgerufen werden, dann steht da ""C:\Programme\Opera7\Opera.exe" "%1""

    So kannst du dein eigenes Programm bei einer Endung ausführen, ansosnten guck dir einfach mal den key ".html" unter HKEY_CLASSES_ROOT an, dann wirst du das Prinzip schon verstehen!



  • void CNewsDlg::RegisterFileType()
    {
        CString exec;
        GetModuleFileName(0,exec.GetBuffer(260),260);
        exec.ReleaseBuffer();
    
        SHSetValue(HKEY_CLASSES_ROOT,_T(".news"),NULL,REG_SZ,_T("news_file"),9*sizeof(TCHAR));
        SHSetValue(HKEY_CLASSES_ROOT,_T("news_file"),NULL,REG_SZ,_T("News Installation File"),22*sizeof(TCHAR));
        SHSetValue(HKEY_CLASSES_ROOT,_T("news_file\\DefaultIcon"),NULL,REG_SZ,exec+_T(",0"),exec.GetLength()*sizeof(TCHAR)+2*sizeof(TCHAR));
        exec=_T("\"")+exec+_T("\" -newsfile %1");
        SHSetValue(HKEY_CLASSES_ROOT,_T("news_file\\Shell"),NULL,REG_SZ,_T("Install"),7*sizeof(TCHAR));
        SHSetValue(HKEY_CLASSES_ROOT,_T("news_file\\Shell\\Install\\Command"),NULL,REG_SZ,exec,exec.GetLength()*sizeof(TCHAR));
        exec=_T("\"notepad.exe\" %1");
        SHSetValue(HKEY_CLASSES_ROOT,_T("news_file\\Shell\\Edit\\Command"),NULL,REG_SZ,exec,exec.GetLength()*sizeof(TCHAR));
        SHChangeNotify(SHCNE_ASSOCCHANGED,0,0,0);
    }
    

Anmelden zum Antworten