Visualizza la finestra di messaggio dall'Utilità di pianificazione in cima a tutte le altre finestre


13

C'è un bel modo per far apparire una finestra di messaggio ad un'ora programmata sopra altre finestre? L'azione predefinita "Visualizza un messaggio" appare inutilmente sotto tutto il resto.

Risposte:


13

Che ne dici di usare il msgcomando integrato di Windows in questo modo?

msg * "Message you would like to send"

È possibile aggiungere altri parametri come /TIME:xdove x è il numero di secondi in cui si desidera visualizzare il messaggio. Naturalmente, msg /?ti mostrerà tutte le opzioni disponibili.

Ciò implica Windows XP e versioni successive come sistema in cui si desidera visualizzare il messaggio. Se hai una Home Edition del sistema operativo applicabile, sei sfortunato. Vedi http://ss64.com/nt/msg.html per i parametri disponibili.

Se hai una Home Edition, il seguente script batch farà apparire un messaggio usando il metodo PopUp di 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

Spero che sia di aiuto!

Aggiunto: Gregg menziona nei commenti che per farlo funzionare in Windows 10, devi usare "/ time: 0" se vuoi che il messaggio rimanga sullo schermo per più di 60 secondi.


Di cosa stai parlando? Che cosa è msg? Non ottengo nulla se provo a eseguirlo dalla casella Esegui o dal prompt dei comandi.
Moss,

Non hai specificato nella tua domanda quale versione di Windows hai. Se hai un'edizione Home, sei sfortunato. ss64.com/nt/msg.html
JSanchez,

2
FYI msg si chiude automaticamente dopo 60 secondi se non specificato /TIME:0. Questo è su Win10 x64 v1607 Enterprise LTSB. Mi chiedevo perché la mia sceneggiatura fosse andata a buon fine, ma non ho mai ricevuto messaggi quando ho inserito l'Utilità di pianificazione. Spina vergognosa: serverfault.com/a/931932/131761
gregg

6

Vedi anche https://www.howtogeek.com/136894/how-to-create-popup-reminders-with-no-additional-software/ . In caso di morte del link, riassumo qui:

  1. Apri l'Utilità di pianificazione di Windows (cerca "Utilità di pianificazione" nel menu Start)
  2. In Azioni, fai clic su "Crea attività"
  3. Nella scheda Generale, assicurati che l'opzione "Esegui solo quando l'utente è connesso" sia selezionata e che "Nascosto" NON sia selezionato
  4. Nella scheda Trigger, fai clic su "Nuovo" per impostare l'ora di attivazione del messaggio
  5. Nella scheda Azioni, fai clic su "Nuovo" e assicurati che l'azione selezionata in alto sia "Avvia un programma"
  6. In "Programma / script", digitare CMD
  7. In "Aggiungi argomenti", copia e incolla questo:

    / C TITLE [Il tuo titolo qui] & ECHO. & ECHO. & ECHO [Il tuo messaggio qui] & ECHO. & ECHO. & TIMEOUT [timeout]

  8. Sostituisci [Il tuo titolo qui] e [Il tuo messaggio qui] con il tuo testo preferito (non includere le parentesi)
  9. Sostituisci [timeout] con il numero di secondi che vuoi che il messaggio attenda prima del timeout o -1 se non vuoi che scada (in entrambi i casi, la pressione di un tasto mentre la finestra della console è attiva lo chiuderà)
  10. Fai clic su "OK"!

Questo genererà una finestra della console con il testo dato, che apparirà IN ALTO della finestra corrente, ma non ruberà automaticamente lo stato attivo (puoi continuare a interagire con la finestra corrente come al solito).

Questa è stata la migliore soluzione che ho trovato, spero che aiuti qualcuno!


Questa dovrebbe essere la risposta accettata molto semplice, grazie!
spartikus,

1

Utilizzare msgboxin vbs. come questo:

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"

Il codice &h51000si accerterà che msgbox sia centrale che in cima a tutte le altre finestre per tutto il tempo.

Se vuoi solo programmare un msgbox, puoi semplicemente usare l'utilità di pianificazione, c'è una funzione integrata per pianificare un messaggio. vedere la posizione di [avvia un programma] nell'utilità di pianificazione.


1

Display a Messageè deprecato e il msgcomando non ha funzionato per me in Windows 10 1703. Sto usando powershellper visualizzare la finestra di messaggio da un'attività pianificata, usare questo come argomento per definire l'azione:

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

È un brutto AF, ma funziona.


Potresti voler dire cosa succede quando usi la tua soluzione. L'errore può essere utile per altri utenti.
Stese,

Non capisco cosa manca alla mia risposta. Quando uso la powershellsoluzione appare una finestra di messaggio. Quando si utilizza la msgsoluzione non accade nulla, come dichiaro nel mio commento.
Isalgueiro,

Ho provato lo stesso con powershell -WindowStyle hidden -File "<path to script>" ma non funziona, funziona solo con -Commandargomento, quindi: powershell -WindowStyle hidden -Command "& '<path to script>'"
Mattia72
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.