Exibir caixa de mensagem do Agendador de tarefas sobre todas as outras janelas

13

Existe uma boa maneira de fazer com que uma caixa de mensagem seja exibida em um horário programado em cima de outras janelas? A ação padrão "Exibir uma mensagem" aparece inutilmente abaixo de todo o resto.

Musgo
fonte

Respostas:

13

Que tal usar o msgcomando interno do Windows assim?

msg * "Message you would like to send"

Você pode adicionar outros parâmetros, como /TIME:xonde x é o número de segundos que você deseja que a mensagem seja exibida. Obviamente, msg /?mostrará todas as opções disponíveis.

Isso implica no Windows XP e superior como o sistema em que você deseja exibir a mensagem. Se você possui uma Home Edition do sistema operacional aplicável, está sem sorte. Consulte http://ss64.com/nt/msg.html para obter os parâmetros disponíveis.

Se você possui uma Home Edition, o seguinte script em lote exibirá uma mensagem usando o método PopUp do 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

Espero que isto ajude!

Adicionado: Gregg menciona nos comentários que, para que isso funcione no Windows 10, você deve usar "/ time: 0" se quiser que a mensagem permaneça na tela por mais de 60 segundos.

JSanchez
fonte
Do que você está falando? O que é msg? Não recebo nada se tentar executá-lo na caixa Executar ou no prompt de comando.
Moss
Você não especificou em sua pergunta qual versão do Windows você possui. Se você tem uma edição doméstica, está sem sorte. ss64.com/nt/msg.html
JSanchez 02/02
2
A mensagem FYI fecha automaticamente após 60 segundos, a menos que você especifique /TIME:0. Isso está no Win10 x64 v1607 Enterprise LTSB. Fiquei me perguntando por que meu script testou bem, mas nunca recebi uma mensagem quando coloco no Agendador de tarefas. Plug vergonhoso: serverfault.com/a/931932/131761
gregg
6

Consulte também https://www.howtogeek.com/136894/how-to-create-popup-reminders-with-no-additional-software/ . Em caso de morte do link, resumirei aqui:

  1. Abra o Agendador de tarefas do Windows (pesquise 'Agendador de tarefas' no menu Iniciar)
  2. Em Ações, clique em 'Criar Tarefa'
  3. Na guia Geral, verifique se 'Executar apenas quando o usuário está conectado' está marcado e 'Oculto' NÃO está marcado
  4. Na guia Acionadores, clique em 'Novo' para definir um horário para o acionamento da mensagem
  5. Na guia Ações, clique em 'Novo' e verifique se a ação selecionada na parte superior é 'Iniciar um programa'
  6. Em 'Programa / script', digite CMD
  7. Em 'Adicionar argumentos', copie e cole:

    / C TITLE [Seu título aqui] & ECHO. & ECHO. & ECHO [Sua mensagem aqui] & ECHO. & ECHO. & TIMEOUT [timeout]

  8. Substitua [Seu título aqui] e [Sua mensagem aqui] pelo seu texto preferido (não inclua os colchetes)
  9. Substitua [timeout] pelo número de segundos que você deseja que a mensagem espere antes de atingir o tempo limite ou -1 se você não quiser que ela atinja o tempo limite (de qualquer maneira, pressionar uma tecla enquanto a janela do console estiver em foco a fechará)
  10. Clique OK'!

Isso gerará uma janela do console com o texto fornecido, que aparecerá no topo da sua janela atual, mas não roubará o foco automaticamente (você pode continuar interagindo com a janela atual, como de costume).

Esta foi a melhor solução que encontrei, espero que ajude alguém!

Wanderspeak
fonte
Esta deve ser a resposta aceita muito esperta, obrigado!
Spartikus 28/0318
1

Use msgboxem vbs. como isso:

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"

O código &h51000garantirá que o msgbox esteja centralizado e em cima de todas as outras janelas o tempo todo.

Se você deseja agendar apenas uma msgbox, pode simplesmente usar o agendador de tarefas, há uma função integrada para agendar uma mensagem. veja a localização de [iniciar um programa] no agendador de tarefas.

Loop de raiz
fonte
1

Display a Messageestá obsoleta e o msgcomando não funcionou para mim no Windows 10 1703. Estou usando powershellpara exibir a caixa de mensagem de uma tarefa agendada, use isso como argumentos ao definir a ação:

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

É AF feio, mas funciona.

isalgueiro
fonte
Você pode indicar o que acontece quando você usa sua solução. O erro pode ser útil para outros usuários.
Stese 24/05
Eu não entendo o que está faltando na minha resposta. Quando uso a powershellsolução, uma caixa de mensagem é exibida. Ao usar a msgsolução, nada acontece, como afirmo no meu comentário.
Isalgueiro 24/05
Tentei o mesmo com powershell -WindowStyle hidden -File "<path to script>" , mas ele não funciona, ele funciona apenas com -Commandargumento, então: powershell -WindowStyle hidden -Command "& '<path to script>'"
Mattia72