So zeigen Sie eine Msgbox direkt aus CMD an

16

Ich möchte dem Benutzer mithilfe von CMD eine Nachricht anzeigen. Ich weiß, wie man das macht, indem ich eine .vbs (VBScript) -Datei erstelle und sie wie folgt aus CMD ausführe:

(echo MsgBox "Line 1" ^& vbCrLf ^& "Line 2",262192, "Title")> File.vbs

start File.vbs

Ich möchte die Nachricht jedoch anzeigen, ohne eine Datei direkt aus CMD zu erstellen. Möglicherweise mithilfe eines Befehls, um VBScripts direkt von CMD aus auszuführen.

Bita
quelle
Schlagen Sie den msgBefehl nach. Sie haben es möglicherweise nicht, wenn Sie eine Home Edition von Windows ausführen, aber Sie können es hinzufügen, indem Sie einfach msg.exe aus einer Pro-Installation kopieren und einfügen.
wysiwyg
Ich würde etwas "universeller" für alle Windows 10-Versionen, wenn es einen Weg gibt.
Bita
Es gibt immer auch Powershell. Oft übersehen, obwohl Microsoft eindeutig mit dem Übergang zur Beseitigung der cmd-Eingabeaufforderung begonnen hat.
Appleoddity

Antworten:

9

Wie andere gesagt haben, gibt es keine Möglichkeit, dies nur mit cmd zu tun, aber obwohl dies der Titel der Frage ist, scheint es mir, dass der Teil ohne Datei für Sie wichtiger ist und dies unter bestimmten Umständen möglich sein könnte.

Mit Powershell sollte es möglich sein, Code ohne folgende Datei auszuführen:

PowerShell -Command "Add-Type -AssemblyName PresentationFramework;[System.Windows.MessageBox]::Show('Hello World')"

VBS erlaubt nicht die direkte Ausführung von Code über cscript oder wscript, mshta jedoch. Sie können es folgendermaßen verwenden (wenn Sie mehrere Zeilen benötigen, verwenden Sie ':' als Trennzeichen):

mshta vbscript:Execute("msgbox ""Hello World"":close")

Da es dh basiert, kann es von einigen GPO-Einschränkungen betroffen sein. Wenn Sie also die Wahl haben, ist Powershell wahrscheinlich die sicherere Wette

Syberdoor
quelle
Zusätzlich zu der oben genannten Warnung wird dies von mshtaeinigen Antivirensoftware als potenziell unerwünschter Prozess angesehen. Bei der Arbeit führte mein Versuch, es auszuführen, zu einem übereifrigen Unternehmensprodukt (SentinelOne), das meinen gesamten Computer unter Quarantäne stellte und aus dem Netzwerk entfernte.
Jason
15

Wie von @wysiwyg vorgeschlagen, suchen Sie in Pro / Business-Versionen * von Windows nach dem MsgBefehl. Es ist in allen modernen Windows-Versionen verfügbar (mindestens bis XP). Führen Sie Folgendes aus, um dem aktuell angemeldeten Benutzer eine Nachricht anzuzeigen:

msg %username% Your message here

Das Ergebnis sieht folgendermaßen aus: Geben Sie hier die Bildbeschreibung ein

Eine Überlegung bei diesem Befehl ist, dass Sie den Text der Titelleiste nicht anpassen können.

Sie können mehr über Msg auf TechNet erfahren .


* Wenn Sie eine Lösung benötigen, die unter allen Windows-Editionen, einschließlich Home , funktioniert , ist meiner Meinung nach die Ihnen bereits bekannte VBScript-Methode die einfachste Lösung für dieses Problem. Es funktioniert auf allen modernen Versionen und Editionen von Windows in ihrer Standardkonfiguration und ist einfach zu bedienen.

Ich sage Reinstate Monica
quelle
1
Nicht ganz richtig. Es gab einen Befehl dps message box, seit Windows herauskam. Ich glaube, es wurde in Windows 7 oder 8 entfernt, da es als möglicher Exploit angesehen wurde.
Keltari
2

Ich brauchte heute etwas Ähnliches. Da ich keine externe Abhängigkeitslösung finden konnte, die mir gefiel, da ich nicht wirklich ein Fan von VBScript / Powershell bin, schrieb ich eine:

https://github.com/cubiclesoft/messagebox-windows

Die erzeugten Meldungsfelder sind modal zum aktuellen Konsolenfenster. Das heißt, der Benutzer kann nichts tun, bis er den Dialog schließt. Außerdem wird der Rückkehrcode des MessageBox()Anrufs an den Anrufer zurückgegeben, damit ein Skript auf die gedrückte Taste reagieren kann. Und natürlich unterstützt es die gesamte Palette der Optionen für die MessageBox()Win32-API.

Das Hinzufügen einer ausführbaren 80-KB-Datei zu der Mischung ist möglicherweise nicht jedermanns Sache. Es ist jedoch statisch mit der VC ++ - Laufzeit verknüpft und unterstützt Unicode, was erklärt, warum die Datei angesichts der minimalistischen Funktionsweise so groß ist. Und es gibt ein kleines Problem, dass es nicht einfach ist, Zeilenumbrüche über die Befehlszeile zu übergeben, um mehrzeilige Nachrichten anzuzeigen. Ein kleiner Vorteil ist, dass der Dialog in kürzerer Wanduhrzeit angezeigt wird als bei allen anderen bisher vorgestellten Lösungen.

Wenn die Dateigröße keine Rolle spielt und Dialoge eine zu "in your face" Benutzererfahrung erzeugen und / oder keine Benutzerinteraktion erfordern, bin ich natürlich auch auf dieses raffinierte Projekt gestoßen:

https://www.paralint.com/projects/notifu/

Hiermit wird mithilfe von IUserNotification eine Popup- Sprechblase im Statusbenachrichtigungsbereich des Bildschirms angezeigt . Der Nachteil ist, dass die ausführbare Notifu-Datei nur knapp 240 KB groß ist. Ein weiteres unglückliches Beispiel dafür, dass COM unnötiges Aufblähen verursacht und mich wünscht, es gäbe eine einfache, leichte API für diese Funktion.

Für etwas Plattformübergreifendes gibt es Zenität. Es ist hauptsächlich für Linux, aber es gibt auch Mac- und Windows-Ports. Der Windows-Port von Zenity ist über 1 MB groß, da GTK ziemlich aufgebläht ist.

CubicleSoft
quelle
Nicht, weil das gesamte GTK intern ausgeliefert werden muss, während native Windows-Versionen nur die bereits vorhandenen user32 / comctl-DLLs abrufen?
user1686
Huh? Bitte klären Sie die Frage.
CubicleSoft
1

Ich habe eine Möglichkeit, dies mit cmd zu tun, aber es enthält im Grunde eine Datei, aber die Datei wird sofort gelöscht, nachdem die vbs ausgeführt wurde. Also ist es nicht wirklich. Du kannst tun :

echo x=msgbox("Hey! Here is a message!",Type+Icon+Action,"Hey! Here is a title!") > %tmp%\tmp.vbs
cscript //nologo %tmp%\tmp.vbs
del %tmp%\tmp.vbs

Typ + Symbol + Aktion ist hier nur eine grundlegende vbs, als Referenz. https://therevisionist.org/wp-content/uploads/2016/03/vbscript_msgbox_chart-e1458059002411.jpg?x47750 Der Code, den ich Ihnen gezeigt habe, erstellt eine Datei mit VBS-Code und wird dann mit cscript ausgeführt löscht die Datei nach ihrer Ausführung, sodass sie so aussieht, als ob sie von der cmd-Eingabeaufforderung aufgerufen wurde. Um es so aussehen zu lassen, verwenden Sie einfach @echo aus. Hoffe das hat geholfen!

Zer0Byt3
quelle