Comment afficher une Msgbox directement à partir de CMD

16

Je voudrais afficher un message à l'utilisateur en utilisant 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.

Bita
la source
Recherchez la msgcommande. Vous ne pouvez pas l'avoir si vous exécutez une édition familiale de Windows, mais vous pouvez l'ajouter en copiant et collant simplement msg.exe à partir d'une installation Pro.
wysiwyg
Je voudrais quelque chose d'un peu plus "universel", pour toutes les versions de Windows 10 s'il y a un moyen.
Bita
Il y a toujours aussi un PowerShell. Oft négligé, même si Microsoft a clairement entamé la transition vers l'élimination de l'invite cmd.
Appleoddity

Réponses:

9

Comme d'autres l'ont dit, il n'y a aucun moyen 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 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 PresentationFramework;[System.Windows.MessageBox]::Show('Hello World')"

VBS ne permet 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 peut être affecté par certaines restrictions GPO, donc si vous avez le choix PowerShell est probablement le pari le plus sûr

Syberdoor
la source
En plus de l'avertissement ci-dessus mshta, certains logiciels antivirus le considèrent comme un processus potentiellement indésirable. Au travail, ma tentative d'exécution a abouti à un produit d'entreprise trop zélé (SentinelOne) pour mettre en quarantaine toute ma machine et la supprimer du réseau.
Jason
15

Comme suggéré par @wysiwyg, sur les versions Pro / Business * de Windows, vous recherchez la Msgcommande. 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 ce qui suit:

msg %username% Your message here

Le résultat ressemble à ceci: entrez la description de l'image ici

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 toutes les éditions de Windows, y compris Home , à mon avis , la méthode VBScript que vous êtes déjà au courant est 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.

Je dis Rétablir Monica
la source
1
Pas tout à fait vrai. Il y avait une commande de boîte de message dps depuis la sortie de Windows. Je crois qu'il a été supprimé dans Windows 7 ou 8 car il était considéré comme un exploit possible.
Keltari
2

J'avais besoin de quelque chose de similaire aujourd'hui. Comme je n'ai pas trouvé de solution de dépendance externe que j'aimais car je ne suis pas vraiment fan de VBScript / Powershell, j'ai continué et j'en ai écrit une:

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

Les boîtes de message qu'il génère sont modales par rapport à la fenêtre de console actuelle. Autrement dit, l'utilisateur ne peut rien faire tant qu'il n'a pas fermé la boîte de dialogue. En outre, le code de retour de l' MessageBox()appel est renvoyé à l'appelant afin qu'un script puisse réagir à n'importe quel bouton enfoncé. Et, bien sûr, il prend en charge la gamme complète des options de l' MessageBox()API Win32.

L'ajout d'un exécutable de 80 Ko au mélange n'est peut-être pas la tasse de thé de tout le monde. Il est cependant lié statiquement à l'environnement d'exécution VC ++ et prend en charge Unicode, ce qui explique pourquoi le fichier est si volumineux compte tenu de la nature minimaliste de ce qu'il fait. Et il y a un problème mineur de ne pas pouvoir passer facilement des sauts de ligne à partir de la ligne de commande pour afficher des messages multilignes. Sur un point mineur, il affiche la boîte de dialogue en moins de temps d'horloge murale que toutes les 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 "en face" et / ou ne nécessitent pas d'interaction avec l'utilisateur, j'ai également 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 s'exécute un peu moins de 240 Ko. Un autre exemple malheureux que COM crée des ballonnements inutiles et me laisse souhaiter qu'il y ait une API simple et légère pour la fonctionnalité.

Pour quelque chose de multiplateforme, il y a de la zénité. C'est principalement pour Linux mais il y a aussi des ports Mac et Windows. Le port Windows de zenity est supérieur à 1 Mo car, bien, GTK est assez gonflé.

CubicleSoft
la source
Pas parce qu'il doit expédier tout gtk en interne alors que les versions natives de Windows récupèrent simplement les DLL user32 / comctl qui sont déjà là?
user1686
Hein? Veuillez clarifier la question.
CubicleSoft
1

J'ai un moyen de le faire avec cmd, mais il comprend essentiellement un fichier, mais le fichier est supprimé instantanément après l'exécution du vbs. Ce n'est donc 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 + Icon + Action n'est que des vbs de base, pour 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, puis il l'exécute en utilisant cscript, puis il supprime le fichier après son exécution, donnant l'impression qu'il a été invoqué par l'invite cmd. Pour que cela ressemble davantage à cela, utilisez simplement @echo off. J'espère que cela a aidé!

Zer0Byt3
la source