Einfach ein simples Beispiel, nehmen wir an im Text bei description steht
a "b" c
, im Aufnehmen-Feld der Aufnahmesteuerung steht
"{escapeQuotes(description)}"
die Ausgabe der Aufnahmesteuerung für die übergebenen Parameter lautet dann
"a \"\"b\"\" c"
. Die Backslashes dienen dem Programmstarter von TV-Browser als Escape-Sequenz, um die Anführungszeichen nicht als Trenner von Parametern wahrzunehmen. Also Backslash erkannt->nächstes Zeichen in Parameter übernehmen. Das war bisher nicht so, daher jetzt die vier Backslashes, auch die zwei die man vorher brauchte waren schon nicht so schön, aber der Backslash diente halt bisher schon als Escape-Sequenz innerhalb der Parameter. Anstelle der vier Backslashes kann man aber auch einfach jeweils einen Slash nehmen, wenn es sich um Pfadangaben handelt. Beim Rechnernamen geht das aber vermutlich nicht.
Im Ergebnis erkennt TV-Browser
"a \"\"b\"\" c"
als einen Parameter und übergibt diesen dann auch explizit als einen Parameter an das System und zwar als
a ""b"" c
, die äußeren Anführungszeichen werden entfernt. Weil es explizit als ein Parameter übergeben wird reichen dann für das Autohotkey-Skript die zwei Anführungszeichen, da ja die äußeren fehlen. Würde man hier drei Anführungszeichen übergeben, dann würde es nicht funktionieren.
Welche Funktion von Java im Hintergrund beim Starten von Programmen auch immer aufgerufen wird, dieser werden die Parameter explizit als einzelne Parameter übergeben, daher auch keine äußeren Anführungszeichen.
Wie gesagt, mit Hilfe von
replace
kannst du testen, ob es mit drei Anführungszeichen plus äußeren Anführungszeichen funktioniert, wenn du das Aufnahmeprogramm aufrufst
"\\"{replace(description,"%"::%\%"%\%"%\%"")}\\""
, ich vermute aber das es dann nicht funktioniert, denn Autohotkey interpretiert das dann als einzelne Parameter ab dem ersten Anführungszeichen im Text. Probiere außerdem
"{replace(description,"%"::%\%\%\%"")}"
, wenn ich weiß, dass
\"
als Escape-Sequenz auch bei deinem Aufnahmeprogramm funktioniert, dann kann ich
replaceQuotes
entsprechend ändern, denn dann dürfte es bei anderen auch funktionieren, denn bei Autohotkey geht es so auch. Bevor ich nicht weiß, was bei deinem Aufnahmeprogramm funktioniert bzw. ob es überhaupt funktioniert, kann ich auch keine Anleitung schreiben, denn es ist ja alles noch in Entwicklung.
Möglicherweise kommt einfach das Aufnahmeprogramm mit Anführungszeichen nicht klar und sucht die Kommandozeile einfach stur nach Anführungszeichen ab.
Letztendlich ist das auch genau der Grund, warum sich die Aufnahmesteuerung standardmäßig nicht um solche Dinge kümmert, jedes Programm kann es anders handhaben und es gibt keine Garantie, dass es auf eine bestimmte Weise funktioniert.
Hier das Autohotkey-Skript, das lässt sich zur EXE kompilieren, wenn Autohotkey installiert ist:
Code: Alles auswählen
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
; #Warn ; Enable warnings to assist with detecting common errors.
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
Loop, %0% ; For each parameter:
{
param := %A_Index% ; Fetch the contents of the variable whose name is contained in A_Index.
MsgBox, 4,, Parameter number %A_Index% is %param%. Continue?
IfMsgBox, No
break
}
Dass mit dem Passwort stimmt, war auch bisher schon so, wenn da ein Backslash drin vorkam und mit Anführungszeichen im Passwort ging es bisher gar nicht. An sich ist es auch keine schöne Lösung das Passwort im Klartext über die Kommandozeile zu schicken. Wenn sich mit
escapeQuotes
eine funktionierende Lösung ergibt, kann man die aber beim Passwort mit Anführungszeichen auch verwenden, nur beim Backslash bliebe das Problem.
Die Aufnahmesteuerung richtet sich jedenfalls eher an Poweruser, da sehr komplex, allein mit den Einstellungen sind viele schon überfordert und sie wurde auch nicht von mir programmiert, sondern ist mir nur in den Schoß gefallen, weil alle anderen Entwickler von TV-Browser vor über 10 Jahren schon abgesprungen sind.
EDIT: Ich habe hier außerdem ein kleines Java-Tool geschrieben, was auch die Parameter mit Nummer ausgeben kann. Da muss man als zu startendes Programm die java.exe auswählen und als Parameter
-jar "LAUFWERK:/PFAD/ParameterPrinter.jar" "{escapeQuotes(description)}"
Auch damit funktioniert es sowohl mit zwei Anführungszeichen, als auch mit Backslash und einem Anführungszeichen.
Einfach ein simples Beispiel, nehmen wir an im Text bei description steht [c]a "b" c[/c], im Aufnehmen-Feld der Aufnahmesteuerung steht [c]"{escapeQuotes(description)}"[/c] die Ausgabe der Aufnahmesteuerung für die übergebenen Parameter lautet dann [c]"a \"\"b\"\" c"[/c]. Die Backslashes dienen dem Programmstarter von TV-Browser als Escape-Sequenz, um die Anführungszeichen nicht als Trenner von Parametern wahrzunehmen. Also Backslash erkannt->nächstes Zeichen in Parameter übernehmen. Das war bisher nicht so, daher jetzt die vier Backslashes, auch die zwei die man vorher brauchte waren schon nicht so schön, aber der Backslash diente halt bisher schon als Escape-Sequenz innerhalb der Parameter. Anstelle der vier Backslashes kann man aber auch einfach jeweils einen Slash nehmen, wenn es sich um Pfadangaben handelt. Beim Rechnernamen geht das aber vermutlich nicht.
Im Ergebnis erkennt TV-Browser [c]"a \"\"b\"\" c"[/c] als einen Parameter und übergibt diesen dann auch explizit als einen Parameter an das System und zwar als [c]a ""b"" c[/c], die äußeren Anführungszeichen werden entfernt. Weil es explizit als ein Parameter übergeben wird reichen dann für das Autohotkey-Skript die zwei Anführungszeichen, da ja die äußeren fehlen. Würde man hier drei Anführungszeichen übergeben, dann würde es nicht funktionieren.
Welche Funktion von Java im Hintergrund beim Starten von Programmen auch immer aufgerufen wird, dieser werden die Parameter explizit als einzelne Parameter übergeben, daher auch keine äußeren Anführungszeichen.
Wie gesagt, mit Hilfe von [c]replace[/c] kannst du testen, ob es mit drei Anführungszeichen plus äußeren Anführungszeichen funktioniert, wenn du das Aufnahmeprogramm aufrufst [c]"\\"{replace(description,"%"::%\%"%\%"%\%"")}\\""[/c], ich vermute aber das es dann nicht funktioniert, denn Autohotkey interpretiert das dann als einzelne Parameter ab dem ersten Anführungszeichen im Text. Probiere außerdem [c]"{replace(description,"%"::%\%\%\%"")}"[/c], wenn ich weiß, dass [c]\"[/c] als Escape-Sequenz auch bei deinem Aufnahmeprogramm funktioniert, dann kann ich [c]replaceQuotes[/c] entsprechend ändern, denn dann dürfte es bei anderen auch funktionieren, denn bei Autohotkey geht es so auch. Bevor ich nicht weiß, was bei deinem Aufnahmeprogramm funktioniert bzw. ob es überhaupt funktioniert, kann ich auch keine Anleitung schreiben, denn es ist ja alles noch in Entwicklung.
Möglicherweise kommt einfach das Aufnahmeprogramm mit Anführungszeichen nicht klar und sucht die Kommandozeile einfach stur nach Anführungszeichen ab.
Letztendlich ist das auch genau der Grund, warum sich die Aufnahmesteuerung standardmäßig nicht um solche Dinge kümmert, jedes Programm kann es anders handhaben und es gibt keine Garantie, dass es auf eine bestimmte Weise funktioniert.
Hier das Autohotkey-Skript, das lässt sich zur EXE kompilieren, wenn Autohotkey installiert ist:
[code]#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
; #Warn ; Enable warnings to assist with detecting common errors.
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
Loop, %0% ; For each parameter:
{
param := %A_Index% ; Fetch the contents of the variable whose name is contained in A_Index.
MsgBox, 4,, Parameter number %A_Index% is %param%. Continue?
IfMsgBox, No
break
}[/code]
Dass mit dem Passwort stimmt, war auch bisher schon so, wenn da ein Backslash drin vorkam und mit Anführungszeichen im Passwort ging es bisher gar nicht. An sich ist es auch keine schöne Lösung das Passwort im Klartext über die Kommandozeile zu schicken. Wenn sich mit [c]escapeQuotes[/c] eine funktionierende Lösung ergibt, kann man die aber beim Passwort mit Anführungszeichen auch verwenden, nur beim Backslash bliebe das Problem.
Die Aufnahmesteuerung richtet sich jedenfalls eher an Poweruser, da sehr komplex, allein mit den Einstellungen sind viele schon überfordert und sie wurde auch nicht von mir programmiert, sondern ist mir nur in den Schoß gefallen, weil alle anderen Entwickler von TV-Browser vor über 10 Jahren schon abgesprungen sind.
EDIT: Ich habe hier außerdem ein kleines Java-Tool geschrieben, was auch die Parameter mit Nummer ausgeben kann. Da muss man als zu startendes Programm die java.exe auswählen und als Parameter [c]-jar "LAUFWERK:/PFAD/ParameterPrinter.jar" "{escapeQuotes(description)}"[/c] Auch damit funktioniert es sowohl mit zwei Anführungszeichen, als auch mit Backslash und einem Anführungszeichen.