Форум программистов, компьютерный форум, киберфорум
Наши страницы
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.76/21: Рейтинг темы: голосов - 21, средняя оценка - 4.76
@Root
⁞ ★☭ Mad Max ☭★ ⁞
201 / 84 / 12
Регистрация: 04.09.2013
Сообщений: 187
1

Модальное окно MsgBox в cmd

19.01.2016, 13:32. Просмотров 3937. Ответов 7
Метки нет (Все метки)

Доброго дня!
Подскажите, как реализовать модальное окно MsgBox.
Немодальное - понятно:
Windows Batch file
1
2
3
4
5
for /f "usebackq" %%f in (
    `mshta "javascript:new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).Write(new ActiveXObject('WScript.Shell').PopUp('%Prompt%',0,'%Title%',%ButtonConst%));close();"`
) do (
...
)
Проблема в том, что у метода .PopUp нет соответствующей константы, отвечающей за модальность.

Модальное окно MsgBox можно аналогично реализовать через VBScript, но не смог.

Есть хорошее решение Эмуляция функций VBScript посредством объекта MSScriptControl.ScriptControl на примере функций MsgBox/InputBox, но на 64 битных системах оно не работает.

Подскажите как, заранее благодарен.
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.01.2016, 13:32
Ответы с готовыми решениями:

Красивое окно cmd
Есть ли возможность сделать более красивым окно ? Команда ? Утилиты ? и тп ? Знаю только Color

Постоянно появляется окно cmd.exe
У меня постоянно вылезает окно cmd.exe, что приводит к сворачиванию игр или программ. КАК его...

Как написать cmd создающий другой cmd
Добрый день. Смысл в том, чтобы создать CMD с настройками текущего ПК: имя компьютера и имя...

Нужно закрыть модальное окно и сделать активным вызвавшее его окно
Мне нада средствами Win API закрыть модальное окно и сделать активным вызвавшее его окно. Кто знает...

Создать модальное окно (дочернее окно) как в одноклассниках
Здраствуйте всем, Нужна помощь. Я хочу создать модальное окно (дочерное окно) в ASP.NET на примере...

7
Garry Galler
2460 / 1854 / 694
Регистрация: 28.10.2013
Сообщений: 4,785
19.01.2016, 14:23 2
Лучший ответ Сообщение было отмечено @Root как решение

Решение

@Root,
На vbs гуглится такой вариант (на 64-битной вполне себе работает):
Windows Batch file
1
2
3
4
5
6
7
8
@echo off &chcp 1251 >nul
echo WScript.Quit(MsgBox(WScript.Arguments(1) ^& Chr(13) ^& WScript.Arguments(2) ^& Chr(13) ^& WScript.Arguments(3), vbSystemModal+vbYesNo+vbDefaultButton2,WScript.Arguments(0)))>"%temp%\MsgBox.vbs"
WScript "%temp%\MsgBox.vbs" "Внимание!" "Для успешной работы скрипта необходимо закрыть Word" "Вторая строка" "Третья строка"
If %ERRORLEVEL% equ 6 (chcp 866 >nul &echo  Word закрыт.) else (
chcp 866 >nul &echo  Word не закрыт.)
del /q "%temp%\MsgBox.vbs"
 
pause>nul
Но никакой истинной модальности (блокирования) он не дает. Максимум, что дает в данном случае флаг vbSystemModal - это указывает окну диалога быть поверх консоли и не уходить вниз по Z-оси при смене фокуса. (Можно еще через vbMsgBoxSetForeground указать ему быть поверх всех окон... ну кроме тех, кто сам хочет быть в TOPMOST).
Истинно модальным окно делается в программах через указание дескриптора родителя.
1
@Root
⁞ ★☭ Mad Max ☭★ ⁞
201 / 84 / 12
Регистрация: 04.09.2013
Сообщений: 187
19.01.2016, 15:05  [ТС] 3
Garry Galler,
ммм, забыл написать, что вариант с временным файлом не годится. Надо без него. Дело в том, что такой вот экзерсис работает, но как взять у него код возврата (засунуть в цикл for), не знаю:
Windows Batch file
1
mshta vbscript:Execute("x=MsgBox(""%Prompt%"",%ButtonConst%+4096,""%Title%""):Close()")
есть у Роба ван Дер Вуда (Rob Vander Woude)
внешняя MsgBox, но там нет такой константы.
0
Вложения
Тип файла: txt MessageBox.cs.txt (7.4 Кб, 12 просмотров)
alpap
2789 / 1590 / 536
Регистрация: 26.04.2015
Сообщений: 5,352
19.01.2016, 15:36 4
Лучший ответ Сообщение было отмечено @Root как решение

Решение

@Root, Примерно так:
Windows Batch file
1
2
3
@echo on
for /f "delims=" %%i in ('mshta vbscript:Execute^("x=MsgBox(""%Prompt%"",%ButtonConst%+4096,""%Title%""):Close()"^)') do echo.%%~i
pause>nul
.
1
19.01.2016, 15:36
@Root
⁞ ★☭ Mad Max ☭★ ⁞
201 / 84 / 12
Регистрация: 04.09.2013
Сообщений: 187
19.01.2016, 16:01  [ТС] 5
alpap,
на ^ я и споткнулся. Спасибо, работает.

И еще вопрос - как передать MsgBox в данном случае многострочный текст?
0
alpap
2789 / 1590 / 536
Регистрация: 26.04.2015
Сообщений: 5,352
19.01.2016, 17:09 6
Во многих подобных утилитах
Код
несколько^
строк^
записываются^
так
не знаю как в этой, не доводилось использовать более чем с одной.
1
Dragokas
Эксперт WindowsАвтор FAQ
17112 / 7167 / 862
Регистрация: 25.12.2011
Сообщений: 10,964
Записей в блоге: 16
19.01.2016, 17:37 7
Лучший ответ Сообщение было отмечено @Root как решение

Решение

Windows Batch file
1
2
set "\n=""&vblf&"""
set "Prompt=несколько%\n%строк"
1
@Root
⁞ ★☭ Mad Max ☭★ ⁞
201 / 84 / 12
Регистрация: 04.09.2013
Сообщений: 187
19.01.2016, 17:52  [ТС] 8
Dragokas,
Спасибо! Все получилось.
0
19.01.2016, 17:52
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.01.2016, 17:52

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

Модальное окно, сделать загрузку в окно по ссылке
Привет всем нашел в интернете скрипт модального окна. Очень он мне подходит но есть одно но я хочу...

Ошибка The type or namespace name 'MsgBox' does not exist in the class or namespace 'MsgBox.MsgBox' (are you missing an assembly reference?)
Есть Class Library, написанная на VB.NET. Компилирую, вставляю assembly в VB.NET, все работает....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.