Jak wyświetlić Msgbox bezpośrednio z CMD


16

Chciałbym wyświetlić wiadomość dla użytkownika za pomocą CMD. Wiem, że to robię, tworząc plik .vbs (VBScript) i uruchamiając go z CMD w następujący sposób:

(echo MsgBox "Line 1" ^& vbCrLf ^& "Line 2",262192, "Title")> File.vbs

start File.vbs

Ale chcę wyświetlić wiadomość bez tworzenia żadnego pliku, bezpośrednio z CMD. Może za pomocą polecenia do uruchamiania skryptów VBScript bezpośrednio z CMD.


Wyszukaj msgpolecenie. Możesz go nie mieć, jeśli używasz domowej wersji systemu Windows, ale możesz go dodać, po prostu kopiując i wklejając msg.exe z instalacji Pro.
wysiwyg

Zrobiłbym coś nieco bardziej „uniwersalnego”, dla wszystkich wersji systemu Windows 10, jeśli istnieje sposób.
Bita,

Zawsze jest też PowerShell. Często przeoczane, mimo że Microsoft wyraźnie rozpoczął przejście do eliminacji polecenia cmd.
Appleoddity,

Odpowiedzi:


9

Jak powiedzieli inni, nie da się tego zrobić wyłącznie za pomocą cmd, ale chociaż taki jest tytuł pytania, wydaje mi się, że część bez pliku jest dla ciebie ważniejsza i w pewnych okolicznościach może to być możliwe.

W PowerShell powinno być możliwe uruchamianie kodu bez pliku takiego jak ten:

PowerShell -Command "Add-Type -AssemblyName PresentationFramework;[System.Windows.MessageBox]::Show('Hello World')"

VBS nie pozwala na bezpośrednie wykonanie kodu przez cscript lub wscript, ale mshta tak. Możesz użyć tego w ten sposób (jeśli potrzebujesz wielu linii, użyj „:” jako separatora):

mshta vbscript:Execute("msgbox ""Hello World"":close")

Ponieważ jest to oparte, może podlegać pewnym ograniczeniom GPO, więc jeśli masz wybór, PowerShell jest prawdopodobnie bezpieczniejszym zakładem


Oprócz powyższego ostrzeżenia mshta, niektóre oprogramowanie antywirusowe uważa, że ​​jest to potencjalnie niepożądany proces. W pracy moja próba uruchomienia spowodowała nadgorliwy produkt dla przedsiębiorstw (SentinelOne), który poddał moją maszynę kwarantannie i usunął ją z sieci.
Jason

15

Jak sugeruje @wysiwyg, w wersjach Pro / Business * systemu Windows szukasz Msgpolecenia. Jest dostępny we wszystkich nowoczesnych wersjach systemu Windows (przynajmniej w wersji XP). Aby wyświetlić komunikat do aktualnie zalogowanego użytkownika, uruchom następujące polecenie:

msg %username% Your message here

Wynik wygląda następująco: wprowadź opis zdjęcia tutaj

Jedną z kwestii tego polecenia jest to, że nie można dostosować tekstu paska tytułu.

Możesz dowiedzieć się więcej o Msg w TechNet .


* Jeśli potrzebujesz rozwiązania, które działa we wszystkich wersjach systemu Windows, w tym Home , moim zdaniem metoda VBScript, o której już wiesz, jest najprostszym rozwiązaniem tego problemu. Działa na wszystkich nowoczesnych wersjach i edycjach systemu Windows w ich domyślnej konfiguracji i jest łatwy w użyciu.


1
Nie do końca prawda. Od momentu pojawienia się systemu Windows pojawiło się polecenie w oknie komunikatu dps. Uważam, że został usunięty w systemie Windows 7 lub 8, ponieważ był postrzegany jako możliwy exploit.
Keltari

2

Potrzebowałem dziś czegoś podobnego do tego. Ponieważ nie mogłem znaleźć zewnętrznego rozwiązania zależności, które mi się podobało, ponieważ tak naprawdę nie jestem fanem VBScript / Powershell, napisałem jedno:

https://github.com/cubiclesoft/messagebox-windows

Wyświetlane przez nią okna komunikatów są modalne do bieżącego okna konsoli. Oznacza to, że użytkownik nie może nic zrobić, dopóki nie zamknie okna dialogowego. Ponadto kod powrotu z MessageBox()połączenia jest zwracany do osoby dzwoniącej, aby skrypt mógł zareagować na naciśnięcie dowolnego przycisku. I, oczywiście, obsługuje pełny zakres opcji dla MessageBox()API Win32.

Dodanie pliku wykonywalnego o rozmiarze 80 KB może nie być filiżanką herbaty dla wszystkich. Jest jednak statycznie powiązany z środowiskiem wykonawczym VC ++ i obsługuje Unicode, co wyjaśnia, dlaczego plik jest tak duży, biorąc pod uwagę minimalistyczny charakter tego, co robi. Jest też drobny problem polegający na tym, że nie można łatwo przekazać nowych wierszy z wiersza polecenia, aby wyświetlić wiadomości wielowierszowe. Niewielką zaletą jest to, że wyświetla okno dialogowe w krótszym czasie na zegarze ściennym niż w przypadku innych prezentowanych dotychczas rozwiązań.

Oczywiście, jeśli rozmiar pliku nie ma znaczenia, a okna dialogowe tworzą zbyt proste wrażenia użytkownika i / lub nie wymagają interakcji użytkownika, wpadłem również na ten fajny projekt:

https://www.paralint.com/projects/notifu/

Który wyświetla dymek podręczny w obszarze powiadomień o stanie na ekranie przy użyciu IUserNotification . Minusem jest to, że plik wykonywalny Notifu działa po prostu o wartości 240 KB. Kolejny niefortunny przykład, że COM powoduje niepotrzebne wzdęcia i sprawia, że ​​życzę sobie, aby dla tej funkcji istniał prosty, lekki interfejs API.

Dla czegoś wieloplatformowego jest zenity. Dotyczy to głównie Linuksa, ale są też porty Mac i Windows. Port zenity systemu Windows ma rozmiar ponad 1 MB, ponieważ cóż, GTK jest dość rozdęty.


Nie dlatego, że musi wysyłać wszystkie GTK wewnętrznie, podczas gdy natywne wersje systemu Windows po prostu pobierają biblioteki DLL user32 / comctl, które już tam są?
user1686,

Co? Proszę wyjaśnić pytanie.
CubicleSoft,

1

Mam sposób to zrobić za pomocą cmd, ale zasadniczo zawiera on plik, ale plik jest usuwany natychmiast po wykonaniu vbs. Więc to nie jest tak naprawdę. Możesz to zrobić :

echo x=msgbox("Hey! Here is a message!",Type+Icon+Action,"Hey! Here is a title!") > %tmp%\tmp.vbs
cscript //nologo %tmp%\tmp.vbs
del %tmp%\tmp.vbs

Type + Icon + Action to tylko podstawowe vbs, w celach informacyjnych, tutaj. https://therevisionist.org/wp-content/uploads/2016/03/vbscript_msgbox_chart-e1458059002411.jpg?x47750 Kod, który pokazałem, tworzy plik zawierający kod VBS, następnie wykonuje go za pomocą cscript, a następnie usuwa plik po uruchomieniu, dzięki czemu wygląda na przywołany przez wiersz polecenia cmd. Aby wyglądało to bardziej tak, po prostu wyłącz @echo. Mam nadzieję, że to pomogło!


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.