Programm aufrufen

  • Hallo,
    ich möchte das Windows-Notepad, durch PSPad ersetzen.
    Dazu reicht es anscheinend nicht, die exe-Datei einfach auszutauschen, den dabei gehen alle Einstellungen usw. von PSPad verloren.
    Also habe ich versucht, PSPad komplett in einen Ordner zu installieren und die notepad.exe-Datei durch ein AutoIt Script zu ersetzen.
    In dem Script steht nur:

    Run("C:\Programme\PSPad\PSPad.exe")

    Dieses kleine Script soll nur PSPad in dem anderen Ordner aufrufen, wenn ich auf eine entsprechende Datei doppelklicke.
    Das funktioniert auch, PSPad wird aufgerufen, wenn ich auf eine Datei doppelklicke.
    Nur PSPad zeigt mir die Datei nicht an.
    Da fehlt also noch ein Parameter um die Datei mit PSPad anzuzeigen.
    Dieser Parameter müsste doch eigentlich an das AutoIt-Script übergeben werden, wenn ich auf eine Datei doppelklicke.
    Nur wie reiche ich diesen Parameter an das mit Run aufgerufene Programm weiter, damit dieses Programm den auch verwendet ?
    (einfach nur %1 hinter PSPad.exe schreiben reicht aber anscheinend nicht, dan öffnet PSPad zwar eine Datei, aber die heißt dann immer %1).

    Gruß:
    BigRox

    2 Mal editiert, zuletzt von BigRox (10. Oktober 2009 um 16:53)

  • versucht mal mit


    Run("C:\Programme\PSPad\PSPad.exe -C:\Test.txt")

    [autoit]


    #cs-----------------------------------------------------------------------------
    Hilfe ist immer gut also nimmt sie an ^^
    #ce-----------------------------------------------------------------------------

    [/autoit]
  • Oh, das ist ja schon mal nen Krampf die Notepad.exe zu ersetzten unter Windows 7 :( aber habe es doch noch hinbekommen :)

    So zu Deinem Problem, wenn du eine Textdatei öffnest, die z. B. "Neue Textdatei.txt" heißt, dann bekommt Autoit folgendes über geben, ein Array mit drei Eintragungen. Erster ist die Anzahl der Eintragungen, die anderen beiden, also Index 1 und 2, sind die Datei, dabei kommt in 1 Der Pfad bis Neue und in 2 Textdatei.txt. Es wird also immer wenn ein Leerzeichen da ist, ein Eintrag hinzugefügt.

    Ich habe es jetzt mal so gelöst:

    [autoit]

    $datei = ''
    if $CmdLine[0] > 0 Then
    If $CmdLine[0] > 1 Then
    For $i = 1 To UBound($CmdLine) -1
    $datei &= $CmdLine[$i] & ' '
    Next
    $datei = StringStripWS($datei,3)
    Else
    $datei = $CmdLine[1]
    EndIf
    Run('C:\Program Files\PSPad editor\PSPad.exe "' & $datei & '"')
    EndIf

    [/autoit]

    So sollte es bei dir auch klappen, hoffe ich :)

    Mfg
    Jens (McPoldy)

    Twitter: jkroeger

    Denn die Dinge, die wir erst lernen müssen, bevor wir sie tun, lernen wir beim Tun.(Aristoteles)

  • Hallo McPoldy,
    es funktioniert, bis auf eine Kleinigkeit.

    Wenn irgendwo im Pfad zwei Leerzeichen in Folge stehen, so wird in PSPad nur noch der Dateiname richtig angezeigt, aber der Dateiinhalt fehlt.

    Also z.B. C:\P rogramme\Test.TXT
    (der Name Test.TXT wird zwar angezeigt, aber der Dateiinhalt fehlt).

    Auch
    C:\Programme\Irgendein Test.TXT
    (der Name Irgendein Test.TXT {aber nur mit einem Leerzeichen dazwischen} wird zwar angezeigt, aber der Dateiinhalt fehlt auch).

    funktioniert nicht.
    Da gibt es also irgendwo noch ein kleines Problem mit den Leerzeichen.

    Wenn man den Editor so aufruft und dann so eine Datei öffnet, so kann der das, auch wenn da 20 Leerzeichen in Folge im Pfad stehen.

    Gruß:
    BigRox

  • Meine Master-Lösung (hab ich von Chuck Norris) :

    [autoit]


    ;Replace notepad with PSPad:
    _replaceProgramWithAnother("notepad.exe","C:\Programme\PSPad\PSPad.exe")
    ;schon fertig
    Func _replaceProgramWithAnother($nameOfProgramToReplace,$PathAndNameOfProgramToBeTheReplacement)
    ;by L3viathan2142
    If $nameOfProgramToReplace="" Or $PathAndNameOfProgramToBeTheReplacement="" Or StringInStr($nameOfProgramToReplace,"\") Then Return False
    RegWrite("HKLM\SOFTWARE\Microsoft\Windows NT\Current Version\Image File Execution Options\" & $nameOfProgramToReplace,"Debugger","REG_SZ",$PathAndNameOfProgramToBeTheReplacement)
    If @error Then Return False
    Return True
    EndFunc
    Func _unreplaceProgram($programToUnreplace)
    RegDelete("HKLM\SOFTWARE\Microsoft\Windows NT\Current Version\Image File Execution Options\" & $programToUnreplace)
    EndFunc

    [/autoit]


    sorry für möglicherweise unpassende Variablen- und Funktionsnamen :D

    edit: Erklärung: Dabei wird kein Programm umbenannt oder verschoben, es wird nur in der Registry eingetragen: Wenn notepad.exe gestartet wird, starte stattdessen PSPad.

    Twitter: @L3viathan2142
    Benutze AutoIt persönlich nicht mehr, da ich keinen Windows-Rechner mehr besitze.

  • Hallo BugFix,
    deine Lösung funktioniert, bis auf eine Kleinigkeit:

    Wenn da mehr als ein Leerzeichen in Folge im Pfad steht, so zeigt PSPad immer noch nur den Dateinamen an.
    Der Dateiinhalt fehlt dann immer noch.


    Nun zu der Lösung von L3viathan2142:
    Das funktioniert auch, nur hat das auch ein Kleines Problem:
    PSPad zeigt dann immer mindestens zwei Dateien an.
    Zu der ausgewählten Datei gesellt sich da immer die Notepad.exe und die muss man zuerst weg klicken um die eigentliche Datei zu sehen.
    Aber das mit den zwei Leerzeichen usw. funktioniert dann.

    Gruß:
    BigRox