wie kann ich eine dateiendung meinem programm zuweisen?

  • hallo


    ich möchte das z.b. alle dateien mit der dateiendung .meinedateiendung mit meinem script geöffnet werden.

    bis jetzt weiß ich das dafür ein registryeintrag verantwortlich ist.

    jetzt hab ich aber noch ein paar probleme:

    -was passiert genau wenn dann auf die datei doppelklicke(also ob mein programm dann irgendwie mit einer komandozeile oder so gestarrtet wid oder so ähnlich.)
    -wie kann ich ein icon für die datei senden?
    -wie bekomme ich es hin das beim rechtsklicken zb edit script oder run script oder so steht?


    ich hoffe ihr wisst was ich mein:D

    // ein untersychlüssel von hkeylocalmschine\schlüssel ist hkeylocalmschine\schlüssel\unterschlüssel oder? nur damit ich das richtig versteh...


    mfg

    Einmal editiert, zuletzt von derda (8. Juli 2007 um 17:52)

  • Zitat

    bis jetzt weiß ich das dafür ein registryeintrag verantwortlich ist.


    Unter:

    HKEY_CLASSES_ROOT\ Unknown\ shell

    einen neuen Schlüssel "Open" anlegen. Legen Sie unter dem neuen Schlüssel einen weiteren Unterschlüssel an und nennen ihn "command". Klicken Sie nun "command" an, dann finden Sie im rechten Fenster die Zeichenfolge "Standard". Weisen Sie nun "Standard" das gewünschte Programm zu (z.B. C:\Windows\notepad.exe %1).

    Ab Windows XP gibt es den Key "openas", Sie müssen den oben beschriebenen Eintrag jetzt hier durchführen.

    Ist ein Auszug aus WinFAQ.

    Zitat

    -was passiert genau wenn dann auf die datei doppelklicke(also ob mein programm dann irgendwie mit einer komandozeile oder so gestarrtet wid oder so ähnlich.)


    Beim Öffnen wird die Datei ganz normal abgearbeitet. Wenn Du sie z.B. mit Notepad öffnest, versucht Notepad die Datei darzustellen.

    Zitat

    -wie kann ich ein icon für die datei senden?


    Ne, weiß leider net was Du meinst.

    Zitat

    -wie bekomme ich es hin das beim rechtsklicken zb edit script oder run script oder so steht?


    Steht auch in der WinFAQ. Such bei google mal nach winfaq+download. :D

  • hi


    danke für die tips... kann man mit autoit auch unterschlüssel machen?

    Zitat

    Zitat:
    -wie kann ich ein icon für die datei senden?

    Ne, weiß leider net was Du meinst.

    öh ich meine setzten

    Zitat

    -was passiert genau wenn dann auf die datei doppelklicke(also ob mein programm dann irgendwie mit einer komandozeile oder so gestarrtet wid oder so ähnlich.)

    Beim Öffnen wird die Datei ganz normal abgearbeitet. Wenn Du sie z.B. mit Notepad öffnest, versucht Notepad die Datei darzustellen.

    ja das ist mir schon klar... aber wie weiß notepad was er öffnen muss?


    und nach winfaq google ich jetzt mal...


    mfg

  • Zitat

    kann man mit autoit auch unterschlüssel machen?


    Klar, gib einfach den Schlüssel so weit an, wie du in brauchst.

    RegWrite("HKLM\Software\test\test1", "Testnaem", "REG_SZ", "Testwert)

    erstellt den Schlüssel auch, wenn HKLM\Software\test noch nicht existiert.

    Zitat

    öh ich meine setzten


    So, wie z.B. der Block bei Notepad-Dateien?
    Steht garantiert auch in WinFAQ.

    Zitat

    ja das ist mir schon klar... aber wie weiß notepad was er öffnen muss?


    Hä??
    Ich ging davon aus, dass Du eine Datei ausführst. Diese ist Notepad zugeordnet worden(txt stanadrtmäßig, alles andere über dich).
    Nachdem Du deine Datei startest, checkt Windows, welchem Prog sie zugeordnet ist. Dieses wird dann gestartet und versucht auf seinem Standartverfahren den Inhalt deiner datei wiederzugeben.

    Sollte das nicht das gewesen sein, was Du hören wolltest, formuliere deine Frage bitte so, dass ich sie verstehe.

    • Offizieller Beitrag

    Hallo!

    In der Registry unter HKEY_CLASSES_ROOT wird der Schlüssel .meinedateiendung und meinedateiendungfile erstellt. Unter dem Schlüssel .meinedateiendung wird dem Bezeichner (Standard) der Wert meinedateiendungfile eingetragen.

    Unter dem Schlüssel meinedateiendungfile werden 2 weitere Schlüssel angelegt, diese heißen DefaultIcon und Shell. Unter DefaultIcon wird dem Bezeichner (Standard) der Dateiname mit Pfad zum Icon eingetragen das den Dateien mit der Endung .meinedateiendung zugewiesen wird.

    Unter dem Schlüssel Shell wird noch der Schlüssel Open und darunter der Schlüssel Command angelegt. Unter Command wird dem Bezeichner (Standard) der Dateiname mit Pfad zum Programm eingetragen, dass gestartet werden soll wenn auf die Datei mit der Endung .meinedateiendung doppelt geklickt wird, mit dem Zusatz %1. Also in etwa so "D:\Pfad\Programm.exe %1", in %1 wird dabei der Name eingetragen auf den doppelt geklickt wurd und wird dem Programm als Paramter übergeben. Das heißt, dass Programm muss übergebene Parameter auswerten.

    Du kannst dir das ganze ja einfach mal bei .au3 Dateien anschauen, die entsprechenden Schlüssel heißen .au3 und AutoIt3Script.

    Ich habe vor langer Zeit mal eine Funktion für Galenda geschrieben die genau das macht -> Feedback Test

  • //lol das is mal nen beitrag... ihc versuch ihn zu verstehen und melde mich dann wieder...


    //ok so langsam schnall ichs:D aber eins verwirt mich immernoch... was soll (standart) sein?

    mfg

    2 Mal editiert, zuletzt von derda (8. Juli 2007 um 18:29)

    • Offizieller Beitrag

    Wenn man einen neuen Schlüssel in der Registry anlegt existiert immer der Eintrag (Standard) REG_SZ (Standard) und dem muss der neue Wert zugewiesen werden. Z.B. (Standard) REG_SZ "meinedateiendungfile".

    Hier mal eine Funktion die dir vllt. weiterhilft.

    Spoiler anzeigen
    [autoit]

    ;~ Aufruf: _RegisterFileType("[.]FileType"[, "Pfad zur Anwendung", "Pfad zum ICON"])
    ;~ Wird "Pfad zur Anwendung" weggelassen wird die aktuelle Anwendung eingetragen
    ;~ Wird "Pfad zum ICON" weggelassen wird das 1. Icon aus der Anwendung eingetragen
    ;~ Autor: bernd670
    Func _RegisterFileType($sFileType, $sAppName = "", $sAppIcon = "")
    Dim $sTypeName

    If $sFileType = "" Then
    SetError(1)
    Return 0
    EndIf

    If $sAppName = "" Then $sAppName = @ScriptFullPath
    If $sAppIcon = "" Then $sAppIcon = $sAppName

    $sAppName = '"' & $sAppName & '"'
    $sAppIcon = '"' & $sAppIcon & '"'

    [/autoit] [autoit][/autoit] [autoit]

    $sFileType = StringLower($sFileType)

    If StringLeft($sFileType,1) <> "." Then
    $sTypeName = $sFileType
    $sFileType = "." & $sFileType
    Else
    $sTypeName = StringRight($sFileType, StringLen($sFileType) -1)
    EndIf

    $sTypeName = $sTypeName & "file"

    RegWrite("HKEY_CLASSES_ROOT\" & $sFileType, "", "REG_SZ", $sTypeName)
    RegWrite("HKEY_CLASSES_ROOT\" & $sTypeName & "\shell\open\command", "", "REG_SZ", $sAppName & ' "%1"')
    RegWrite("HKEY_CLASSES_ROOT\" & $sTypeName & "\DefaultIcon", "", "REG_SZ", $sAppIcon & ',0')

    SetError(0)
    Return 1
    EndFunc

    [/autoit]
  • ok thx

    beim stöbern in der registry is mir noch was aufgefallen...

    - was ist der persistenthandler?
    -was ist shellnew?
    -was bringt ',0'?

    mfg

  • bernd670 thx für die kleine Funktion -> jetzt weis ich was ich bei meinem derzeitigem Programm noch hinzufügen möchte

    und thx @derda für die Frage und Inspiration

    • Offizieller Beitrag
    Zitat

    ok thx

    beim stöbern in der registry is mir noch was aufgefallen...

    - was ist der persistenthandler?
    -was ist shellnew?
    -was bringt ',0'?

    mfg

    • Was ist der PersistentHandler?
      Wenn unter dem Schlüssel PersistentHandler der Wert {5e941d80-bf96-11cd-b579-08002b30bfeb} eingetragen ist wird die Dateiendung in die Suchfunktion mit einbezogen. Ohne den Schlüssel werden die Dateien mit den Endungen bei der Suche ignoriert.
    • Was ist ShellNew?
      Hier wird die Aktion eingetragen die ausgeführt werden soll, wenn man auf dem Desktop rechtsklickt und Neu wählt.
    • Was bringt ",0"?
      ",0" wählt das 1. Icon aus der angegebenen Datei. Beim 2. Icon wäre es ",1" usw.
  • z.B.:

    [autoit]

    ; Kontextmenü 'In Ordner kopieren' und ' In Ordner verschieben' hinzufügen.

    [/autoit][autoit][/autoit][autoit]

    RegWrite('HKEY_CLASSES_ROOT\AllFilesystemObjects\shellex\ContextMenuHandlers\In Ordner kopieren', _
    '', 'REG_SZ', '{C2FBB630-2971-11D1-A18C-00C04FD75D13}')
    RegWrite('HKEY_CLASSES_ROOT\AllFilesystemObjects\shellex\ContextMenuHandlers\In Ordner verschieben', _
    '', 'REG_SZ', '{C2FBB631-2971-11D1-A18C-00C04FD75D13}')

    [/autoit][autoit][/autoit][autoit]

    ; Kontextmenü 'In Ordner kopieren' und ' In Ordner verschieben' entfernen.

    [/autoit][autoit][/autoit][autoit]

    ;RegDelete('HKEY_CLASSES_ROOT\AllFilesystemObjects\shellex\ContextMenuHandlers\In Ordner kopieren')
    ;RegDelete('HKEY_CLASSES_ROOT\AllFilesystemObjects\shellex\ContextMenuHandlers\In Ordner verschieben')

    [/autoit]

    ergibt das hier:

    Spoiler anzeigen


    Gruß
    Greenhorn


  • danke vielmals für die antworten, ich beschäftige mich morgen ausführlich damit... huete aber ncihtmehr, muss noch 2 referate machen :rolleyes:


    Zitat

    und thx @derda für die Frage und Inspiration

    mach ich doch gerne :keks:

    //hey greenhorn kannst du mir sagen wie ich das in ordner verschieben mit einem programm verbinden kann?


    mfg

    Einmal editiert, zuletzt von derda (13. Juli 2007 um 20:27)

  • Habe folgendes Problem !
    RegWrite gibt
    Erfolg 1 zurück.
    aber in der Registrie steht nix


    von: Greenhorn am Sonntag, 8. Juli 2007, 19:39 geschriebeben

    [autoit]

    ; Kontextmenü 'In Ordner kopieren' und ' In Ordner verschieben' hinzufügen.

    [/autoit][autoit][/autoit][autoit]

    RegWrite('HKEY_CLASSES_ROOT\AllFilesystemObjects\shellex\ContextMenuHandlers\In Ordner kopieren', _
    '', 'REG_SZ', '{C2FBB630-2971-11D1-A18C-00C04FD75D13}')
    RegWrite('HKEY_CLASSES_ROOT\AllFilesystemObjects\shellex\ContextMenuHandlers\In Ordner verschieben', _
    '', 'REG_SZ', '{C2FBB631-2971-11D1-A18C-00C04FD75D13}')

    [/autoit][autoit][/autoit][autoit]

    ; Kontextmenü 'In Ordner kopieren' und ' In Ordner verschieben' entfernen.

    [/autoit][autoit][/autoit][autoit]

    ;RegDelete('HKEY_CLASSES_ROOT\AllFilesystemObjects\shellex\ContextMenuHandlers\In Ordner kopieren')
    ;RegDelete('HKEY_CLASSES_ROOT\AllFilesystemObjects\shellex\ContextMenuHandlers\In Ordner verschieben')

    [/autoit]

    edit bernd670: Quellcode neu formatiert

    Einmal editiert, zuletzt von bernd670 (1. September 2009 um 18:09)

  • Bei mir steht immer noch nix in der Registrie

  • ja habe ich, habe auch versucht mit Registrie schließen und öffnen, nix. Mein Betriebssystem ist Vista Home B..

  • Mein Betriebssystem ist Vista Home B..


    Das wird es sein, denke ich ...

    Probiere einmal das Script mit Admin-Rechten auszuführen.

    [autoit]

    ; Script benötigt Administrator-Rechte
    #RequireAdmin
    ; Kontextmenü 'In Ordner kopieren' und ' In Ordner verschieben' hinzufügen.
    RegWrite('HKEY_CLASSES_ROOT\AllFilesystemObjects\shellex\ContextMenuHandlers\In Ordner kopieren', _
    '', 'REG_SZ', '{C2FBB630-2971-11D1-A18C-00C04FD75D13}')
    RegWrite('HKEY_CLASSES_ROOT\AllFilesystemObjects\shellex\ContextMenuHandlers\In Ordner verschieben', _
    '', 'REG_SZ', '{C2FBB631-2971-11D1-A18C-00C04FD75D13}')

    [/autoit]

    AutoIt unter Vista


    Gruß
    Greenhorn