Afficher la boîte de message du Planificateur de tâches au-dessus de toutes les autres fenêtres

13

Existe-t-il un bon moyen de faire apparaître une boîte de message à une heure planifiée au-dessus d'autres fenêtres? L'action par défaut "Afficher un message" apparaît inutilement sous tout le reste.

Mousse
la source

Réponses:

13

Que diriez-vous d'utiliser la msgcommande intégrée de Windows comme ça?

msg * "Message you would like to send"

Vous pouvez ajouter d'autres paramètres tels que /TIME:xoù x est le nombre de secondes pendant lesquelles le message doit s'afficher. Bien sûr, msg /?vous montrera toutes les options disponibles.

Cela implique Windows XP et supérieur comme système sur lequel vous souhaitez afficher le message. Si vous disposez d'une édition familiale du système d'exploitation applicable, vous n'avez pas de chance. Voir http://ss64.com/nt/msg.html pour les paramètres disponibles.

Si vous disposez d'une édition familiale, le script de commandes suivant affichera un message à l'aide de la méthode PopUp de VBSCript:

@echo off
::See http://msdn.microsoft.com/en-us/library/x83z1d9f(v=vs.84).aspx
::for an explanation of the PopUp method
::

::Use the directory from whence script was called as working directory
set CWD=%~dp0

::Use a random file name for the temporary VBScript.
set usrmsg=%CWD%%random%.vbs

::First parameter is the timeout in seconds. 0 = wait forever
set _timeout=%~1

::Second parameter is the message, enclosed in quotes.
set _Message=%~2

::Third parameter is the title of the window, enclosed in quotes.
set _Title=%~3

::This last variable is used to display a button/icon on the window.
::Setting this to 4096 sets the window to Modal (on top of everything else)
set _nType=4160

::Create the temp script using the provided information.
ECHO Set wshShell = CreateObject( "WScript.Shell" )>%usrmsg%
ECHO wshShell.Popup "%_Message%" ^& vbCrLf, %_Timeout%, "%_Title%", %_nType%>>%usrmsg%

::Run the script.
WSCRIPT.EXE %usrmsg%

::Delete the script.
DEL %usrmsg%

::Exit the batch file
exit /b

J'espère que cela t'aides!

Ajouté: Gregg mentionne dans les commentaires que pour que cela fonctionne dans Windows 10, vous devez utiliser "/ time: 0" si vous souhaitez que le message reste à l'écran plus de 60 secondes.

JSanchez
la source
Qu'est-ce que tu racontes? Qu'est-ce que c'est msg? Je ne reçois rien si j'essaye de l'exécuter à partir de la zone Exécuter ou à partir de l'invite de commandes.
Moss
Vous n'avez pas spécifié dans votre question quelle version de Windows vous avez. Si vous avez une édition Home, vous n'avez pas de chance. ss64.com/nt/msg.html
JSanchez
2
Le message FYI se ferme automatiquement après 60 secondes, sauf indication contraire /TIME:0. C'est sur Win10 x64 v1607 Enterprise LTSB. Je me demandais pourquoi mon script avait bien fonctionné, mais je n'ai jamais reçu de message lorsque j'ai mis le Planificateur de tâches. Prise honteuse: serverfault.com/a/931932/131761
gregg
6

Voir également https://www.howtogeek.com/136894/how-to-create-popup-reminders-with-no-additional-software/ . En cas de lien mort, je résumerai ici:

  1. Ouvrez le Planificateur de tâches Windows (recherchez «Planificateur de tâches» dans le menu Démarrer)
  2. Sous Actions, cliquez sur «Créer une tâche»
  3. Dans l'onglet Général, assurez-vous que «Exécuter uniquement lorsque l'utilisateur est connecté» est coché et que «Masqué» n'est PAS coché.
  4. Dans l'onglet Déclencheurs, cliquez sur «Nouveau» pour définir une heure de déclenchement du message
  5. Dans l'onglet Actions, cliquez sur «Nouveau» et assurez-vous que l'action sélectionnée en haut est «Démarrer un programme»
  6. Dans 'Programme / script', saisissez CMD
  7. Dans 'Ajouter des arguments', copiez et collez ceci:

    / C TITLE [Votre titre ici] & ECHO. & ECHO. & ECHO [Votre message ici] & ECHO. & ECHO. & TIMEOUT [timeout]

  8. Remplacez [Votre titre ici] et [Votre message ici] par votre texte préféré (n'incluez pas les crochets)
  9. Remplacez [timeout] par le nombre de secondes pendant lesquelles vous voulez que le message attende avant expiration, ou -1 si vous ne voulez pas qu'il expire (dans les deux cas, une pression sur une touche alors que la fenêtre de la console est active la fermera)
  10. Cliquez sur OK'!

Cela générera une fenêtre de console avec le texte donné, qui apparaîtra EN HAUT de votre fenêtre actuelle, mais ne volera pas automatiquement le focus (vous pouvez continuer à interagir avec votre fenêtre actuelle comme d'habitude).

C'était la meilleure solution que j'ai trouvée, j'espère que cela aide quelqu'un!

Wanderspeak
la source
Cela devrait être la réponse acceptée très lisse, merci!
spartikus
1

Utilisation msgboxen vbs. comme ça:

Set filesys = CreateObject("Scripting.FileSystemObject") 
Set shell = CreateObject("Shell.Application")
Set wshShell = WScript.CreateObject( "WScript.Shell" )
PCName = wshShell.ExpandEnvironmentStrings( "%COMPUTERNAME%" )
msgbox "Dear user on " & PCName & vbcrlf & " " & vbcrlf & "This is a message box on top of all other windows.", &h51000, "I am msgbox"
shell.Open "C:\Users"

Le code &h51000veillera à ce que msgbox soit toujours au centre et au-dessus de toutes les autres fenêtres.

Si vous souhaitez uniquement planifier une msgbox, vous pouvez simplement utiliser le planificateur de tâches, il existe une fonction intégrée pour planifier un message. voir l'emplacement de [démarrer un programme] dans le planificateur de tâches.

Boucle racine
la source
1

Display a Messageest obsolète et la msgcommande n'a pas fonctionné pour moi dans Windows 10 1703. J'utilise powershellpour afficher la boîte de message d'une tâche planifiée, utilisez-la comme arguments lors de la définition de l'action:

-WindowStyle hidden -Command "& {[System.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms'); [System.Windows.Forms.MessageBox]::Show('<message body here>','<window title here>')}"

C'est laid AF, mais ça marche.

isalgueiro
la source
Vous pouvez indiquer ce qui se passe lorsque vous utilisez votre solution. L'erreur peut être utile aux autres utilisateurs.
Stese
Je n'obtiens pas ce qui manque dans ma réponse. Lorsque j'utilise la powershellsolution, une boîte de message apparaît. Lorsque vous utilisez la msgsolution, rien ne se passe, comme je le déclare dans mon commentaire.
isalgueiro
J'ai essayé la même chose avec powershell -WindowStyle hidden -File "<path to script>" mais cela ne fonctionne pas, cela ne fonctionne qu'avec -Commandargument, donc: powershell -WindowStyle hidden -Command "& '<path to script>'"
Mattia72