Подтвердить что ты не робот

Показать всплывающее окно/сообщение из командного файла Windows

Есть ли способ отображения окна сообщения из пакетного файла (аналогично тому, как xmessage может использоваться из bash -cripts в Linux)?

4b9b3361

Ответ 1

Я бы сделал очень простой файл VBScript и вызвал его с помощью CScript для анализа параметров командной строки.

Что-то вроде следующего в MessageBox.vbs:

Set objArgs = WScript.Arguments
messageText = objArgs(0)
MsgBox messageText

Которое вы бы назвали следующим:

cscript MessageBox.vbs "This will be shown in a popup."

MsgBox ссылка, если вы заинтересованы в этом маршруте.

Ответ 2

Прежде всего, DOS не имеет к этому никакого отношения, возможно, вам понадобится решение командной строки Windows (опять же: нет DOS, чистая Windows, просто не окно, а консоль).

Вы можете использовать метод VBScript, предоставленный boflynn, или вы можете неправильно использовать net send или msg. net send работает только в старых версиях окон:

net send localhost Some message to display

Это также зависит от службы Messenger для запуска.

Для более новых версий (XP и далее, по-видимому):

msg "%username%" Some message to display

Следует отметить, что поле сообщения, отправленное с помощью msg.exe, будет длиться только 60 секунд. Однако это можно переопределить с помощью переключателя /time:xx.

Ответ 3

Может показаться небольшая вспышка, но никаких временных файлов не требуется. Должен работать весь путь назад в какой-то момент (IIRC) IE5.

mshta javascript:alert("Message\n\nMultiple\nLines\ntoo!");close();

Не забудьте выйти из круглых скобок, если вы используете if:

if 1 == 1 (
   mshta javascript:alert^("1 is equal to 1, amazing."^);close^(^);
)

Ответ 4

Появится следующее окно командной строки:

START CMD /C "ECHO My Popup Message && PAUSE"

Ответ 5

Попробуйте:

Msg * "insert your message here" 

Если вы используете Windows XP command.com, это откроет окно сообщения.

Открытие нового cmd-окна не совсем то, о чем вы просили, я понимаю. Вы также можете использовать VBScript и использовать это с вашим .bat файлом. Вы можете открыть его из файла bat с помощью этой команды:

cd C:\"location of vbscript"

Что это значит, это изменить каталог, на котором command.com будет искать файлы, а затем на следующей строке:

"insert name of your vbscript here".vbs

Затем вы создаете новый документ Notepad, введите

<script type="text/vbscript">
    MsgBox "your text here"
</script>

Затем вы сохранили бы это как .vbs файл (поместив ".vbs" в конец имени файла), сохраните как "Все файлы" в раскрывающемся списке под именем файла (поэтому он не сохраняет как .txt), затем нажмите "Сохранить".

Ответ 6

Таким образом, ваш командный файл создаст VBS script и покажет всплывающее окно. После запуска командный файл удалит этот промежуточный файл.

Преимущество использования MSGBOX в том, что оно действительно настраивается (изменить название, значок и т.д.), в то время как MSG.exe не так много.

echo MSGBOX "YOUR MESSAGE" > %temp%\TEMPmessage.vbs
call %temp%\TEMPmessage.vbs
del %temp%\TEMPmessage.vbs /f /q

Ответ 7

Мало других способов.

1) Geekiest и hackiest - он использует IEXPRESS для создания небольшого exe, который создаст всплывающее окно с помощью одной кнопки (он может создавать еще два типа всплывающих сообщений). Работает над КАЖДЫМИ окнами от XP и выше:

;@echo off
;setlocal

;set ppopup_executable=popupe.exe
;set "message2=click OK to continue"
;
;del /q /f %tmp%\yes >nul 2>&1
;
;copy /y "%~f0" "%temp%\popup.sed" >nul 2>&1

;(echo(FinishMessage=%message2%)>>"%temp%\popup.sed";
;(echo(TargetName=%cd%\%ppopup_executable%)>>"%temp%\popup.sed";
;(echo(FriendlyName=%message1_title%)>>"%temp%\popup.sed"
;
;iexpress /n /q /m %temp%\popup.sed
;%ppopup_executable%
;rem del /q /f %ppopup_executable% >nul 2>&1

;pause

;endlocal
;exit /b 0


[Version]
Class=IEXPRESS
SEDVersion=3
[Options]
PackagePurpose=InstallApp
ShowInstallProgramWindow=1
HideExtractAnimation=1
UseLongFileName=0
InsideCompressed=0
CAB_FixedSize=0
CAB_ResvCodeSigning=0
RebootMode=N
InstallPrompt=%InstallPrompt%
DisplayLicense=%DisplayLicense%
FinishMessage=%FinishMessage%
TargetName=%TargetName%
FriendlyName=%FriendlyName%
AppLaunched=%AppLaunched%
PostInstallCmd=%PostInstallCmd%
AdminQuietInstCmd=%AdminQuietInstCmd%
UserQuietInstCmd=%UserQuietInstCmd%
SourceFiles=SourceFiles
[SourceFiles]
SourceFiles0=C:\Windows\System32\
[SourceFiles0]
%FILE0%=


[Strings]
AppLaunched=subst.exe
PostInstallCmd=<None>
AdminQuietInstCmd=
UserQuietInstCmd=
FILE0="subst.exe"
DisplayLicense=
InstallPrompt=

2) Использование MSHTA. Также работает на всех машинах Windows с XP и выше (несмотря на то, что OP не хочет "внешних" языков, JavaScript здесь минимизирован). Должен быть сохранен как .bat:

@if (true == false) @end /*!
@echo off
mshta "about:<script src='file://%~f0'></script><script>close()</script>" %*
goto :EOF */

alert("Hello, world!");

или в одной строке:

mshta "about:<script>alert('Hello, world!');close()</script>"

или же

mshta "javascript:alert('message');close()"

или же

mshta.exe vbscript:Execute("msgbox ""message"",0,""title"":close")

3) Здесь параметризованный гибрид .bat/jscript (должен быть сохранен как bat). Он снова использует JavaScript, несмотря на запрос OP, но поскольку он является летучей мышью, его можно назвать файлом bat без забот. Он использует POPUP, который позволяет немного больше контроля, чем более популярный MSGBOX. Он использует WSH, но не MSHTA, как в приведенном выше примере.

 @if (@x)==(@y) @end /***** jscript comment ******
     @echo off

     cscript //E:JScript //nologo "%~f0" "%~nx0" %*
     exit /b 0

 @if (@x)==(@y) @end ******  end comment *********/


var wshShell = WScript.CreateObject("WScript.Shell");
var args=WScript.Arguments;
var title=args.Item(0);

var timeout=-1;
var pressed_message="button pressed";
var timeout_message="timed out";
var message="";

function printHelp() {
    WScript.Echo(title + "[-title Title] [-timeout m] [-tom \"Time-out message\"] [-pbm \"Pressed button message\"]  [-message \"pop-up message\"]");
}

if (WScript.Arguments.Length==1){
    runPopup();
    WScript.Quit(0);
}

if (args.Item(1).toLowerCase() == "-help" || args.Item(1).toLowerCase() == "-h" ) {
    printHelp();
    WScript.Quit(0);
}

if (WScript.Arguments.Length % 2 == 0 ) {
    WScript.Echo("Illegal arguments ");
    printHelp();
    WScript.Quit(1);
}

for (var arg = 1 ; arg<args.Length;arg=arg+2) {

    if (args.Item(arg).toLowerCase() == "-title") {
        title = args.Item(arg+1);
    }

    if (args.Item(arg).toLowerCase() == "-timeout") {
        timeout = parseInt(args.Item(arg+1));
        if (isNaN(timeout)) {
            timeout=-1;
        }
    }

    if (args.Item(arg).toLowerCase() == "-tom") {
        timeout_message = args.Item(arg+1);
    }

    if (args.Item(arg).toLowerCase() == "-pbm") {
        pressed_message = args.Item(arg+1);
    }

    if (args.Item(arg).toLowerCase() == "-message") {
        message = args.Item(arg+1);
    }
}

function runPopup(){
    var btn = wshShell.Popup(message, timeout, title, 0x0 + 0x10);

    switch(btn) {
        // button pressed.
        case 1:
            WScript.Echo(pressed_message);
            break;

        // Timed out.
        case -1:
           WScript.Echo(timeout_message);
           break;
    }
}

runPopup();

4) и один гибрид jscript.net/.bat (должен быть сохранен как .bat). В этот раз он использует .NET и компилирует небольшой .exe файл, который можно удалить:

@if (@X)==(@Y) @end /****** silent jscript comment ******

@echo off
::::::::::::::::::::::::::::::::::::
:::       compile the script    ::::
::::::::::::::::::::::::::::::::::::
setlocal


::if exist "%~n0.exe" goto :skip_compilation

:: searching the latest installed .net framework
for /f "tokens=* delims=" %%v in ('dir /b /s /a:d /o:-n "%SystemRoot%\Microsoft.NET\Framework\v*"') do (
    if exist "%%v\jsc.exe" (
        rem :: the javascript.net compiler
        set "jsc=%%~dpsnfxv\jsc.exe"
        goto :break_loop
    )
)
echo jsc.exe not found && exit /b 0
:break_loop



call %jsc% /nologo /out:"%~n0.exe" "%~f0" 
::::::::::::::::::::::::::::::::::::
:::       end of compilation    ::::
::::::::::::::::::::::::::::::::::::
:skip_compilation

::
::::::::::
"%~n0.exe" %*
::::::::
::
endlocal
exit /b 0

****** end of jscript comment ******/

import System;
import System.Windows;
import System.Windows.Forms

var arguments:String[] = Environment.GetCommandLineArgs();
MessageBox.Show(arguments[1],arguments[0]);

5) и в конце один единственный вызов powershell, который создает всплывающее окно (может быть вызван из командной строки или из пакета, если установлена PowerShell):

powershell [Reflection.Assembly]::LoadWithPartialName("""System.Windows.Forms""");[Windows.Forms.MessageBox]::show("""Hello World""", """My PopUp Message Box""")

6) И подход дбэнам здесь

start "" cmd /c "echo(&echo(&echo              Hello world!     &echo(&pause>nul"

7) Для уведомлений в системном лотке вы можете попробовать следующее:

call SystemTrayNotification.bat  -tooltip warning -time 3000 -title "Woow" -text "Boom" -icon question

Ответ 8

echo X=MsgBox("Message Description",0+16,"Title") >msg.vbs

- вы можете записывать любые цифры из 0,1,2,3,4 вместо 0 (перед символом "+" ), и вот значение каждого числа:

0 = Ok Button  
1 = Ok/Cancel Button  
2 = Abort/Retry/Ignore button  
3 = Yes/No/Cancel  
4 = Yes/No  

- вы можете записывать любые числа из 16, 32, 48, 64 вместо 16 (после символа "+" ), а вот значение каждого числа:

16 – Critical Icon  
32 – Warning Icon  
48 – Warning Message Icon   
64 – Information Icon  

Ответ 9

Вот вариант PowerShell, который не требует загрузки сборок перед созданием окна, однако он работает заметно медленнее (~ +50%), чем команда PowerShell MessageBox, размещенная здесь @npocmaka:

powershell (New-Object -ComObject Wscript.Shell).Popup("""Operation Completed""",0,"""Done""",0x0)

Вы можете изменить последний параметр с "0x0" на значение ниже для отображения значков в диалоговом окне (см. " Метод всплывающих окон" для дальнейшего использования):

Stop 0x10 Стоп
Question Mark 0x20 Вопросительный знак
Exclamation Mark 0x30 восклицательный знак
Information Mark 0x40 информационная марка

Адаптировано из статьи Microsoft TechNet PowerTip: используйте PowerShell для отображения всплывающего окна.

Ответ 10

Msg * "введите ваше сообщение здесь

отлично работает, просто сохраните файл .bat в блокноте или убедитесь, что формат установлен на "все файлы"

Ответ 11

Для этого вам нужно иметь небольшую программу, которая отображает сообщение и запускает его из вашего пакетного файла.

Вы можете открыть консольное окно, которое отображает подсказку, но получение сообщения с графическим интерфейсом с использованием cmd.exe и друзей невозможно, AFAIK.

Ответ 13

Вы можете использовать Zenity. Zenity позволяет выполнять диалоговые окна в сценариях командной строки и оболочки. Более подробную информацию можно найти на Wikipedia.

Это кросс-платформенный: установщик Windows для Windows можно найти здесь.

Ответ 14

msg * /time:0 /w Hello everybody!

Это сообщение ожидает навсегда до тех пор, пока не будет нажата кнопка ОК (она по умолчанию остается только одна минута) и отлично работает в Windows 8.1

Ответ 15

Вы можете вызвать функцию dll из user32.dll, я думаю Что-то вроде

Rundll32.exe user32.dll, MessageBox (0, "текст", "titleText", {дополнительные флаги для самого верхнего окна сообщений e.t.c})

Вводя его с моего телефона, не судите меня... иначе я бы связал лишние флаги.

Ответ 16

Следуя ответу @Fowl, вы можете улучшить его с тайм-аутом, чтобы появляться только в течение 10 секунд, используя следующее:

mshta "javascript:var sh=new ActiveXObject( 'WScript.Shell' ); sh.Popup( 'Message!', 10, 'Title!', 64 );close()"

Подробнее см. здесь.

Ответ 17

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

Ответ 18

Это приложение может сделать это, если вы конвертируете (обертываете) свои командные файлы в исполняемые файлы.


  • Простой Messagebox

    %extd% /messagebox Title Text
    

  1. Сообщение об ошибке

    %extd% /messagebox  Error "Error message" 16
    
  2. Отменить попытку снова Messagebox

    %extd% /messagebox Title "Try again or Cancel" 5
    

4) "Никогда не спрашивайте меня снова" Messagebox

%extd% /messageboxcheck Title Message 0 {73E8105A-7AD2-4335-B694-94F837A38E79}

Ответ 19

Лучший вариант

set my_message=Hello world && start cmd/c "@echo off & mode con cols=15 lines=2 & echo %my_message% & pause>nul"


Описание:
lines= количество строк, плюс 1
cols= количество символов в сообщении, плюс 3 (однако минимум должен быть равен 15)

Auto- cols версия:

set my_message=Hello world && (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"

Ответ 20

ему нужно ТОЛЬКО для всплывания, когда внутри vm, так технически, должен быть какой-то код вроде:

if %machine_type% == virtual_machine then
   echo message box code
else
   continue normal installation code