Dateityp mit eigenem Icon erstellen



  • Hallo,
    bisher haben meine Programme fast immer im txt-Format geschrieben und gelesen.
    Jetzt würde mich interessieren, wie ich ein eigenes Datei-Format machen und diesen Dateien ein selbstgemaltes Icon geben kann. Wie ich das Icon im ico-Format malen kann, weiß ich, aber nicht, wie man den Dateityp erstellt und ihm dieses Icon gibt.



  • Das ist eine Frage des Betriebssystems, aber nicht von C++.



  • Genau.
    Welches Icon angezeigt wird bestimmt der Desktop bzw. File-Browser.

    Falls es um Windows gehen sollte (was ich anhand der Extension .ico jetzt mal vermute):

    Die File Extension wird über den "File-Typ" bestimmt. Dafür gibt es in der Registry die Keys

    HKEY_CURRENT_USER\Software\Classes
    HKEY_LOCAL_MACHINE\SOFTWARE\Classes
    

    Wie die Sub-Keys dort genau aufgebaut sind ergoogelst du dir am besten selbst. Auf jeden Fall kann man da eintragen welche Extension man verknüpfen möchte, und ein Default-Icon eintragen.

    Weiters gibt es File-Typen wo Windows das Icon direkt aus dem File laden kann, z.B. .exe Files. Dort ist dann z.B. einfach "%1" als "DefaultIcon" eingetragen.

    Und dann gibt es noch die Möglichkeit einen "IconHandler" einzutragen um Files mit der selben Extension unterschiedliche Icons zu verpassen, z.B. abhängig vom File-Inhalt. (Der Inhalt des "IconHandler" Keys ist eine GUID, ich vermute mal das wird die GUID einer COM Klasse sein, welche der Explorer dann verwendet um das Icon zu bestimmen.) Visual Studio verwendet das z.B. um bei .sln Files anzuzeigen welche Visual Studio Version verwendet wird.

    Neben Icons kann man dann in den "Classes" Sub-Keys auch Dinge wie Context-Menu Einträge anlegen, inklusive der Möglichkeit zu bestimmen was die Standard-Einträge wie "open" oder "print" für eine Aktion auslösen sollen, und der Möglichkeit zu bestimmen was passiert wenn man ein File doppelklickt (bzw. ein Programm anfordert dass die "default action" für ein File ausgeführt werden soll).
    (Was nebenbei auch eine schöne Möglichkeit ist Windows quasi unbedienbar zu machen: unter "exefile" das "command" für die "open", "runas" und "runasuser" Actions auf z.B. "notepad.exe" ändern - oder gleich einen Filenamen der üerhaupt nicht existiert. Würde ich aber wirklich nicht empfehlen, ich wüsste nämlich selbst nicht wie man das ohne "Safe Mode with Command Prompt" wieder geradebiegen kann -- weil man so halt dummerweise keine einzige .exe mehr über den Desktop/Explorer starten kann. Selbst die Task-Manager Hotkeys machen dann nicht mehr taskmgr.exe auf sondern starten statt dessen Notepad.)



  • Danke! Ich probier's gleich aus!



  • ps: Es könnte auch leicht sein dass es APIs gibt die man verwenden kann/sollte um dort neue Einträge zu machen, bzw. dass es noch weitere relevante Registry-Keys gibt die man zusätzlich verwenden kann/sollte. Google einfach ein wenig selbst zu dem Thema.

    Weiters kann es leicht sein dass dein Installer, falls du einen verwendest, eine eigene Funktion anbietet um eigene File-Typen zu registrieren. Das wäre dann eine selbstgebastelten Lösung vorzuziehen, da der Installer dann normalerweise auch dafür sorgt dass beim Deinstallieren alles sauber wieder entfernt wird.



  • Dieser Thread wurde von Moderator/in Arcoth aus dem Forum C++ (alle ISO-Standards) in das Forum Themen rund um die IT verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Log in to reply