Як відобразити Msgbox безпосередньо з CMD


10

Я хотів би відобразити повідомлення користувачеві за допомогою CMD. Я знаю, як це зробити, створивши файл .vbs (VBScript) і виконати його з CMD так:

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

start File.vbs

Але те, що я хочу зробити, це відобразити повідомлення, не створюючи жодного файлу, безпосередньо з CMD. Можливо, за допомогою команди для запуску VBScripts прямо з CMD.


Знайдіть msgкоманду. Можливо, у вас його немає, якщо ви працюєте з домашньою версією Windows, але ви можете додати її, просто скопіювавши та вставивши msg.exe з інсталяції Pro.
wysiwyg

Я хотів би щось трохи «універсальніше», для всіх версій Windows 10, якщо є спосіб.
Біта

Завжди теж є патрон. Запропонований поза увагою, навіть незважаючи на те, що Microsoft чітко почала перехід до усунення cmd-підказок.
Appleoddity

Відповіді:


11

Як запропонував @wysiwyg, у версіях Pro / Business * Windows ви шукаєте Msgкоманду. Він доступний у всіх сучасних версіях Windows (принаймні, як у XP). Щоб відобразити повідомлення поточно зареєстрованому користувачеві, виконайте наступне:

msg %username% Your message here

Результат виглядає приблизно так: введіть тут опис зображення

Одне врахування цієї команди полягає в тому, що ви не можете налаштувати текст заголовка.

Ви можете дізнатися більше про Msg на TechNet .


* Якщо вам потрібне рішення, яке працює у всіх версіях Windows, включаючи Home , на мою думку, метод VBScript, про який ви вже знаєте, є найпростішим рішенням цієї проблеми. Він працює у всіх сучасних версіях та випусках Windows у їх конфігурації за замовчуванням та простий у використанні.


Не зовсім правда. З моменту появи Windows з'явилася команда вікна з повідомленнями в dps. Я вважаю, що це було видалено в Windows 7 або 8, оскільки його розглядали як можливий подвиг.
Келтарі

4

Як говорили інші, немає можливості зробити це виключно за допомогою cmd, але, хоча це заголовок питання, мені здається, що частина без файлу для вас важливіша, і за певних обставин це можливо.

За допомогою повороту повинен бути можливість запустити код без будь-якого файлу на зразок цього:

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

VBS не дозволяє безпосередньо виконувати код через cscript або wscript, але mshta робить. Ви можете використовувати його так (якщо вам потрібно кілька рядків, використовуйте ':' як роздільник):

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

Оскільки це, тобто, на підставі, це може вплинути на деякі обмеження gpo, тому, якщо у вас є вибір повноважень, можливо, це більш безпечна ставка


2

Мені було потрібно щось подібне сьогодні. Оскільки я не зміг знайти рішення зовнішньої залежності, яке мені сподобалось, оскільки я насправді не фанат VBScript / Powershell, я пішов вперед і написав таке:

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

Поле повідомлень, яке воно створює, є модальним до поточного вікна консолі. Тобто користувач нічого не може зробити, поки не закриє діалогове вікно. Також код повернення з MessageBox()виклику повертається абоненту, щоб сценарій міг реагувати на ту кнопку, яку було натиснуто. І, звичайно, він підтримує повний спектр варіантів MessageBox()API Win32.

Додавання виконуваної суміші в 80 Кб може бути не всім чашкою чаю. Він статично пов’язаний із програмою VC ++, хоча він підтримує Unicode, що пояснює, чому файл настільки великий, враховуючи мінімалістичний характер того, що він робить. І є незначна проблема того, що неможливо легко перейти в нові рядки з командного рядка для відображення багаторядкових повідомлень. На незначній стороні вгору він відображає діалог за менший час настінного годинника, ніж будь-яке інше рішення, представлене до цього часу.

Звичайно, якщо розмір файлу не має значення і діалоги створюють занадто "в обличчя" користувальницьку роботу та / або не потребують взаємодії з користувачем, я також наткнувся на цей чудовий проект:

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

Який відображає спливаючу кулю в області сповіщення про стан екрану за допомогою IUserNotification . Недоліком є ​​те, що виконуваний файл Notifu працює просто сором'язливо в 240 КБ. Ще один прикрий приклад того, що COM створює непотрібний наліт і залишає мене бажаючи, щоб для цієї функції був простий, легкий API.

Щось крос-платформне, є зен. Це здебільшого для Linux, але є й порти для Mac та Windows. Порт Windows зенності розміром понад 1 Мб, тому що, ну, GTK досить роздутий.


Чи не тому, що він повинен перевозити всі gtk внутрішньо, тоді як рідні версії Windows просто підбирають DLL-файли user32 / comctl, які вже є?
grawity

Так? Проясніть, будь ласка, питання.
CubicleSoft

0

У мене є спосіб зробити це з cmd, але він, в основному, включає файл, але файл видаляється миттєво після виконання vbs. Тож насправді це не так. Ви можете зробити :

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

Тип + Значок + Дія - це лише основні vbs, для довідки, тут. https://therevisionist.org/wp-content/uploads/2016/03/vbscript_msgbox_chart-e1458059002411.jpg?x47750 Код, який я вам показав, створює файл із кодом VBS, потім він виконує його за допомогою cscript, потім видаляє файл після його виконання, роблячи його схожим на те, що його викликав cmd. Щоб зробити це більше подібним, просто використовуйте @echo off. Сподіваюся, це допомогло!


0

крім того, із зовнішнім виконуваним (не віконним) виконанням

nircmd infobox "msg" "title"

Якщо у вас є доступ до компілятора vb6, то цей "1 вкладиш" створює виконуваний файл 5,5 к:

sub main
  msgbox command
end sub
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.