12
3
Is there a nice way to get a message box to pop up at a scheduled time on top of other windows? The default "Display a Message" action uselessly appears below everything else.
12
3
Is there a nice way to get a message box to pop up at a scheduled time on top of other windows? The default "Display a Message" action uselessly appears below everything else.
12
How about using Window's built-in msg
command like so?
msg * "Message you would like to send"
You can add other parameters such as /TIME:x
where x is the number of seconds you want the message to display. Of course, msg /?
will show you all the options available.
This implies Windows XP and higher as the system where you want to display the message. If you have a Home Edition of the applicable OS, you're out of luck. See http://ss64.com/nt/msg.html for available parameters.
If you have a Home Edition, the following batch script will pop-up a message using VBSCript's PopUp method:
@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
Hope this helps!
Added: Gregg mentions in the comments that in order for this to work in Windows 10, you must use "/time:0" if you want the message to stay on-screen longer than 60 seconds.
6
Also see https://www.howtogeek.com/136894/how-to-create-popup-reminders-with-no-additional-software/. In case of link death, I'll summarize here:
/C TITLE [Your title here] &ECHO.&ECHO.&ECHO [Your message here] &ECHO.&ECHO.&TIMEOUT [timeout]
This will generate a console window with the given text, which will appear ON TOP of your current window, but won't automatically steal the focus (you can keep interacting with your current window as usual).
This was the best solution I found, hope it helps someone!
This should be the accepted answer very slick, thank you! – spartikus – 2018-03-28T16:08:19.803
1
Display a Message
is deprecated, and msg
command didn't work for me in Windows 10 1703. I'm using powershell
to display the message box from a scheduled task, use this as arguments when defining the action:
-WindowStyle hidden -Command "& {[System.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms'); [System.Windows.Forms.MessageBox]::Show('<message body here>','<window title here>')}"
It's ugly AF, but it works.
You might want to state what happens when you use your solution. The error may be helpful to other users. – Stese – 2017-05-24T14:23:42.267
I don't get what is missing from my response. When I use the powershell
solution a message box appears. When using the msg
solution nothing happens, as I state in my comment. – isalgueiro – 2017-05-24T14:40:09.733
I tried the same with
`powershell -WindowStyle hidden -File "<path to script>"`
but it doesn't work, it works only with -Command
argument, so:
`powershell -WindowStyle hidden -Command "& '<path to script>'"`
– Mattia72 – 2017-11-03T06:29:22.870
1
Use msgbox
in vbs. like this:
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"
Code &h51000
will make sure msgbox in central and on top of all other windows all the time.
If you only want to schedule a msgbox, you can simply use task scheduler, there is a built in function to schedule a message. see location of [start a program] in task scheduler.
2
FYI msg automatically closes after 60sec unless you specify
– gregg – 2018-09-20T19:55:02.470/TIME:0
. This is on Win10 x64 v1607 Enterprise LTSB. I was wondering why my script tested fine, but I never got message when I put in Task Scheduler. Shameful plug: https://serverfault.com/a/931932/131761What are you talking about? What is
msg
? I get nothing if I try to run it from the Run box or from the command prompt. – Moss – 2014-02-02T02:16:42.107You didn't specify in your question which version of Windows you have. If you have a Home edition, you're out of luck. http://ss64.com/nt/msg.html
– JSanchez – 2014-02-02T06:11:44.223