Programm starten

Hallo
Ich hab eine javascript mit dem ich ein Programm aus einer html Datei starten will.
Das funktioniert auch solang ich als Programm z.B. mspaint.exe eingebe und für volume C:\
Sobald ich die Variable volume aber ändere z.B. C:\Programme\ funktioniert es nicht mehr
Bitte helft mir, was hab ich falsch gemacht?
Hier das Script:

<!–
function OpenPaint()
{
var volume = „C:\“;
var fullPath = „volume“ + "mspaint.exe ";
var WshShell = new ActiveXObject(„WScript.Shell“);
var oExec = WshShell.Exec(fullPath);
while (oExec.Status == 0)
{
WScript.Sleep(100);
}
WScript.Echo(oExec.Status);
}
–>
Paint Öffnen

Zeichen maskieren mit dem Backslash

Hallo
Ich hab eine javascript mit dem ich ein Programm aus einer
html Datei starten will.
Das funktioniert auch solang ich als Programm z.B. mspaint.exe
eingebe und für volume C:\
Sobald ich die Variable volume aber ändere z.B. C:\Programme\
funktioniert es nicht mehr
Bitte helft mir, was hab ich falsch gemacht?
Hier das Script:

<!–
function OpenPaint()
{
var volume = „C:\“;
<B>alert(volume);</B>
var fullPath = „volume“ + "mspaint.exe ";
var WshShell = new ActiveXObject(„WScript.Shell“);
var oExec = WshShell.Exec(fullPath);
while (oExec.Status == 0)
{
WScript.Sleep(100);
}
WScript.Echo(oExec.Status);
}
–>

Paint Öffnen

Wenn Du in JavaScript einen String (Zeichenkette)definierst, kannst Du das mit doppelten oder einfachen Anführungszeichen (AZ) erledigen. Ein Beispiel mit beiden Varianten, die genau dasselbe bewirken:

var s1 = 'Hallo';
var s2 = "Hallo";

Die Variablen s1 und s2 haben also einen identischen Inhalt. Wenn Du also z.B. die folgenden zwei Strings definieren willst:

Das Wort „Hallo“ ist kurz.
Das Wort ‚Hallo‘ ist kurz.

… verwendest Du die jeweils anderen AZ als die, die Du im Text verwenden willst:

var s1 = 'Das Wort "Hallo" ist kurz.';
var s2 = "Das Wort 'Hallo' ist kurz.";

Schwierig wird es aber hiermit:

Die Wörter „Hallo“ und ‚Besen‘ sind gleich lang.

Egal, welches AZ Du verwendetst - im Text kommt es auch vor, und beim Ausführen des Skripts würde es zum Fehler kommen. Die Lösung ist das Maskieren von Zeichen:

var s1 = 'Die Wörter "Hallo" und \'Besen\' sind gleich lang.';
var s2 = "Die Wörter \"Hallo\" und 'Besen' sind gleich lang.";

Der Backslash () maskiert das nachfolgende Zeichen und sorgt dafür, dass es besonders behandelt wird. Im Falle eines AZ, das eigentlich das Ende des Strings bezeichnet, weil er mit diesem AZ definiert wird, bewirkt der Backslash, dass es ignoriert und als solches dargestellt wird. Es gibt aber auch andere Zeichen, die in Verbindung mit dem Backslash eine besondere Bedeutung haben: \n z.B. ist ein Zeilenumbruch. Damit bekommt man übrigens mehrzeilige Meldungen hin:

alert('Das ist die erste Zeile. **\n** Und das ist die zweite.');

Setzt man nun den Backslash vor ein Zeichen, das keine „verborgene“ Bedeutung hat, wird das Zeichen einfach so dargestellt, wie es ist:

alert('Der Buc\hstabe "h" \hat keine besondere Bedeutung für den Backslas\h.');

Das „h“ wird als „h“ dargestellt, also kann man sich die ganzen \ auch sparen.

So, und nun kommt der eigentliche Punkt: Wenn man nun den Backslash selbst darstellen will, muss man ihn sozusagen mit sich selbst maskieren:

alert('Der Backslash sieht so aus: **\** \.');

Heraus kommt: Der Backslash sieht so aus: . So, und nun erkennst Du, warum Dein Code nicht funktioniert, wenn Du einfach die Windows-Pfade verwendest:

var s1 = "C:\Programme\Mozilla Firefox\neue Seiten";
var s2 = "C:\\Programme\\Mozilla Firefox\\neue Seiten";

s1 ist zweizeilig, wobei die erste Zeile so aussieht: C:stuck_out_tongue:rogrammeMozilla Firefox und die zweite so: eue Seiten. Das \n wurde als Zeilenumbruch erkannt. In s2 hingegen C:\Programme\Mozilla Firefox\neue Seiten.

Soweit klar? Du musst also jeden Backslash durch einen doppelten ersetzen. Probieren kann man übrigens auch, die Backslashes einfach durch Slashes zu ersetzen, also „C:/Programme/Mozilla Firefox/neue Seiten“ zu schreiben. Könnte auch klappen, bin mir aber nicht sicher.

Kristian

PS:
Du hättest den Fehler selbst gefunden, wenn Du nicht im Blindflug programmiert hättest. Ich habe diesen Hinweis hier schon etliche Male gegeben, ud es wird wohl noch häufig passieren: Lasst Euch anzeigen, was in zusammengebastelten Variablen steht! Ich habe das oben in Deinem Code mal fett eingefügt. Eine einzige Zeile, die Deine Anfrage hier überflüssig gemacht hätte :wink:

Danke!
Funktioniert einwandfrei!
Ich hab das mit dem Maskieren in Variablen garnicht gewusst!
Hab erst vor einer Woche angefangen mir Javascript beizubringen!

Danke!
Funktioniert einwandfrei!
Ich hab das mit dem Maskieren in Variablen gar nicht gewusst!
Hab erst vor einer Woche angefangen mir Javascript beizubringen!

Na dann kann ich Dir nur SELFHTML empfehlen, falls Du das noch nicht kennst. Damit habe ich auch JS gelernt:

http://de.selfhtml.org/

Kristian