Texteditor bei Doppelklick auswählen (Dialog)

Forum zur Erstellung von Anwendungen der erweiterten Scripting-Funktion
Info: Diese Schalter und Script-Anwendungen funktionieren erst ab der Version 11
Benutzeravatar
Kundal
Moderator
Beiträge: 1337
Registriert: 20. Apr 2010 21:26
Betriebssystem: Win7 & Win 10 Pro 64 bit
Produkt: DOpus 12 x64 - Letzte Betaversion
Version DOpus: Pro

Texteditor bei Doppelklick auswählen (Dialog)

Beitrag von Kundal » 25. Feb 2014 03:25

Dieses Script-AddIn ist als Vorlage gedacht und wurde auf Anregung des Forumsmitglieds Sasa in diesem Beitrag geschrieben: Scripts für Notepad-Ersatz.
Es öffnet bei Doppelklick auf eine Textdatei einen Dialog, durch den die Datei, je nachdem welcher Button geklickt wird, entweder mit Notepad oder mit Wordpad geöffnet wird.
Das Script muss in eine Datei TextEditorChoice.vbs gespeichert und in den Ordner /dopusdata\Script AddIns kopiert werden

TextEditorChoice.vbs (Script-AddIn v1.0, VB-Script-Version)

Code: Alles auswählen

' TextEditorChoice
' 
' 
' This is a script for Directory Opus.
' See http://www.gpsoft.com.au/redirect.asp?page=scripts for development information.
' 
' 
' 
' Called by Directory Opus to initialize the script
Function OnInit(initData)
	initData.name = "TextEditorChoice"
	initData.desc = "Textdatei mit Notepad oder WordPad Öffnen"
	initData.copyright = "(c) 2014 Kundal"
	initData.version = "v1.0"
	initData.default_enable = true
End Function

' Called when a file or folder is double-clicked
Function OnDoubleClick(doubleClickData)
	If doubleClickData.item.ext = ".txt" Then
		OnDoubleClick = true  ' Prevent the standard double-click action.
		Set filename = doubleClickData.item
		Set dlg = DOpus.Dlg
		dlg.window = DOpus.Listers(0)
	      dlg.message = "Mit Notepad oder WordPad öffnen"
	      dlg.title = "Editor wählen"
	      dlg.buttons = "Notepad|WordPad|Abbrechen"
	      i = dlg.show
	      If i = 1 then
	      	   DOpus.NewCommand.RunCommand("notepad.exe ") & """" & filename & """"
	      Elseif i = 2 then
	      	   DOpus.NewCommand.RunCommand ("/programfiles\Windows NT\Accessories\wordpad.exe ") & """" & filename & """"
	      else
	      End If
	End If	
End Function

Benutzeravatar
Kundal
Moderator
Beiträge: 1337
Registriert: 20. Apr 2010 21:26
Betriebssystem: Win7 & Win 10 Pro 64 bit
Produkt: DOpus 12 x64 - Letzte Betaversion
Version DOpus: Pro

Re: Texteditor bei Doppelklick auswählen (Dialog)

Beitrag von Kundal » 25. Feb 2014 23:14

Das obige Script hier in der Version für mehrere Dateitypen. Diese Vorlage kann so modifiziert werden, dass für jeden Dateityp individuelle Aktionen bei Klick auf den linken bzw. rechten Schalter ausgeführt werden. Im Beispiel werden TXT-Dateien bei Klick auf den linken Button entsprechend der Beschriftung mit Notepad und bei Klick auf den rechten Button mit WordPad geöffnet. Für INI-Dateien werden zu Testzwecken die umgekehrten Aktionen ausgeführt.

TextEditorChoice.vbs (Script-AddIn v1.1 für mehrere Dateitypen, VB-Script-Version)

Code: Alles auswählen

' TextEditorChoice
' 
' 
' This is a script for Directory Opus.
' See http://www.gpsoft.com.au/redirect.asp?page=scripts for development information.
' 
' 
' 
' Called by Directory Opus to initialize the script
Function OnInit(initData)
      initData.name = "TextEditorChoice"
      initData.desc = "Textdatei mit Notepad oder WordPad Öffnen"
      initData.copyright = "(c) 2014 Kundal"
      initData.version = "v1.1"
      initData.default_enable = true
End Function

' Called when a file or folder is double-clicked
Function OnDoubleClick(doubleClickData)
Set filename = doubleClickData.item

' Do nothing if the filetype isn't ".txt" or ".ini"
Dim ext
ext = doubleClickData.item.ext
If (Not (ext = ".txt" Or ext = ".ini")) Then
      Exit Function
End If

' Create Dialog
Set dlg = DOpus.Dlg
dlg.window = DOpus.Listers(0)
dlg.message = "Mit Notepad oder WordPad öffnen"
dlg.title = "Editor wählen"
dlg.buttons = "Notepad|WordPad|Abbrechen"
i = dlg.show

' Prevent the standard double-click action.
OnDoubleClick = true

'Configure actions for filtype ".txt"
If doubleClickData.item.ext = ".txt" Then      
      If i = 1 then
            DOpus.NewCommand.RunCommand("notepad.exe ") & """" & filename & """"
      Elseif i = 2 then
            DOpus.NewCommand.RunCommand ("/programfiles\Windows NT\Accessories\wordpad.exe ") & """" & filename & """"
      else
      End If
End If

'Configure actions for filetype ".ini" (for testing purposes simply do reverse actions configured for ".txt")
If doubleClickData.item.ext = ".ini" Then      
      If i = 1 then
            DOpus.NewCommand.RunCommand ("/programfiles\Windows NT\Accessories\wordpad.exe ") & """" & filename & """"
      Elseif i = 2 then
            DOpus.NewCommand.RunCommand("notepad.exe ") & """" & filename & """"
      else
      End If
End If 

End Function

Da nicht jeder die Funktion als Script-AddIn ständig verwenden möchte, die Funktion aber zum gelegentlichen Gebrauch in einem Schalter benutzen möchte, hier das Script als einfacher Schaltercode für mehrere Dateitypen (im Beispiel *.txt und *.ini).

Dieser Scriptcode wird als normaler Schaltercode im Befehlseditor eingefügt um einen Symbolleisten-Schalter zu erstellen. Unter Funktion: muss im Befehlseditor Skriptfunktion ausgewählt sein, sonst erhält man eine Fehlermeldung.

Texteditor auswählen für mehrere Dateitypen (Schaltercode)

Code: Alles auswählen

Function OnClick(ClickData)
Set dlg = DOpus.Dlg
dlg.window = DOpus.Listers(0)
dlg.message = "Mit Notepad oder WordPad öffnen"
dlg.title = "Editor wählen"
dlg.buttons = "Notepad|WordPad|Abbrechen"
i = dlg.show

for each file in ClickData.Func.Command.Files
      if File.ext = ".txt" Then
            if i = 1 then
                  DOpus.NewCommand.RunCommand("notepad.exe ") & """" & file & """"
            elseif i = 2 then
                  DOpus.NewCommand.RunCommand ("/programfiles\Windows NT\Accessories\wordpad.exe ") & """" & file & """"
            else
            end If
            end If
            if File.ext = ".ini" Then
                  if i = 1 then
                        DOpus.NewCommand.RunCommand ("/programfiles\Windows NT\Accessories\wordpad.exe ") & """" & file & """"
            elseif i = 2 then
                        DOpus.NewCommand.RunCommand("notepad.exe ") & """" & file & """"
            else
            end If
            end If	
next
End Function

Sasa
Berater
Beiträge: 478
Registriert: 6. Nov 2006 13:20

Re: Texteditor bei Doppelklick auswählen (Dialog)

Beitrag von Sasa » 27. Feb 2014 10:48

Hmm, bei mir lässt sich keines der Skripte starten. Auch bei der Button-Version tut sich nichts, ein anderes Testskript hingegen funktioniert.

Benutzeravatar
Kundal
Moderator
Beiträge: 1337
Registriert: 20. Apr 2010 21:26
Betriebssystem: Win7 & Win 10 Pro 64 bit
Produkt: DOpus 12 x64 - Letzte Betaversion
Version DOpus: Pro

Re: Texteditor bei Doppelklick auswählen (Dialog)

Beitrag von Kundal » 2. Mär 2014 23:44

Die Button-Version funktionierte tatsächlich nicht, weil ich versehentlich eine nicht funktionierende JScript-Version gepostet hatte. Da stimmt noch irgendwas mit der Syntax nicht.
Ich habe den Code im zweiten Beitrag jetzt gegen die funktionierende VB-Script-Version ausgetauscht.

Das Script-AddIn TextEditorChoice.vbs funktioniert bei mir einwandfrei, auch wenn ich es aus dem ersten oder zweiten Beitrag heraus als neue Datei nach /dopusdata\Script AddIns\ kopiere. Getestet auch mit Leerstellen in Pfad-und Dateinamen der TXT bzw. INI-Dateien.
Ist das Script bei dir als AddIn in den Voreinstellungen unter Symbolleisten=>Skripts sichtbar und aktiviert? Wenn es nicht sichtbar sein sollte, ist ein Fehler im Code, der vielleicht beim Kopieren passiert ist.

Sasa
Berater
Beiträge: 478
Registriert: 6. Nov 2006 13:20

Re: Texteditor bei Doppelklick auswählen (Dialog)

Beitrag von Sasa » 3. Mär 2014 12:01

Danke Dir, jetzt funktioniert's! Keinen Bock auf Karneval, da kann ich heute mal an dem Skript arbeiten...

Benutzeravatar
Kundal
Moderator
Beiträge: 1337
Registriert: 20. Apr 2010 21:26
Betriebssystem: Win7 & Win 10 Pro 64 bit
Produkt: DOpus 12 x64 - Letzte Betaversion
Version DOpus: Pro

Re: Texteditor bei Doppelklick auswählen (Dialog)

Beitrag von Kundal » 3. Mär 2014 12:08

Schön, dass es jetzt bei dir läuft. Ich habe vorhin noch mal versucht, das in JScript zu übersetzen, aber bisher beisse ich mir daran die Zähne aus.

Sasa
Berater
Beiträge: 478
Registriert: 6. Nov 2006 13:20

Re: Texteditor bei Doppelklick auswählen (Dialog)

Beitrag von Sasa » 3. Mär 2014 12:35

Ich habe das Skript jetzt mal so geändert, dass es Reg-Dateien entweder ausführt (ohne Bestätigung, damit ich keinen weiteren Klick habe) oder im Editor öffnet. Ist Dank Deiner tollen Vorlage ja keine Kunst :-), aber eine Frage habe ich beim Regedit-Aufruf:

Code: Alles auswählen

DOpus.NewCommand.RunCommand("regedit.exe ") & ("/s ") & """" & filename & """"
Warum müssen Parameter wie "/s" separat angegeben werden? Und wofür stehen die 4 Anführungszeichen ("""")?

Übrigens kann ich den Notepad-Replacer (http://stadt-bremerhaven.de/windows-notepad-ersetzen/) empfehlen:

1. Tauscht nur Notepad.exe gegen Notepad++ oder Notepad2 (kann wiederhergestellt werden)
2. Keine Dateitypenanpassung in DO nötig und funktioniert systemübergeifend
3. Im Skript kann die Notepad.exe verwendet werden
4. Notepad++ kann portable laufen und es müssen auch keine Dateitypen verknüpft werden

Die Skripte mit ++ bearbeiten ist auf jeden Fall viel angenehmer, weil's alle Sprachen unterstützt (der UltraEdit ist mir zu aufgeblasen) :-)

Benutzeravatar
Kundal
Moderator
Beiträge: 1337
Registriert: 20. Apr 2010 21:26
Betriebssystem: Win7 & Win 10 Pro 64 bit
Produkt: DOpus 12 x64 - Letzte Betaversion
Version DOpus: Pro

Re: Texteditor bei Doppelklick auswählen (Dialog)

Beitrag von Kundal » 3. Mär 2014 23:45

Warum müssen Parameter wie "/s" separat angegeben werden? Und wofür stehen die 4 Anführungszeichen ("""")?
Da ich das Scripten nicht "von der Pike auf" gelernt habe, sondern mir Alles mit Try & Error und Abgucken aus vorhandenen Scripts selbst beigebracht habe, kann ich fast nur sagen "weil's anders nicht funktioniert". Derartige Strings werden in Scripts immer mit & (bzw. && in JScript) zusammengesetzt.
Die 4 Anführungszeichen setzen jeweils ein einzelnes Anführungszeichen vor und nach filename. Textstrings müssen beim Zusammensetzen immer in Anführungszeichen gesetzt werden. Daher die beiden äusseren Zeichen. In der Mitte müssen auch zwei stehen, weil Sonderzeichen eine besondere Bedeutung haben und deshalb durch Verdoppelung "umgeschaltet" (escaped) werden müssen. Die Anführungszeichen vor und nach "filename" sind nötig, weil sonst Pfade und Dateinamen mit enthaltenen Leerstellen nicht funktionieren.

Da ich seit Jahren die kostenlose Light-Version von EditPad Pro 7 genutzt habe, habe ich mich vor Kurzem entschlossen, die Pro-Version zu kaufen (39,95€). Das Teil ist ziemlich genial, weil es z.B. ausser der farbigen Syntax-Hervorhebung eine mächtige Suchen- und Ersetzen Funktion mit Regex-Unterstützung bietet. Richtig nützlich finde ich eine integrierte Clipp-Sammlung, in der man Code-Schnipsel usw. sammeln kann. Ich habe da sämtliche Code-Elemente von DOpus aus der Excel-Referenz, die am häufigsten gebrauchten Befehle und ganze Script-Vorlagen eingepflegt. Das spart so manche Tipparbeit und hilft, wiederverwertbare Befehlszeilen mit der richtigen Syntax zur Hand zu haben. Man kann damit auch Clipps erstellen, die vor und nach dem markierten Text etwas (z.B. Klammern) einfügen.
EditPad Pro 7.png

Benutzeravatar
Kundal
Moderator
Beiträge: 1337
Registriert: 20. Apr 2010 21:26
Betriebssystem: Win7 & Win 10 Pro 64 bit
Produkt: DOpus 12 x64 - Letzte Betaversion
Version DOpus: Pro

Re: Texteditor bei Doppelklick auswählen (Dialog)

Beitrag von Kundal » 5. Mär 2014 00:40

Hier das Ganze in der JScript-Version. Die Funktion ist identisch mit der VB-Script-Version.
Bei den Script-AddIns darf nur eine Version zur Zeit aktiviert sein!


TextEditorChoice.js (Script-AddIn v1.1 für mehrere Dateitypen, JScript-Version)

Code: Alles auswählen

// TextEditorChoice-JS
// (c) 2014 Kundal
// 
// This is a script for Directory Opus.
// See http://www.gpsoft.com.au/redirect.asp?page=scripts for development information.
// 
// 
// 
// Called by Directory Opus to initialize the script
function OnInit(initData)
{
	initData.name = "TextEditorChoice-JS";
	initData.desc = "Textdatei mit Notepad oder WordPad Öffnen";
	initData.copyright = "(c) 2014 Kundal";
	initData.version = "v1.1";
      initData.default_enable = true;
}

// Called when a file or folder is double-clicked
function OnDoubleClick(doubleClickData)
{
var ext = doubleClickData.item.ext
DOpus.vars.Set ("wp", DOpus.aliases("programfiles").path + "\\Windows NT\\Accessories\\wordpad.exe");

// Do nothing if the filetype isn't ".txt" or ".ini"
if (!(ext == ".txt" || ext == ".ini")) return;

// Create Dialog
dlg = DOpus.Dlg;
dlg.window = DOpus.Listers(0);
dlg.message = "Datei mit Notepad oder WordPad öffnen";
dlg.title = "Editor wählen";
dlg.buttons = "Notepad|WordPad|Abbrechen";
i = dlg.show;

// Configure actions for filtype ".txt"
   if (ext == ".txt" == true)
   {
      if (i == 1)
         DOpus.NewCommand.RunCommand('notepad.exe "%1"');
      if (i == 2) 
         DOpus.NewCommand.RunCommand('{$glob:wp} "%1"');
   }
// Configure actions for filetype ".ini" (for testing purposes simply do reverse actions configured for ".txt")
      else if (ext == ".ini" == true)
   {
      if (i == 1)
         DOpus.NewCommand.RunCommand('{$glob:wp} "%1"');
      if (i == 2) 
         DOpus.NewCommand.RunCommand('notepad.exe "%1"');
   }

// Prevent the standard double-click action.
OnDoubleClick = true; return true;
}
Texteditor auswählen für mehrere Dateitypen (Schaltercode JScript-Version)

Code: Alles auswählen

@script:jscript

function OnClick(clickData)
{
 DOpus.vars.Set ("wp", DOpus.aliases("programfiles").path + "\\Windows NT\\Accessories\\wordpad.exe");

dlg = DOpus.Dlg;
dlg.window = DOpus.Listers(0);
dlg.message = "Datei mit Notepad oder WordPad öffnen";
dlg.title = "Editor wählen";
dlg.buttons = "Notepad|WordPad|Abbrechen";
i = dlg.show;

enumFiles = new Enumerator(clickData.func.command.files);
enumFiles.moveFirst();
while (enumFiles.atEnd() == false)
{
   DOpus.vars.Set ("file", enumFiles.item());
   if (enumFiles.item().ext == ".txt")
   {
      if (i == 1)
         clickData.func.command.RunCommand('notepad.exe "{$glob:file}"');
      if (i == 2) 
         clickData.func.command.RunCommand('{$glob:wp} "{$glob:file}"');
      enumFiles.moveNext();
   }
   else if (enumFiles.item().ext == ".ini")
   {
      if (i == 1)
         clickData.func.command.RunCommand('{$glob:wp} "{$glob:file}"');
      if (i == 2) 
         clickData.func.command.RunCommand('notepad.exe "{$glob:file}"');
      enumFiles.moveNext();
   }
   else
      enumFiles.moveNext();
}
}

Sasa
Berater
Beiträge: 478
Registriert: 6. Nov 2006 13:20

Re: Texteditor bei Doppelklick auswählen (Dialog)

Beitrag von Sasa » 5. Mär 2014 18:07

Darauf habe ich gewartet... perfekt! Danke!

Ich habe zwar schon eine Version für Reg-Dateien in vbs (öffnen & bearbeiten), die wird dann aber jetzt in js angepasst.

Nach flüchtigem Blick scheint der ext. Aufruf mitsamt Parametern bei js einfacher zu sein. Schön auch die Erklärungen zu jedem Abschnitt. Nochmal Danke.

Benutzeravatar
Kundal
Moderator
Beiträge: 1337
Registriert: 20. Apr 2010 21:26
Betriebssystem: Win7 & Win 10 Pro 64 bit
Produkt: DOpus 12 x64 - Letzte Betaversion
Version DOpus: Pro

Re: Texteditor bei Doppelklick auswählen (Dialog)

Beitrag von Kundal » 5. Mär 2014 19:02

Bei VBS war es deshalb etwas komplizierter, weil der Apostroph nicht, wie in JS als alternatives Anführungszeichen genutzt werden kann, weil er für Kommentare reserviert ist. Sobald ein weiterer Teil mit Anführungsstrichen im String dazu käme würde dort das gleiche Problem auftauchen.
Grundsätzlich fand ich es besonders im Schaltercode mit VBS wesentlich einfacher, weil in der For-Schleife nicht erst mühsam die "collection" der ausgewählten Dateien (clickData.func.command.files) per "new Enumerator" in einzelne Dateien zerlegt werden musste.

hoschen
Beiträge: 23
Registriert: 9. Jul 2009 09:17
Betriebssystem: Win 7 Home 32 + 64bit,
Produkt: DOpus 11.12.0.0
Version DOpus: Pro

Re: Texteditor bei Doppelklick auswählen (Dialog)

Beitrag von hoschen » 12. Mär 2014 16:03

Ich habe eine Frage (Fehler im Script?):
die Anweisung

Code: Alles auswählen

var wordpad = "/programfiles\Windows NT\Accessories\wordpad.exe";
geht ins "Leere" oder ich bin zu "blöd" das zu verstehen!

Wenn ich den Pfad ändere - z.B. das N von NT lösche wird trotzdem Wordpad geöffnet!

Habe ich einen Denkfehler oder wo ist der Fehler im Script?

Wenn ich da einen absoluten Pfad zu einem Editor - z.B. C:\Progem Files (x86)\Notepad++\Notepad++.exe - eingebe, dann wird ebefalls Wordpad geöffnet!

Den Variablenamen zu ändern - wordpad zu wordpat - bringt Fehler: "wordpat" konnte nicht gefunden werden!

Code: Alles auswählen

    var wordpat = "/programfiles\Windows NT\Accessories\wordpad.exe";
...
             DOpus.NewCommand.RunCommand('wordpat "%1"');

Benutzeravatar
Kundal
Moderator
Beiträge: 1337
Registriert: 20. Apr 2010 21:26
Betriebssystem: Win7 & Win 10 Pro 64 bit
Produkt: DOpus 12 x64 - Letzte Betaversion
Version DOpus: Pro

Re: Texteditor bei Doppelklick auswählen (Dialog)

Beitrag von Kundal » 12. Mär 2014 21:19

Danke fürs Testen!
Im Script war tatsächlich ein Fehler. Funktioniert hat es nur deshalb, weil Windows den Pfad zu WordPad kennt und der Befehl wordpad %1 daher auch ohne das Setzen einer Variable namens wordpad funktioniert hat. Ich habe die JScript-Codes im obigen Beitrag aktualisiert.
Mit der Zeile DOpus.vars.Set ("wp", DOpus.aliases("programfiles").path + "\\Windows NT\\Accessories\\wordpad.exe"); wird jetzt die Variable wp gesetzt die im nachfolgenden Befehl mit {$glob:wp} aufgerufen wird. Statt eines Aliases kann hier auch ein absoluter Pfad verwendet werden (Die Doppelung der Backslashes beachten).

Für Notepad++ könnte die Zeile dann z.B. so lauten:
DOpus.vars.Set ("wp", "C:\\Program Files (x86)\\Notepad++\\Notepad++.exe");

hoschen
Beiträge: 23
Registriert: 9. Jul 2009 09:17
Betriebssystem: Win 7 Home 32 + 64bit,
Produkt: DOpus 11.12.0.0
Version DOpus: Pro

Re: Texteditor bei Doppelklick auswählen (Dialog)

Beitrag von hoschen » 2. Okt 2014 08:34

Ich habe noch eine Frage:
wie kann ich bei "dlg.buttons" Sonderzeichen mit anzeigen lassen? z. B. "Notepad++"

Benutzeravatar
Kundal
Moderator
Beiträge: 1337
Registriert: 20. Apr 2010 21:26
Betriebssystem: Win7 & Win 10 Pro 64 bit
Produkt: DOpus 12 x64 - Letzte Betaversion
Version DOpus: Pro

Re: Texteditor bei Doppelklick auswählen (Dialog)

Beitrag von Kundal » 2. Okt 2014 11:32

Gute Frage! Ich bekomme das auch nicht hin. Das Einzige was ich geschafft habe, ist ein Sonderzeichen (Plus-Zeichen mit Punkt darüber). Der entsprechende Code, den ich für das Plus-Zeichen selbst gefunden habe wollte einfach nicht funktionieren (\u002B). Vielleicht weil es hexadezimal ist. Umrechnen in dezimal (43) funktioniert da auch nicht, sondern gibt "C" aus.

Das Sonderzeichen kann mit einem Unicode Escape-Code eingegeben werden (hier in JScript):

Code: Alles auswählen

dlg.buttons = "Notepad\u2214\u2214|WordPad|Abbrechen";
Das Ergebnis sieht dann so aus:
notepad++.jpg
notepad++.jpg (19.69 KiB) 3301 mal betrachtet
Eine umfangreiche Übersicht für Zeichen-Codes habe ich hier gefunden: Unicode 7.0 Character Code Charts

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste