web-dev-qa-db-fra.com

Comment afficher une Msgbox directement à partir de CMD

Je voudrais afficher un message à l'utilisateur à l'aide de CMD. La façon dont je sais le faire est de créer un fichier .vbs (VBScript) et de l'exécuter à partir de CMD comme ceci:

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

start File.vbs

Mais ce que je veux faire, c'est afficher le message sans créer de fichier, directement à partir de CMD. Peut-être en utilisant une commande pour exécuter VBScripts directement à partir de CMD.

9
Bita

Comme suggéré par @wysiwyg, sur les versions Pro/Business * de Windows, vous recherchez la commande Msg. Il est disponible dans toutes les versions modernes de Windows (au moins aussi loin que XP). Pour afficher un message à l'utilisateur actuellement connecté, exécutez la procédure suivante:

msg %username% Your message here

Le résultat ressemble à ceci:  enter image description here

Une considération avec cette commande est que vous ne pouvez pas personnaliser le texte de la barre de titre.

Vous pouvez en savoir plus sur Msg sur TechNet .


* Si vous avez besoin d’une solution qui fonctionne sur all éditions de Windows, y compris Home , la méthode VBScript que vous connaissez déjà est à mon avis la solution la plus simple à ce problème. Il fonctionne sur toutes les versions et éditions modernes de Windows dans leur configuration par défaut et est facile à utiliser.

10
Twisty Impersonator

Comme d'autres l'ont dit, il est impossible de le faire uniquement avec cmd, mais bien que ce soit le titre de la question, il me semble que la partie sans fichier est plus importante pour vous et que, dans certaines circonstances, cela pourrait être possible. .

Avec powershell, il devrait être possible d'exécuter du code sans aucun fichier comme celui-ci:

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

VBS n'autorise pas l'exécution directe de code via cscript ou wscript, mais mshta le permet. Vous pouvez l'utiliser comme ceci (si vous avez besoin de plusieurs lignes, utilisez ':' comme délimiteur):

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

Comme il est basé, il pourrait être affecté par certaines restrictions de gpo, donc si vous avez le choix, powershell est probablement le meilleur choix

3
Syberdoor

J'avais besoin de quelque chose de semblable à cela aujourd'hui. Comme je ne pouvais pas trouver une solution de dépendance externe qui me plaisait car je ne suis pas vraiment un fan de VBScript/Powershell, je me suis lancé et j'en ai écrit une:

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

Les boîtes de message produites sont modal dans la fenêtre de la console actuelle. Autrement dit, l'utilisateur ne peut rien faire jusqu'à ce qu'il ferme la boîte de dialogue. En outre, le code de retour de l'appel MessageBox() est renvoyé à l'appelant afin qu'un script puisse réagir à n'importe quel bouton enfoncé. Et, bien sûr, il prend en charge l’ensemble des options de l’API MessageBox() Win32.

L'ajout d'un exécutable de 80 Ko au mélange risque de ne pas convenir à tout le monde. Il est statiquement lié au runtime VC++ et prend en charge le format Unicode, ce qui explique pourquoi le fichier est si volumineux compte tenu de la nature minimaliste de son travail. Et il existe un problème mineur lié à l'impossibilité de passer facilement de nouvelles lignes à partir de la ligne de commande pour afficher des messages multilignes. Sur une légère hausse, il affiche la boîte de dialogue en moins de temps d'horloge murale que l'une des autres solutions présentées jusqu'à présent.

Bien sûr, si la taille du fichier n'a pas d'importance et que les boîtes de dialogue créent une expérience utilisateur trop "dans votre visage" et/ou ne nécessitent pas une interaction de l'utilisateur, j'ai aussi rencontré ce projet astucieux:

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

Qui affiche une bulle contextuelle dans la zone de notification d'état de l'écran à l'aide de IUserNotification . L'inconvénient est que l'exécutable Notifu ne dépasse pas 240 Ko. Un autre exemple malheureux selon lequel COM crée une surcharge inutile et me laisse souhaiter qu’il existe une API simple et légère pour la fonctionnalité.

Pour quelque chose de multi-plateforme, il y a la zenity. C'est principalement pour Linux mais il y a aussi des ports Mac et Windows. Le port Windows de zenity a une taille supérieure à 1 Mo car, eh bien, GTK est assez bouffi.

2
CubicleSoft

J'ai un moyen de faire cela avec cmd, mais cela inclut essentiellement un fichier, mais le fichier est supprimé instantanément après l'exécution du fichier VBS. Donc ce n'est pas vraiment. Tu peux faire :

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

Type + Icône + Action est simplement vbs de base, pour une référence, ici. https://therevisionist.org/wp-content/uploads/2016/03/vbscript_msgbox_chart-e1458059002411.jpg?x47750 Le code que je vous ai montré crée un fichier contenant du code VBS qu'il exécute ensuite à l'aide de cscript, il supprime le fichier après son exécution pour donner l’impression qu’il a été convoqué par l’invite cmd. Pour que cela ressemble davantage à cela, utilisez simplement @echo off. J'espère que cela a aidé!

0
Zer0Byt3