2014-01-16 20 views
12

Hinweis: Dies ist ein question-with-answer, um eine Technik zu dokumentieren, die andere nützlich finden könnten, und um vielleicht andere besser kennen zu lernen ’ noch bessere Lösungen. Fühlen Sie sich frei, Kritik oder Fragen als Kommentare hinzuzufügen. Fühlen Sie sich auch frei, zusätzliche Antworten hinzuzufügen. :)Windows [cmd.exe] Befehl zum Anzeigen einer Nachricht mit Timeout?


Wie kann ich zeigen eine messagebox durch einen Windows-Befehl eingeben, z in der Führen Sie Dialogfeld aus dem Startmenü oder in der [Cmd.exe] -Befehlsinterpreter?

Antwort

25

Eine Möglichkeit ist anscheinend nicht dokumentierte Funktion zu nutzen, dass nämlich [mshta.exe], die Runtime-Engine für Windows .hta HTML-Anwendungen, eine allgemeine URL als Kommandozeilen-Argument akzeptiert, darunter eine javascript: Protokoll URL:

mshta "javascript:var sh=new ActiveXObject('WScript.Shell'); sh.Popup('Message!', 10, 'Title!', 64);close()" 

                        The resulting messagebox

Dieser Befehl kann z. [cmd.exe]] oder z.B. in der Run Dialogfeld aus dem Startmenü, vielleicht kombiniert mit dem schtasks Befehl, um einen Tee-Timer & Hellip zu erstellen;

Die oben angegebene Nachricht wird nach 10 Sekunden abgebrochen, aber die Angabe einer 0-Sekunden-Zeitüberschreitung bedeutet “ don ’ t time out ”, wodurch eine normale persistente Nachricht erstellt wird.

Für eine einfachere MessageBox können Sie stattdessen die alert-Funktion verwenden, die vom MSHTA-Host bereitgestellt wird.

+1

gut 'MSHTA„javascript: ('! Message') Alarm ; "sollte auch funktionieren dann – Pierre

+1

Laut der [Popup Method Dokumentation] (https://msdn.microsoft.com/en-us/library/x83z1d9f (v = vs.84) .aspx), kann es mehr Schaltflächen anzeigen (wie _Retry_ und _Cancel_) und kann den Wert der Taste, die gedrückt wurde, zurückgeben. Wie kann dieser Wert an das Stapelscript zurückgegeben werden? – Wayfarer

+1

@Wayfarer; Der natürliche Weg wäre über den 'mshta'-Prozess-Exit-Code, aber ich kenne keinen vernünftigen Weg, dies zu tun (unvernünftige Art: den Prozess zu töten). Alternativen umfassen dann das Speichern des Werts in einem Registrierungsschlüssel oder einer Datei. Es ist hässlich und es ist dann kein One-Liner mehr. Wenn ich diese Funktionalität benötigte, würde ich stattdessen ein Dienstprogramm in C++ schreiben. Das ist fast trivial. –

7

auf Eingabeaufforderung:

msg %username% Message 

interessante Parameter sind:

/w  (wait for user) 
/time:<seconds> 
+0

Das ist ein netter, aber funktioniert nicht in meinem Windows 7. Ich vermute, 'msg', sowie' net send', wurde in Windows 7 eingestellt oder früher, wahrscheinlich in Windows Vista. :( –

+0

arbeiten in Win7 Enterprise. Vielleicht Microsoft denkt, ein "Home" Benutzer wird es nicht benötigen. – Stephan

+0

Oh! Explorer sagt, das ist Windows 7 Home Premium, Service Pack 1. –

1

gefunden, dass, wenn Sie MSG.EXE von einem Win7 Pro Maschine zu einem Win7 Home Maschine kopieren es funktioniert. Kopieren Sie die Datei msg.exe in den Ordner C: \ Windows \ System32.

+0

Eine Alternative, wenn man die Möglichkeit hat, eine Datei zu erstellen, besteht darin, einfach eine VBScript- oder JScript-Skriptdatei zu erstellen, zB in der Datei 'msgbox.vbs' folgenden Code:' msgbox WScript.Arguments (0), vbInformation , "Message!" '. Auf diese Weise ist eine Win7 Pro-Installation nicht erforderlich. –

1

Was passiert, wenn Sie ein kleines VBScript mit der Nachricht erstellen, die Sie anzeigen möchten? I.e. e Datei mit dem Namen "Message.vbs" mit dem Inhalt erstellen:

MsgBox "Some info here", 0, "Message Title"

und es so nennen:

cscript.exe PATH\Message.vbs

+0

Ja. Für mehr Allgemeingültigkeit kann man das erste Argument in' WScript.Arguments (0) 'ändern, wie ich [in einem Kommentar zu einer anderen Antwort] bemerkte. (http://stackoverflow.com/questions/21165565/windows-cmd-exe-command-to-display-a-messagebox-with-timeout/33963626#comment46067347_28903514). Und für das zweite Argument kann man 'vbInformation' oder verwenden sein numerisches Äquivalent. Es ist wahrscheinlich ein Es ist auch eine gute Idee, die Option äquivalent zu C und C++ 'MB_SETFOREGROUND' hinzuzufügen, damit die Box nicht hinter einem Konsolenfenster angezeigt wird. Ich kenne den VBS-Namen dafür nicht, sorry. –