Wyświetl okno komunikatu z Harmonogramu zadań na wszystkich innych oknach

12

Czy istnieje fajny sposób, aby okno komunikatu wyskakiwało w zaplanowanym czasie na innych oknach? Domyślnie akcja „Wyświetl wiadomość” bezużytecznie pojawia się poniżej wszystkiego innego.

Mech
źródło

Odpowiedzi:

12

A co powiesz na użycie wbudowanego msgpolecenia Windows ?

msg * "Message you would like to send"

Możesz dodać inne parametry, takie jak /TIME:xgdzie x to liczba sekund, przez którą ma być wyświetlany komunikat. Oczywiście msg /?pokaże Ci wszystkie dostępne opcje.

Oznacza to, że Windows XP i wyższy jest systemem, w którym chcesz wyświetlić komunikat. Jeśli masz wersję Home odpowiedniego systemu operacyjnego, nie masz szczęścia. Dostępne parametry można znaleźć na stronie http://ss64.com/nt/msg.html .

Jeśli masz wersję Home Edition, następujący skrypt wsadowy wyskakuje komunikat przy użyciu metody 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

Mam nadzieję że to pomoże!

Dodano: Gregg wspomina w komentarzach, że aby to działało w systemie Windows 10, musisz użyć „/ time: 0”, jeśli chcesz, aby wiadomość pozostała na ekranie dłużej niż 60 sekund.

JSanchez
źródło
O czym mówisz? Co to jest msg? Nic nie dostaję, jeśli spróbuję uruchomić go z pola Uruchom lub z wiersza polecenia.
Mech
W pytaniu nie określono, którą wersję systemu Windows posiadasz. Jeśli masz wersję Home, nie masz szczęścia. ss64.com/nt/msg.html
JSanchez
2
FYI msg zamyka się automatycznie po 60 sekundach, chyba że zostanie to określone /TIME:0. To jest na Win10 x64 v1607 Enterprise LTSB. Zastanawiałem się, dlaczego mój skrypt sprawdził się dobrze, ale nigdy nie dostałem wiadomości, gdy włączę Harmonogram zadań. Wstydliwa wtyczka: serverfault.com/a/931932/131761
gregg
6

Zobacz także https://www.howtogeek.com/136894/how-to-create-popup-reminders-with-no-additional-software/ . W przypadku śmierci linku, streszczę tutaj:

  1. Otwórz Harmonogram zadań systemu Windows (wyszukaj „Harmonogram zadań” w menu Start)
  2. W obszarze Działania kliknij opcję „Utwórz zadanie”
  3. Na karcie Ogólne upewnij się, że opcja „Uruchom tylko, gdy użytkownik jest zalogowany” jest zaznaczona, a opcja „Ukryty” NIE jest zaznaczona
  4. Na karcie Wyzwalacze kliknij opcję „Nowy”, aby ustawić czas uruchamiania wiadomości
  5. Na karcie Działania kliknij przycisk „Nowy” i upewnij się, że wybrana czynność u góry to „Uruchom program”
  6. W polu „Program / skrypt” wpisz CMD
  7. W „Dodaj argumenty” skopiuj i wklej to:

    / C TITLE [Twój tytuł tutaj] i ECHO. & ECHO. & ECHO [Twoja wiadomość tutaj] i ECHO. & ECHO. & TIMEOUT [limit czasu]

  8. Zamień [Twój tytuł tutaj] i [Twoja wiadomość tutaj] na preferowany tekst (nie dołączaj nawiasów)
  9. Zamień [limit czasu] na liczbę sekund, przez które wiadomość powinna czekać, zanim upłynie limit czasu, lub -1, jeśli nie chcesz, aby limit czasu (tak czy inaczej, naciśnięcie klawisza, gdy okno konsoli jest aktywne, spowoduje jego zamknięcie)
  10. Kliknij OK'!

Spowoduje to wygenerowanie okna konsoli z podanym tekstem, który pojawi się NA GÓRZE bieżącego okna, ale nie wykradnie automatycznie fokusa (możesz normalnie kontynuować interakcję z bieżącym oknem).

To było najlepsze rozwiązanie, jakie znalazłem, mam nadzieję, że to komuś pomoże!

Wanderspeak
źródło
To powinna być zaakceptowana odpowiedź bardzo zręczna, dziękuję!
spartikus
1

Użyj msgboxw VBS. lubię to:

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"

Kod &h51000sprawi, że msgbox będzie cały czas w centralnej i nad wszystkimi innymi oknami.

Jeśli chcesz tylko zaplanować msgbox, możesz po prostu użyć harmonogramu zadań, istnieje wbudowana funkcja do planowania wiadomości. zobacz lokalizację [uruchom program] w harmonogramie zadań.

Root Loop
źródło
1

Display a Messagejest przestarzałe, a msgpolecenie nie działało dla mnie w systemie Windows 10 1703. Używam powershelldo wyświetlania okna komunikatu z zaplanowanego zadania, użyj tego jako argumentu podczas definiowania akcji:

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

To brzydki AF, ale działa.

isalgueiro
źródło
Możesz określić, co dzieje się, gdy korzystasz z rozwiązania. Błąd może być pomocny dla innych użytkowników.
Stese,
Nie rozumiem, czego brakuje w mojej odpowiedzi. Kiedy korzystam z powershellrozwiązania, pojawia się okno komunikatu. Podczas korzystania z msgrozwiązania nic się nie dzieje, jak stwierdzam w moim komentarzu.
isalgueiro
Próbowałem tego samego z, powershell -WindowStyle hidden -File "<path to script>" ale to nie działa, działa tylko z -Commandargumentem, więc: powershell -WindowStyle hidden -Command "& '<path to script>'"
Mattia72