8

Есть ли хороший способ заставить окно сообщения всплывать в назначенное время поверх других окон? Действие по умолчанию "Показать сообщение" бесполезно отображается ниже всего остального.

4 ответа4

8

Как насчет использования встроенной в Windows команды msg ?

msg * "Message you would like to send"

Вы можете добавить другие параметры, такие как /TIME:x где x - это количество секунд, в течение которого сообщение должно отображаться. Конечно, msg /? покажет вам все доступные варианты.

Это подразумевает Windows XP и выше как систему, в которой вы хотите отобразить сообщение. Если у вас есть Home Edition соответствующей ОС, вам не повезло. См. Http://ss64.com/nt/msg.html для доступных параметров.

Если у вас есть Home Edition, следующий пакетный скрипт выведет сообщение, используя метод PopUp 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

Надеюсь это поможет!

Добавлено: Грегг упоминает в комментариях, что для того, чтобы это работало в Windows 10, вы должны использовать «/time: 0», если вы хотите, чтобы сообщение оставалось на экране дольше 60 секунд.

4

Также см. Https://www.howtogeek.com/136894/how-to-create-popup-reminders-with-no-additional-software/. В случае смерти ссылки я подведу итог здесь:

  1. Откройте планировщик заданий Windows (найдите «Планировщик заданий» в меню «Пуск»)
  2. В разделе «Действия» нажмите «Создать задачу».
  3. На вкладке Общие убедитесь, что установлен флажок «Запускать только когда пользователь вошел в систему», а «Скрытый» НЕ установлен
  4. На вкладке «Триггеры» нажмите «Создать», чтобы установить время для запуска сообщения.
  5. На вкладке «Действия» нажмите «Создать» и убедитесь, что выбранным действием вверху является «Запустить программу».
  6. В «Программа / скрипт» введите CMD
  7. В «Добавить аргументы» скопируйте и вставьте это:

    / C TITLE [Ваше название здесь] и ECHO. & ECHO. & ECHO [Ваше сообщение здесь] и ECHO. & ECHO. & TIMEOUT [тайм-аут]

  8. Замените [Ваш заголовок здесь] и [Ваше сообщение здесь] предпочитаемым текстом (не включайте скобки)
  9. Замените [timeout] числом секунд, которое вы хотите, чтобы сообщение ожидало до истечения времени ожидания, или -1, если вы не хотите, чтобы оно истекло (в любом случае, нажатие клавиши, когда окно консоли находится в фокусе, закроет его)
  10. Нажмите «ОК»!

Это создаст консольное окно с заданным текстом, которое будет отображаться в верхней части вашего текущего окна, но не будет автоматически захватывать фокус (вы можете продолжать взаимодействовать с текущим окном, как обычно).

Это было лучшее решение, которое я нашел, надеюсь, оно кому-нибудь поможет!

1

Используйте msgbox в VBS . как это:

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 будет постоянно проверять наличие сообщения в центральной и верхней части всех остальных окон.

Если вы хотите только запланировать msgbox, вы можете просто использовать планировщик задач, есть встроенная функция для планирования сообщения. см. расположение [запустить программу] в планировщике задач.

1

Display a Message устарело, и команда msg не работала для меня в Windows 10 1703. Я использую powershell для отображения окна сообщения от запланированной задачи, используйте это в качестве аргументов при определении действия:

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

Это некрасиво, но это работает.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .