показать всплывающее окно / окно сообщения из пакетного файла windows

<p>есть ли способ отобразить окно сообщения из командного файла (аналогично тому, как <code>xmessage</code> можно использовать из bash-скриптов в linux)?</p>

<p>я хотел бы сделать очень простой файл vbscript и вызвать его, используя cscript для анализа параметров командной строки.</p><p>что-то вроде следующего сохранено в <code>messagebox.vbs</code>:</p><pre><code>set objargs = wscript.arguments messagetext = objargs(0) msgbox messagetext </code></pre><p>который вы бы назвали, как:</p><pre><code>cscript messagebox.vbs "this will be shown in a popup." </code></pre><p> <a href="http://msdn.microsoft.com/en-us/library/sfw6660x%28v=vs.84%29.aspx"><code>msgbox</code> reference</a> если вы заинтересованы в этом.</p>

<p>прежде всего, dos не имеет к этому никакого отношения, вам, вероятно, нужно решение для командной строки windows (опять-таки: нет dos, чисто windows, просто не windows, а консоль).</p><p>вы можете использовать метод vbscript, предоставленный boflynn, или вы можете неправильно использовать <code>net send</code> или <code>msg</code>. <code>net send</code> работает только на старых версиях windows:</p><pre><code>net send localhost some message to display </code></pre><p>это также зависит от службы messenger для запуска, хотя.</p><p>для более новых версий (xp и далее, по-видимому):</p><pre><code>msg "%username%" some message to display </code></pre><p>следует отметить, что окно сообщения, отправленное с использованием <code>msg.exe</code>, будет длиться только 60 секунд. однако это можно переопределить с помощью переключателя <code>/time:xx</code>.</p>

<p>это вызовет другое окно командной строки:</p><pre><code>start cmd /c "echo my popup message && pause" </code></pre>

<p>пытаться :</p><pre><code>msg * "insert your message here" </code></pre><p>если вы используете command.com в windows xp, откроется окно сообщения.</p><p>я понимаю, что открытие нового окна cmd не совсем то, о чем вы просили. вы также можете использовать <a href="http://en.wikipedia.org/wiki/vbscript">vbscript</a> и использовать это с вашим .bat файлом. вы бы открыли его из файла bat с помощью этой команды:</p><pre><code>cd c:\"location of vbscript" </code></pre><p>для этого нужно изменить каталог, в котором command.com будет искать файлы, затем в следующей строке:</p><pre><code>"insert name of your vbscript here".vbs </code></pre><p>затем вы создаете новый документ <a href="http://en.wikipedia.org/wiki/notepad\_%28windows%29">блокнот</a> , введите</p><pre><code><script type="text/vbscript"> msgbox "your text here" </script> </code></pre><p>затем вы должны сохранить его как файл .vbs (поместив ".vbs" в конце имени файла), сохранить как "все файлы" в раскрывающемся списке под именем файла (чтобы он не сохранялся как .txt ), затем нажмите сохранить!</p>

<p>таким образом, ваш командный файл создаст сценарий vbs и покажет всплывающее окно. после запуска пакетный файл удалит этот промежуточный файл.</p><p>преимущество использования msgbox заключается в том, что он действительно настраиваемый (измените заголовок, значок и т.д.), тогда как msg.exe не так уж и много.</p><pre><code>echo msgbox "your message" > %temp%\tempmessage.vbs call %temp%\tempmessage.vbs del %temp%\tempmessage.vbs /f /q </code></pre>

<pre><code>echo x=msgbox("message description",0+16,"title") >msg.vbs </code></pre><p>–вы можете написать любые числа от 0,1,2,3,4 вместо 0 (перед символом "+"), и вот значение каждого числа:</p><pre><code>0 = ok button 1 = ok/cancel button 2 = abort/retry/ignore button 3 = yes/no/cancel 4 = yes/no </code></pre><p>–вы можете написать любые числа от 16,32,48,64 вместо 16 (после символа "+"), и вот значение каждого числа:</p><pre><code>16 – critical icon 32 – warning icon 48 – warning message icon 64 – information icon </code></pre>

<p>вот вариант powershell, который не требует загрузки сборок перед созданием окна, однако он работает заметно медленнее (~ + 50%), чем команда powershell messagebox, размещенная здесь @npocmaka:</p><pre><code>powershell (new-object -comobject wscript.shell).popup("""operation completed""",0,"""done""",0x0) </code></pre><p>вы можете изменить последний параметр с "0x0" на значение ниже, чтобы отображать значки в диалоговом окне (см. <a href="https://msdn.microsoft.com/en-us/library/x83z1d9f(v=vs.84).aspx">метод всплывающего окна</a> для дальнейшего использования):</p><p> <a href="https://i.stack.imgur.com/nwmdu.png"><img src="https://i.stack.imgur.com/nwmdu.png" alt="stop"></a> 0x10 стоп<br> <a href="https://i.stack.imgur.com/mziel.png"><img src="https://i.stack.imgur.com/mziel.png" alt="question mark"></a> 0x20 вопросительный знак<br> <a href="https://i.stack.imgur.com/vnnz5.png"><img src="https://i.stack.imgur.com/vnnz5.png" alt="exclamation mark"></a> 0x30 восклицательный знак<br> <a href="https://i.stack.imgur.com/cw5yc.png"><img src="https://i.stack.imgur.com/cw5yc.png" alt="information mark"></a> 0x40 информационная марка<br></p><p>адаптировано из статьи microsoft technet <a href="https://blogs.technet.microsoft.com/heyscriptingguy/2014/04/04/powertip-use-powershell-to-display-pop-up-window/">powertip: используйте powershell для отображения всплывающего окна</a> .</p>

<p>msg * "вставьте ваше сообщение сюда"</p><p>работает нормально, просто сохраните как .bat файл в блокноте или убедитесь, что установлен формат "все файлы"</p>

<p>для этого вам нужна небольшая программа, которая отображает окно сообщения и запускает его из вашего пакетного файла.</p><p>вы можете открыть консольное окно, в котором отображается приглашение, но получить окно сообщения с графическим интерфейсом, используя cmd.exe и только друзей, невозможно, afaik.</p>

<pre><code>msg * /time:0 /w hello everybody! </code></pre><p>это сообщение ждет вечно, пока не будет нажата кнопка ок (по умолчанию оно длится всего одну минуту) и отлично работает в windows 8.1</p>

<p>вы можете использовать <a href="https://live.gnome.org/zenity">zenity</a> . zenity позволяет выполнять диалоговые окна в командной строке и сценариях оболочки. дополнительную информацию также можно найти на <a href="http://en.wikipedia.org/wiki/zenity">википедия</a> .</p><p>он кроссплатформенный: можно найти установщик windows для windows <a href="http://www.placella.com/software/zenity/">здесь</a> .</p>

<p>я использую утилиту с именем msgbox.exe отсюда: <a href="http://www.paulsadowski.com/wsh/cmdprogs.htm">http://www.paulsadowski.com/wsh/cmdprogs.htm</a> </p>

<p>вы можете вызвать функцию dll из user32.dll я думаю, что-то вроде</p><blockquote> <p>rundll32.exe user32.dll, messagebox (0, "текст", "titletext", {дополнительные флаги для самого верхнего окна сообщения e.t.c})</p> </blockquote><p>печатая это с моего телефона, не судите меня ... в противном случае я бы связал дополнительные флаги.</p>

<p>это <a href="http://www.f2ko.de/en/b2e.php">приложение</a> может сделать это, если вы преобразуете (упаковываете) свои командные файлы в исполняемые файлы.<br></p><hr><ol> <li> <p><strong> простое окно сообщений </strong></p> <pre><code>%extd% /messagebox title text </code></pre></li> </ol><hr><ol start="2"> <li> <p><strong> сообщение об ошибке </strong></p> <pre><code>%extd% /messagebox error "error message" 16 </code></pre></li> <li> <p><strong> отменить попытку сообщения снова </strong></p> <pre><code>%extd% /messagebox title "try again or cancel" 5 </code></pre></li> </ol><hr><p><strong> 4) окно сообщений "никогда больше не спрашивай" </strong></p><pre><code>%extd% /messageboxcheck title message 0 {73e8105a-7ad2-4335-b694-94f837a38e79} </code></pre>

<p>msg * /server:127.0.0.1 введите ваше сообщение здесь</p>

<p><strong>лучший вариант</strong></p><p><strong><code>set my\_message=hello world</code></strong> <code>&& start cmd /c "@echo off & mode con cols=15 lines=2 & echo %my\_message% & pause>nul"</code></p><hr><p>описание:<br> <code>lines=</code> количество строк плюс 1<br> <code>cols=</code> количество символов в сообщении, плюс 3 (однако минимум должен быть <code>15</code>)</p><h1>автоматически рассчитанная <code>cols</code> версия:</h1><p><strong><code>set my\_message=hello world</code></strong> <code>&& (echo %my\_message%>empty\_file123 && for %? in (empty\_file123 ) do set strlength=%~z? && del empty\_file123 ) && start cmd /c "@echo off && mode con lines=2 cols=%strlength% && echo %my\_message% && pause>nul"</code></p>