Kontextmenü bei bestimmten Dateitypen erstellen

  • Guten Abend :)

    au3. Dateien kann man ja via Rechtsklick verschieden "öffnen" so was möchte ich auch machen hab leider nur kein Plan wie. :rolleyes:

    Genau gesagt so was will ich machen.

    [Blockierte Grafik: http://s1.directupload.net/images/120202/v4zbqyrz.png]

    Bis jetzt hab ich's geschafft alle Dateien/Ordner via "Senden an" mit meinem Programm zu öffnen was aber nicht wirklich praktisch ist.

    Ich möchte das Kontextmenü nur bei bestimmte Dateitypen und satt "Senden an" ein komplett neuen Eintrag wie dass andere Programme auch machen z.b. Winrar bei .rar Dateien oder AxCrypt bei .axx Dateien etc.

    Thx in advance

    [autoit]


    #region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Icon=Md5.ico
    #AutoIt3Wrapper_Compression=4
    #AutoIt3Wrapper_Res_requestedExecutionLevel=asInvoker
    #AutoIt3Wrapper_AU3Check_Stop_OnWarning=y
    #AutoIt3Wrapper_Run_Tidy=y
    #endregion ;**** Directives created by AutoIt3Wrapper_GUI ****

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

    #include <Crypt.au3>

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

    If $CmdLine[0] = 0 Then
    SendTo()
    Else
    ClipPut(FileGetMD5Hash($CmdLine[1]))
    SplashTextOn("FastGetMD5Hash", "MD5 Hash wurde in die Zwischenablage gespeichert." & @CR & FileGetMD5Hash($CmdLine[1]), 350, 100)
    Sleep(5000)
    SplashOff()
    EndIf

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

    Func FileGetMD5Hash($FilePath)
    Return Hex(_Crypt_HashFile($FilePath, $CALG_MD5))
    EndFunc ;==>FileGetMD5Hash

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

    Func SendTo()
    $SendToDir = RegRead("HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders", "SendTo")
    If FileExists($SendToDir & "\FastGetMD5Hash.lnk") Then
    $Result = MsgBox(36, "FastGetMD5Hash", "Kontextmenü löschen?")
    If $Result = 6 Then
    DelSendTo($SendToDir)
    Else
    AddSendTo($SendToDir)
    EndIf
    Else
    $Result = MsgBox(36, "FastGetMD5Hash", "Kontextmenü anlegen?")
    If $Result = 6 Then
    AddSendTo($SendToDir)
    Else
    DelSendTo($SendToDir)
    EndIf
    EndIf
    EndFunc ;==>SendTo

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

    Func AddSendTo($SendToDir)
    FileCreateShortcut(@ScriptFullPath, $SendToDir & "\FastGetMD5Hash")
    EndFunc ;==>AddSendTo

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

    Func DelSendTo($SendToDir)
    FileDelete($SendToDir & "\FastGetMD5Hash.lnk")
    EndFunc ;==>DelSendTo

    [/autoit]
  • Du könntest es auch einfach so machen, dass dieser Kontextmenü Eintrag bei allen Dateien erscheint.
    Über $CmdLine[1] bekommst du ja sowieso den kompletten Pfad, dort könntest du anhand des Namens ermitteln, um was für eine Datei es sich handelt und wenn es z.B. .rar als Dateiendung hat, könntest du eine Messagebox ausgeben lassen, wo drinne steht " Error : Das Format wird von AxCrypt nicht unterstürzt."

  • Natürlich aber ich will es ja gar nicht unter "Senden an" und zudem wer will schon ein extra langes Kontextmenü ohne Funktion^^

  • Da musst dir mal Tutorials anschauen, wie man Kontextmenü erstellt, davon gibt es genug, wenn man Google benutzt.
    Dort wird auch erklärt, wie man dies für bestimmte Dateiendungen macht.

  • Also gegoogelt hab ich natürlich schon aber mit Autoit hat das wohl noch keiner gemacht.

    über die Regeinträge finde ich leider auch kaum was brauchbares und ausprobieren ist wohl nicht gerade ne gute Idee.

    das Regfile fügt zwar den Eintrag ins Kontextmenü ein jedoch bei Ordner zudem ohne Icon und auch kein "Untermenü".
    Das Programm wird auch nicht gestartet stattdessen wird versucht den Ordner auszuführen.

    hat sonst noch jemand ein Tipp für mich

  • Servous, habe das ganze eben mal ausprobiert, gibt ein kleines Prob .. als Parameter mit %1 sind eine Maximale Anzahl an Zeichen gegeben geschätzt 25 oder so wenn man nun eine Datei auf dem Desktop zb hat ist der Pfad zulange und wird nicht als Parameter Korrekt übergeben :/

    aso, zum Startpost sollte dein Script nicht eher so sein

    Spoiler anzeigen
    [autoit]


    #include <Crypt.au3>

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

    If $CmdLine[1] <> "" Then
    _Crypt_Startup()
    Local $MD5_HASH = _Crypt_HashFile($CmdLine[1],$CALG_MD5)
    ClipPut($MD5_HASH)
    _Crypt_Shutdown()
    Endif
    Exit

    [/autoit]

    dein Script läuft zumindest bei mir nicht^^ xD

    // RegFile mit angehängt habe es unter VLCmp4 getestet zb dort geht es bei langen Dateipfaden nicht ^^

    Gruß Marvin

  • Servous, habe das ganze eben mal ausprobiert, gibt ein kleines Prob .. als Parameter mit %1 sind eine Maximale Anzahl an Zeichen gegeben geschätzt 25 oder so wenn man nun eine Datei auf dem Desktop zb hat ist der Pfad zulange und wird nicht als Parameter Korrekt übergeben :/

    Nö da gibts keine Begrenzung, also zumindestens solange sich der Pfad noch innerhalb der normalen Windows Einschränkungen bezüglich Pfadlänge befindet. Dein Fehler ist es vermutlich lediglich, dass du die Parameter nicht in Anführungszeichen setzt und der Pfad in autoit (oder eben dem Zielprogramm) somit dann in mehrere Parameter zerteilt wird, siehe Hilfe zu cmdline aufrufen.

    So sollte ein korrekter Registry-Wert Eintrag ausschaun:

    Code
    "E:\Files\ggdgdgdgdgdg\dfgdggdg\dfgdfgdgdgd\dfgdgdgdggdgdgdg\Wav2Ac3.exe" "%1" ParameterNr2

    "%1" steht für den Dateipfad
    Parameter2 steht in meinem Fall für den Programm Modus. Ich habe 2 Kontextmenu Einträge, die jeweils einen anderen Paramaeter2 haben. Dadurch kann ich mein Script dann in 2 verschiedenen Modi starten.

    Einmal editiert, zuletzt von misterspeed (3. Februar 2012 um 20:56)

  • Abend, okay habs eben nochmal ausprobiert hast recht :)

    Spoiler anzeigen
    [autoit]


    #include <Crypt.au3>

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

    If $CmdLine[1] <> "" Then
    ToolTip("Creating Hash of "&$CmdLine[1],10,10,"QuickMD5")
    _Crypt_Startup()
    Local $MD5_HASH = _Crypt_HashFile($CmdLine[1],$CALG_MD5)
    ClipPut($MD5_HASH)
    _Crypt_Shutdown()
    MsgBox(64,"QuickMD5","Hash Wert wurde erstellt und in die Zwischenablage kopiert")
    ToolTip("")
    Endif
    Exit

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


    Regfile

    Spoiler anzeigen


    Windows Registry Editor Version 5.00

    [HKEY_CLASSES_ROOT\VLC.mp4\shell\QuickMD5\command]
    @="\"C:\\QuickMD5.exe\" \"%1\""

    Gruß Marvin