Afficher une boîte pop-up / message à partir d'un fichier de commandes de Windows
-
13-09-2019 - |
Question
Y at-il un moyen d'afficher une boîte de message à partir d'un fichier batch (similaire à la façon dont xmessage
peut être utilisé à partir bash scripts sous Linux)?
La solution
Je voudrais faire un fichier VBScript très simple et appeler à l'aide CScript pour analyser les paramètres de ligne de commande.
Quelque chose comme ce qui suit enregistrés dans MessageBox.vbs
:
Set objArgs = WScript.Arguments
messageText = objArgs(0)
MsgBox messageText
Ce qui vous appelleriez comme:
cscript MessageBox.vbs "This will be shown in a popup."
MsgBox
référence si vous sont intéressés à aller dans cette voie.
Autres conseils
Tout d'abord, DOS n'a rien à voir avec elle, vous voulez probablement une solution de ligne de commande Windows. (Nouveau: pas DOS, pur de Windows, mais pas une fenêtre, mais une console)
Vous pouvez utiliser la méthode VBScript fournie par boflynn ou vous pouvez la mauvaise utilisation ou net send
msg
. net send
ne fonctionne que sur les anciennes versions de Windows:
net send localhost Some message to display
Cela dépend aussi du service Messenger de fonctionner, bien.
Pour les versions plus récentes (XP et en avant, apparemment):
msg "%username%" Some message to display
Il convient de noter qu'une boîte de message envoyé à l'aide msg.exe
ne durera pendant 60 secondes. Cependant, cela peut être outrepassée avec le commutateur /time:xx
.
peut afficher un petit flash, mais aucun fichier temp nécessaire. Si le travail tout le chemin du retour à quelque part dans le (IIRC) ère IE5.
mshta javascript:alert("Message\n\nMultiple\nLines\ntoo!");close();
Ne pas oublier de échapper à vos parenthèses si vous re en utilisant if
:
if 1 == 1 (
mshta javascript:alert^("1 is equal to 1, amazing."^);close^(^);
)
Ce pop-up une autre fenêtre d'invite de commande:
START CMD /C "ECHO My Popup Message && PAUSE"
Essayez:
Msg * "insert your message here"
Si vous utilisez le command.com de Windows XP, cela va ouvrir une boîte de message.
L'ouverture d'une nouvelle fenêtre de cmd est pas tout à fait ce que vous demandiez, je crois.
Vous pouvez également utiliser VBScript
Qu'est-ce que cela ne fait changer le command.com de répertoire rechercher des fichiers à partir, puis sur la ligne suivante: Ensuite, vous créez un nouveau document
Vous pouvez ensuite enregistrer comme un fichier .vbs (en mettant « .vbs » à la fin du nom de fichier), enregistrer en tant que « tous les fichiers » dans le menu déroulant ci-dessous le nom du fichier (il ne sauve pas txt), puis cliquez sur Enregistrer! cd C:\"location of vbscript"
"insert name of your vbscript here".vbs
<script type="text/vbscript">
MsgBox "your text here"
</script>
De cette façon, votre fichier batch va créer un script VBS et afficher un popup. Une fois qu'il est exécuté, le fichier de commandes supprime ce fichier intermédiaire.
L'avantage d'utiliser MSGBOX est qu'il est vraiment customaziable (changer le titre, l'icône, etc.), tandis que msg.exe est pas autant.
echo MSGBOX "YOUR MESSAGE" > %temp%\TEMPmessage.vbs
call %temp%\TEMPmessage.vbs
del %temp%\TEMPmessage.vbs /f /q
Peu d'autres façons.
1) Le geekiest et hackiest - il utilise le IEXPRESS pour créer petit exe qui va créer un pop-up avec un seul bouton ( il peut créer deux types de messages pop-up ). Fonctionne sur tous les fenêtres de XP et ci-dessus:
;@echo off
;setlocal
;set ppopup_executable=popupe.exe
;set "message2=click OK to continue"
;
;del /q /f %tmp%\yes >nul 2>&1
;
;copy /y "%~f0" "%temp%\popup.sed" >nul 2>&1
;(echo(FinishMessage=%message2%)>>"%temp%\popup.sed";
;(echo(TargetName=%cd%\%ppopup_executable%)>>"%temp%\popup.sed";
;(echo(FriendlyName=%message1_title%)>>"%temp%\popup.sed"
;
;iexpress /n /q /m %temp%\popup.sed
;%ppopup_executable%
;rem del /q /f %ppopup_executable% >nul 2>&1
;pause
;endlocal
;exit /b 0
[Version]
Class=IEXPRESS
SEDVersion=3
[Options]
PackagePurpose=InstallApp
ShowInstallProgramWindow=1
HideExtractAnimation=1
UseLongFileName=0
InsideCompressed=0
CAB_FixedSize=0
CAB_ResvCodeSigning=0
RebootMode=N
InstallPrompt=%InstallPrompt%
DisplayLicense=%DisplayLicense%
FinishMessage=%FinishMessage%
TargetName=%TargetName%
FriendlyName=%FriendlyName%
AppLaunched=%AppLaunched%
PostInstallCmd=%PostInstallCmd%
AdminQuietInstCmd=%AdminQuietInstCmd%
UserQuietInstCmd=%UserQuietInstCmd%
SourceFiles=SourceFiles
[SourceFiles]
SourceFiles0=C:\Windows\System32\
[SourceFiles0]
%FILE0%=
[Strings]
AppLaunched=subst.exe
PostInstallCmd=<None>
AdminQuietInstCmd=
UserQuietInstCmd=
FILE0="subst.exe"
DisplayLicense=
InstallPrompt=
2) En utilisant MSHTA
. Fonctionne également sur toutes les machines Windows de XP et plus (en dépit de l'OP ne veulent pas que les langues « externes » JavaScript est réduite au minimum ici). Devrait être enregistré en tant que .bat
:
@if (true == false) @end /*!
@echo off
mshta "about:<script src='file://%~f0'></script><script>close()</script>" %*
goto :EOF */
alert("Hello, world!");
ou dans une ligne:
mshta "about:<script>alert('Hello, world!');close()</script>"
ou
mshta "javascript:alert('message');close()"
ou
mshta.exe vbscript:Execute("msgbox ""message"",0,""title"":close")
3) Voici hybride paramétrés de .bat/jscript
(doit être enregistré sous bat
). Il utilise à nouveau JavaScript malgré la demande OP mais comme il est une chauve-souris, il peut être appelé comme un fichier de chauve-souris sans soucis. Il utilise POPUP qui permet un peu peu plus de contrôle que la MSGBOX . Il utilise WSH, mais pas MSHTA comme dans l'exemple ci-dessus.
@if (@x)==(@y) @end /***** jscript comment ******
@echo off
cscript //E:JScript //nologo "%~f0" "%~nx0" %*
exit /b 0
@if (@x)==(@y) @end ****** end comment *********/
var wshShell = WScript.CreateObject("WScript.Shell");
var args=WScript.Arguments;
var title=args.Item(0);
var timeout=-1;
var pressed_message="button pressed";
var timeout_message="timed out";
var message="";
function printHelp() {
WScript.Echo(title + "[-title Title] [-timeout m] [-tom \"Time-out message\"] [-pbm \"Pressed button message\"] [-message \"pop-up message\"]");
}
if (WScript.Arguments.Length==1){
runPopup();
WScript.Quit(0);
}
if (args.Item(1).toLowerCase() == "-help" || args.Item(1).toLowerCase() == "-h" ) {
printHelp();
WScript.Quit(0);
}
if (WScript.Arguments.Length % 2 == 0 ) {
WScript.Echo("Illegal arguments ");
printHelp();
WScript.Quit(1);
}
for (var arg = 1 ; arg<args.Length;arg=arg+2) {
if (args.Item(arg).toLowerCase() == "-title") {
title = args.Item(arg+1);
}
if (args.Item(arg).toLowerCase() == "-timeout") {
timeout = parseInt(args.Item(arg+1));
if (isNaN(timeout)) {
timeout=-1;
}
}
if (args.Item(arg).toLowerCase() == "-tom") {
timeout_message = args.Item(arg+1);
}
if (args.Item(arg).toLowerCase() == "-pbm") {
pressed_message = args.Item(arg+1);
}
if (args.Item(arg).toLowerCase() == "-message") {
message = args.Item(arg+1);
}
}
function runPopup(){
var btn = wshShell.Popup(message, timeout, title, 0x0 + 0x10);
switch(btn) {
// button pressed.
case 1:
WScript.Echo(pressed_message);
break;
// Timed out.
case -1:
WScript.Echo(timeout_message);
break;
}
}
runPopup();
4) et un hybride jscript.net/.bat
(doit être enregistré sous .bat
) .Ce temps il utilise .NET
et compile un petit fichier .exe
qui pourrait être supprimé:
@if (@X)==(@Y) @end /****** silent jscript comment ******
@echo off
::::::::::::::::::::::::::::::::::::
::: compile the script ::::
::::::::::::::::::::::::::::::::::::
setlocal
::if exist "%~n0.exe" goto :skip_compilation
:: searching the latest installed .net framework
for /f "tokens=* delims=" %%v in ('dir /b /s /a:d /o:-n "%SystemRoot%\Microsoft.NET\Framework\v*"') do (
if exist "%%v\jsc.exe" (
rem :: the javascript.net compiler
set "jsc=%%~dpsnfxv\jsc.exe"
goto :break_loop
)
)
echo jsc.exe not found && exit /b 0
:break_loop
call %jsc% /nologo /out:"%~n0.exe" "%~f0"
::::::::::::::::::::::::::::::::::::
::: end of compilation ::::
::::::::::::::::::::::::::::::::::::
:skip_compilation
::
::::::::::
"%~n0.exe" %*
::::::::
::
endlocal
exit /b 0
****** end of jscript comment ******/
import System;
import System.Windows;
import System.Windows.Forms
var arguments:String[] = Environment.GetCommandLineArgs();
MessageBox.Show(arguments[1],arguments[0]);
5) et à la fin un seul appel à Powershell qui crée un pop-up (peut être appelé de la ligne de commande ou de lot si Powershell est installé):
powershell [Reflection.Assembly]::LoadWithPartialName("""System.Windows.Forms""");[Windows.Forms.MessageBox]::show("""Hello World""", """My PopUp Message Box""")
6)
vu l'approche du dbenhamstart "" cmd /c "echo(&echo(&echo Hello world! &echo(&pause>nul"
7 ) Pour une notification de plateau de système, vous pouvez essayer cette :
call SystemTrayNotification.bat -tooltip warning -time 3000 -title "Woow" -text "Boom" -icon question
Voici une variante PowerShell qui ne nécessite pas le chargement des assemblages avant de créer la fenêtre, mais il fonctionne sensiblement plus lent (+ 50%) que la commande MessageBox PowerShell posté ici par @npocmaka:
powershell (New-Object -ComObject Wscript.Shell).Popup("""Operation Completed""",0,"""Done""",0x0)
Vous pouvez modifier le dernier paramètre de « 0x0 » à une valeur inférieure pour afficher les icônes dans la boîte de dialogue (voir Méthode Popup à titre de référence):
0x10 Arrêter
0x20 question Mark
0x30 Exclamation Mark
0x40 information Mark
Adapté de l'article Microsoft TechNet POWERTIP. Utilisez PowerShell pour afficher des pop-up fenêtre
echo X=MsgBox("Message Description",0+16,"Title") >msg.vbs
peut écrire des -Tu nombres de 0,1,2,3,4 au lieu de 0 (avant le symbole « + ») et est le sens ici de chaque numéro:
0 = Ok Button
1 = Ok/Cancel Button
2 = Abort/Retry/Ignore button
3 = Yes/No/Cancel
4 = Yes/No
peut écrire des -Tu chiffres de 16,32,48,64 au lieu de 16 (après le symbole « + ») et est ici le sens de chaque numéro:
16 – Critical Icon
32 – Warning Icon
48 – Warning Message Icon
64 – Information Icon
Msg * "insérez ici votre message"
fonctionne très bien, il suffit de sauvegarder comme un fichier .bat dans le bloc-notes ou assurez-vous que le format est réglé sur « tous les fichiers »
Pour ce faire, vous devez avoir un petit programme qui affiche un MessageBox et exécuter que de votre fichier batch.
Vous pouvez ouvrir une fenêtre de console qui affiche une invite bien, mais obtenir une boîte de message GUI en utilisant cmd.exe et les amis n'est pas possible, autant que je sache.
J'utilise un utilitaire nommé msgbox.exe d'ici: http://www.paulsadowski.com/WSH/cmdprogs.htm
Vous pouvez utiliser Zenity. Zenity permet l'exécution de boîtes de dialogue en ligne de commande et des scripts shell. Plus d'informations peuvent également être trouvés sur Wikipedia .
Il est multi-plateforme: un programme d'installation de Windows pour Windows se trouve <. / p>
msg * /time:0 /w Hello everybody!
Ce message attend toujours jusqu'à ce que vous cliquez sur OK (il ne dure qu'une minute par défaut) et fonctionne très bien dans Windows 8.1
Vous pouvez appeler la fonction dll user32.dll je pense Quelque chose comme
Rundll32.exe user32.dll, MessageBox (0, "texte", "titletext", {drapeaux supplémentaires pour comme e.t.c} messagebox le plus élevé)
La saisie manuelle de mon téléphone, ne me jugez pas ... sinon je relier les drapeaux supplémentaires.
* msg /server:127.0.0.1 Tapez votre message ici
Cette application peut le faire, si vous convertissez (wrap) vos fichiers batch en les fichiers exécutables.
-
Simple Messagebox
%extd% /messagebox Title Text
-
Erreur Messagebox
%extd% /messagebox Error "Error message" 16
-
Annuler Try Again Messagebox
%extd% /messagebox Title "Try again or Cancel" 5
4) "Ne plus me demander" Messagebox
%extd% /messageboxcheck Title Message 0 {73E8105A-7AD2-4335-B694-94F837A38E79}
Une meilleure option
set my_message=Hello world
&& start cmd /c "@echo off & mode con cols=15 lines=2 & echo %my_message% & pause>nul"
Description:
montant
de lines=
de lignes, plus 1
quantité de cols=
de caractères dans le message, plus 3 (Toutefois, le minimum doit être 15
)
Version cols
calculée Auto:
set my_message=Hello world
&& (echo %my_message%>EMPTY_FILE123 && FOR %? IN (EMPTY_FILE123 ) DO SET strlength=%~z? && del EMPTY_FILE123 ) && start cmd /c "@echo off && mode con lines=2 cols=%strlength% && echo %my_message% && pause>nul"
il suffit de pop-up lorsque l'intérieur d'une machine virtuelle, donc techniquement, il devrait y avoir un code comme:
if %machine_type% == virtual_machine then
echo message box code
else
continue normal installation code