Kontextmenü erkennt den Dateipfad

  • Sooo, ich hab da n Problem...
    WIE kann ich aus dem Kontextmenü des Datei Explorers den genauen Pfad auslesen ???
    Soll bedeuten:
    ich habe eine Kompilierte EXE per Registry in das Kontextmenü eingebunden.

    PHP
    [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\Background\shell\Test Script]
    "Icon"="x:\Bla.ico Icon"
    [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\Background\shell\Test Script\command]
    @="X:\\meine Test.exe"


    Das funzt auch so weit.
    Wenn ich nun im Datei Explorer eine Datei z.B. Test.txt mir rechts anclicke und
    von dort auf meinen Menüeintrag clicke, dann möchte ich den exakten Pfad ermitteln und
    das gewählte File Test.txt mit meinem Programm öffnen und/oder bearbeiten....
    über

    [autoit]


    $FileAuswahl = FileOpenDialog("Auswahl", @ScriptDir, "TEST (*.*)", 2)
    _PathSplit($FileAuswahl, $szDrive, $szDir, $szFName, $szExt)
    $Test_FILE = $szFName & $szExt

    [/autoit]


    öffnet sich zwar das Explorerfenster aber nicht in diesem Pfad, geschweige denn mit der
    gewählten Test.txt.....

    Wie krieg ich das hin ???

  • Hallo du Zauberlehrling (der Buchstaben verwechelt),

    wenn ich dich richtig vertanden habe willst du ein bestimmtes Dateiformat immer mit deiner "X:\\meine Test.exe" öffnen. Dazu solltest du cmdline benutzen. Um zu verstehen was es bewirkt kompiliere einfach dieses kleine Skript als "meine Test.exe":

    [autoit]

    For $i = 1 to $CmdLine[0]
    MsgBox(0,$i & ":",($CmdLine[$i])
    next

    [/autoit]

    klicke danach auf das Contextmenü und schau dir die Messageboxes an, danach weist du wie es funktioniert,

    mfg autoBert

    Einmal editiert, zuletzt von autoBert (13. Januar 2011 um 20:48)

  • Kompiliere mal diesen Code als Mein Test.exe

    Spoiler anzeigen
    [autoit]


    #include <Array.au3>
    #include <File.au3>
    #include <GuiEdit.au3>
    #include <GuiConstantsEx.au3>

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

    If $cmdline[0] > 0 Then
    $file = $cmdline[1]
    Dim $szDrive, $szDir, $szFName, $szExt
    $path = _PathSplit($file, $szDrive, $szDir, $szFName, $szExt)
    $Test_FILE = $szFName & $szExt
    $hGUI = GUICreate("Edit Create", 400, 300)
    $hEdit = _GUICtrlEdit_Create($hGUI, "", 2, 2, 394, 268)
    GUICtrlSetLimit($hEdit, 0x7FFF)
    GUISetState()
    For $i = 0 To UBound($path) - 1
    _GUICtrlEdit_AppendText($hEdit, $path[$i] & @CRLF)
    Next
    _GUICtrlEdit_AppendText($hEdit, @CRLF & @CRLF)
    $load_file = FileRead($file)
    _GUICtrlEdit_AppendText($hEdit, $load_file)

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

    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
    GUIDelete()
    EndIf

    [/autoit]

    und probiere mal aus, ob es jetzt funzt!

    Alternativ Skript kompilieren, Txt selektieren, RMT -> öffnen mit -> kompilierte Exe auswählen.

    Gruß
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • Hallo du Zauberlehrling (der Buchstaben verwechelt),

    wenn ich dich richtig vertanden habe willst du ein bestimmtes Dateiformat immer mit deiner "X:\\meine Test.exe" öffnen. Dazu solltest du cmdline benutzen. Um zu verstehen was es bewirkt kompiliere einfach dieses kleine Skript als "meine Test.exe":

    [autoit]

    For $i = 1 to $CmdLine[0]
    MsgBox(0,$i & ":",($CmdLine[$i])
    next

    [/autoit]

    klicke danach auf das Contextmenü und schau dir die Messageboxes an, danach weist du wie es funktioniert,

    mfg autoBert


    Danke für die (wirklich) schnelle Antwort
    autoBert
    Kompilieren = Fehler
    ERROR: syntax error
    MsgBox(0, $i & ":",($CmdLine[$i])
    Das will nicht....vorherige Fehler schon bermerkt ;)

  • UEZ
    per Kontextmenü geht nicht.
    mit Drag&Drop würde es funktionieren, ist aber nicht das was ich wollte...

    Was ich genau vorhabe ist Folgendes:
    Ich mochte in bestimmten Dateien per Kontextmenü verteckte NTFS Datenstöme zuweisen.
    Ebenso per Kontextmenü diese versteckten Dateien auch wieder öffnen.

    Beispiel Der Test.gif eine .rtf Datei Anhängen:
    rechtclick auf test.gif - dann über mein Prog diesem File eine versteckte .rtf Datei zuweisen mit dem gleichen Namen wie der Ausgewählten Datei = test.gif - test.rtf das könnte man später auch erweitern usw.
    Über Batch würde das so aussehn:
    Zuweisen: type test.rtf > test.gif:test.rtf
    Aufrufen: write test.gif:test.rtf
    Zusätzlich soll erkannt werden ob sich in diesem File bereits eine versteckte Datei befindet.
    Wenn ja, Hinweis ausgeben und Liste dazu erstellen, über diese Liste können die versteckten Dateien dann aufgerufen werden.
    Weiter möchte ich zu jedem Zugewiesenen File eine INI Datei erstellen, die alle Pfade zu den erstellten ADS sammt .rtf Namen enthält (Dienst zur besseren Übersicht)

    Puh,
    meine ersten Versuche funktionieren zu Teil..

    Wie gesagt, bin erst am Anfang dieser Odysee......
    Nochmal Danke für eure Hilfe..

  • sorry, muss so aussehen:

    [autoit]

    MsgBox(0, $i & ":",$CmdLine[$i])

    [/autoit]

    läuft aber auf das gleiche hinaus wie UEZ gepostet bin. Von der Technik "verteckte NTFS Datenstöme zuweisen" habe ich noch nichts gehört bin aber trotzdem der Meinung dass der gemeinsame Nenner von UEZ und mir nämlich cmdline der Schlüssel zu deinem Problem ist.
    Eventuell lässt es sich auch über Makros lösen: @AutoItExe (in compiliertem Skript) bzw. @ScriptFullPath,

    mfg autoBert

  • OK Kontextmenü auch ohne Funktion, kurzes Auftauchen vom DOS-Fenster, das wars dann.


    NTFS Datenströme
    ist ne feine Sache (kann auch gefährtlich sein - Viren Trojaner usw.).
    Man kann Alle arten von Dateien an jedes Format anhängen ohne dass diese Angehängten Dateien vom Datei Explorer erkannt werden, auch über DOS >dir nicht
    .
    Hängt man z.B. 100MB an ein 10KB Icon, wird im Dateiexplorer auch nur 10KB angezeigt.
    Wer nicht weiss dass da was "dran hängt" wird es auch nicht erkennen.
    mehr dazu

  • In der Registry darfst du nicht vergessen, den Parameter %1 anzugeben, dieser wird dann mit dem Dateipfad ersetzt.

  • hmmm.....
    über:
    rechtclick - öffnen mit Test.exe
    funktioniert das, aber nicht über:
    rechtclick - Test.exe
    benötige ich noch evl. andere #include ??

    [autoit]


    #include <Array.au3>
    #include <File.au3>
    #include <WindowsConstants.au3>

    [/autoit]

    Danke nochmal, mit eurer Hilfe komm ich der Sache langsam näher :rock:

  • PHP
    [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\Background\shell\Test Script]
    "Icon"="x:\Bla.ico Icon"
    [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\Background\shell\Test Script\command]
    @="X:\\meine Test.exe %1"

    Du müsstest in der Registry %1 einfügen, denn ansonsten öffnet er "nur" die Exe.

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • aaaaah, mein Fehler..
    Ich hatte zwar %1 allerdings falsch gesetzt:

    PHP
    @="X:\\meine Test.exe " "%1"

    Prima DANKE :thumbup:

  • mit $CmdLineRaw bekomm ich zwar den ganzen Pfad allerdings mit Anführungszeichen
    aaaah Krise..
    Sorry Doppelpost KEINE Absicht.....

    Ich stell man mein Abgespeckten Teil vor: Problem ist bei Dateinamen mit Leerzeichen. Das ganze Kompilieren und per Kontextmenü aufrufen:

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    #include <File.au3>
    #include <WindowsConstants.au3>
    #include <GUIConstants.au3>
    #include <GuiConstantsEx.au3>
    #include <GUIComboBox.au3>
    #include <array.au3>

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

    Dim $szPath, $szDrive, $szDir, $szFName, $szExt, $Test_FILE, $file, $path, $Pfad_Full, $lesen, $Combo
    Dim $check_JPG, $check_GIF, $check_ICO, $check_TXT, $ADS_FILE, $ADS_xRTF
    Dim $JPG, $GIF, $ICO, $TXT

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

    $iniName = @ScriptDir & "\secret.ini"

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

    For $i = 1 To $CmdLine[0]
    $file = $CmdLine[1]
    $path = _PathSplit($file, $szDrive, $szDir, $szFName, $szExt)
    Next

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

    ;~ Lesen - Beispiel über Batch: write dummy.txt:x.rtf
    Func _ADS_RTFcall()
    RunWait('"' & @ComSpec & '" /c write ' & $ADS_FILE & ':' & $ADS_xRTF, '', @SW_HIDE)
    Exit
    EndFunc ;==>_ADS_RTFcall

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

    ;~ Schreiben - Beispiel über Batch: type x.rtf > dummy.txt:x.rtf
    Func _ADS_TYPE()
    RunWait('"' & @ComSpec & '" /c type ' & $ADS_xRTF & ' >' & $ADS_FILE & ':' & $ADS_xRTF, '', @SW_HIDE)
    EndFunc ;==>_ADS_TYPE

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

    $ADS_FILE = $szFName & $szExt
    ;~ $ADS_FILE = $CmdLineRaw -----------------------------??????????
    $ADS_xRTF = $szFName & ".rtf"
    ;~ $ADS_xRTF = FileGetLongName($szFName) & ".rtf" ------??????????

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

    Func _INI_write()
    IniWrite($iniName, "ADS_Datei", $ADS_xRTF, $ADS_FILE)
    EndFunc ;==>_INI_write

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

    ;~ Prüft, ob bereits ADS Daten vorhanden sind.
    If FileExists($ADS_FILE & ':' & $ADS_xRTF) Then
    ; _COMBOAuswahl()
    Else
    _ADS_TYPE()
    _INI_write()
    Beep(1500, 500)
    _ADS_RTFcall()
    EndIf

    [/autoit]


    Das ganze wird per Kontextmenü über die zuvor deffinierten Erweiterungen (ico, jpg usw) aufgerufen:
    Im Hauptscript (wurde hier weggelassen da zu Lang) erscheint dann noch eine Combobox mit allen gesetzten ADS Files, welche über diese gestartet oder gelöscht werden können usw.

    Danke...
    Bisher funktioniert Alles ohne Probleme. Nur die Leerzeichen im Dateinamen machen mich ganz Wirr..

  • Hallo Parray Hotter,

    was soll das 1 und das selbe Problem in 2 Threads abzufragen: [ offen ] _pathSplit Leerzeichen Problem im Dateinamen
    und nur weil dir die Antworten (=Lösungen) nicht gefallen wieder zurück zum 1. Thread zu wechseln.

    Dann entferne halt die Anführungszeichen:

    [autoit]

    StringTrimLeft
    StringTrimRight

    [/autoit]


    @Mod/Admin evtl. zusammenlegen, sollte klappen da sie sich zeitlich bis Post #11 nicht überlappen, danke

    mfg autoBert

  • Ja ich weis - keine Absicht
    ich dachte nicht dass sich diesesThema (für mich) so in die breite zieht..
    Das eine hier wurde ja "fast" gelöst, der Dateipfad wird erkannt. Allerdings hat sich dann das zweite Thema mit den Leerzeichen im Dateinamen, überschnitten. Darum der Schritt zurück hier her.....

    Schande über mich.... ;(