20 ответов:
Я бы сделал очень простой файл VBScript и вызвал его с помощью CScript для анализа параметров командной строки.
что-то вроде следующего сохраненного в
MessageBox.vbs:Set objArgs = WScript.Arguments messageText = objArgs(0) MsgBox messageTextчто вы бы назвали так:
cscript MessageBox.vbs "This will be shown in a popup."
MsgBoxссылка если вы заинтересованы в этом маршруте.
прежде всего, DOS не имеет к этому никакого отношения, вы, вероятно, хотите решение командной строки Windows (опять же: нет DOS, чистые окна, просто не окно, а консоль).
вы можете либо использовать метод VBScript, предоставленный boflynn, либо вы можете неправильно использовать
net sendилиmsg.net sendработает только на старых версиях Windows:net send localhost Some message to displayэто также зависит от службы Messenger для запуска, хотя.
для более новых версий (XP и далее, видимо):
msg "%username%" Some message to displayследует отметить, что окно сообщения, отправленные с помощью
msg.exeбудет длиться только в течение 60 секунд. Однако это можно переопределить с помощью/time:xxпереключатель.
может отображаться небольшая вспышка, но не требуется временных файлов. Должен работать весь путь назад где-то в эпоху (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^(^); )
попробуй :
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затем вы создаете новый Блокнот документ, типа
<script type="text/vbscript"> MsgBox "your text here" </script>затем вы сохраните это как a .файл vbs (путем размещения ".vbs "в конце имени файла), сохранить как" все файлы " в выпадающем списке под именем файла (поэтому он не сохраняет как .txt), затем нажмите кнопку Сохранить!
таким образом, ваш пакетный файл создаст сценарий VBS и покажет всплывающее окно. После его запуска пакетный файл удалит этот промежуточный файл.
преимущество использования MSGBOX заключается в том, что он действительно настраиваемый (измените заголовок, значок и т. д.) Во время MSG.ехе не так много.
echo MSGBOX "YOUR MESSAGE" > %temp%\TEMPmessage.vbs call %temp%\TEMPmessage.vbs del %temp%\TEMPmessage.vbs /f /q
несколько способов.
1) самый выродок и hackiest - он использует IEXPRESS для создания небольшого exe, который создаст всплывающее окно с помощью одной кнопки (он может создавать еще два типа всплывающих сообщений). Работает на каждом windows от 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/jscripthybrid (должен быть сохранен какbat). Он снова использует JavaScript, несмотря на запрос OP, но поскольку это bat, его можно назвать файлом 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/.bathybrid (должен быть сохранен как.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, который создает всплывающее окно (может быть вызван из командной строки или из bat если установки 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
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
Msg * "вставьте свое сообщение здесь"
отлично работает, просто сохраните как a .bat файл в блокноте или убедитесь, что формат установлен на "все файлы"
вот вариант PowerShell, который не требует загрузки сборок перед созданием окна, однако он работает заметно медленнее (~+50%), чем команда PowerShell MessageBox, опубликованная здесь @npocmaka:
powershell (New-Object -ComObject Wscript.Shell).Popup("""Operation Completed""",0,"""Done""",0x0)вы можете изменить последний параметр " 0x0 " для отображения различных значков в диалоговом окне, например. 0x40 показывает "информационную метку". Смотрите Popup Метод для справки.
адаптировано из статьи Microsoft TechNet PowerTip: Использовать PowerShell для отображения всплывающего окна.
для этого вам нужно иметь небольшую программу, которая отображает messagebox и запустить его из вашего пакетного файла.
вы можете открыть окно консоли, которое отображает приглашение, но получает окно сообщения GUI с помощью cmd.exe и друзей лишь это не возможно, насколько мне известно.
Я использую утилиту с именем msgbox.exe отсюда: http://www.paulsadowski.com/WSH/cmdprogs.htm
msg * /time:0 /w Hello everybody!это сообщение ждет вечно, пока не будет нажата кнопка OK (по умолчанию она длится всего одну минуту) и отлично работает в Windows 8.1
вы можете вызвать функцию dll из user32.ДЛЛ я думаю Что-то вроде
программа rundll32.exe user32.проблемы, функции MessageBox (0, "текст", "titleText", {дополнительные флаги для как высшей функции MessageBox е.Т.с})
набрав его с моего телефона, не судите меня... в противном случае я бы связал дополнительные флаги.
следуя ответу @Fowl, вы можете улучшить его с таймаутом, чтобы он появлялся только в течение 10 секунд, используя следующее:
mshta "javascript:var sh=new ActiveXObject( 'WScript.Shell' ); sh.Popup( 'Message!', 10, 'Title!', 64 );close()"посмотреть здесь для более подробной информации.
этой приложение это можно сделать, если вы конвертируете (переносите) свои пакетные файлы в исполняемые файлы.
Простой Messagebox
%extd% /messagebox Title Text
Ошибка Messagebox
%extd% /messagebox Error "Error message" 16Отменить И Снова Попробовать Функции MessageBox
%extd% /messagebox Title "Try again or Cancel" 5
4) "Никогда не спрашивать " Сообщение
%extd% /messageboxcheck Title Message 0 {73E8105A-7AD2-4335-B694-94F837A38E79}
лучший вариант
set my_message=Hello world&& start cmd /c "@echo off & mode con cols=15 lines=2 & echo %my_message% & pause>nul"
описание:
lines=количество строк,плюс 1cols=количество символов в сообщении, плюс 3 (однако минимум должен быть15)авто-расчета
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"
он должен только всплывать, когда внутри виртуальной машины, так что технически, должен быть какой-то код, как:
if %machine_type% == virtual_machine then echo message box code else continue normal installation code
Comments