Страница 1 из 20

AskParam - диалог запроса параметров командной строки

Добавлено: Сб авг 21, 2010 22:10
MVV
Утилита писалась сравнительно давно, упоминалась неоднократно на страницах форума, но темы для нее не было.

AskParam позволяет запрашивать параметры командной строки запускаемого приложения в графическом диалоговом окне и вставлять введенные строки в параметры в любом порядке и количестве. При запросе каждого параметра можно указать текст заголовка окна, сообщение и набор строк выпадающего списка значений. Переменные окружения в предлагаемых значениях раскрываются автоматически перед отображением запроса ввода параметра.

Переменные окружения раскрываются везде: перед отображением предлагаемого текста, в пути к запускаемой программе, в строке параметров, передаваемых этой программе, а также в заголовке окна и подсказке.



Информация о последней версии

Версия: 1.0.6
URL: AskParam на wincmd.ru / AskParam на totalcmd.net

Требования: Windows 2000 и выше

Особенности:

+ любое число вводимых параметров и их указание в параметрах запуска программы
+ возможность менять заголовок окна, сообщение о вводе параметра и набор строк выпадающего списка
+ раскрытие переменных окружения в отображаемых строках диалога и параметрах запуска программы
+ полная поддержка Юникода


Параметры командной строки:

/c"Привет" - устанавливает заданный заголовок окна
/t"Вариант ответа", /u"Выделенный вариант" - добавляют строки в выпадающий список (можно несколько раз указывать), /u также выделяет свой вариант
/p"Введите параметр:" - устанавливает текст приглашения, а также отображает диалог для запроса параметра (при этом предлагаемые значения, заголовок окна и прочие опции должны быть установлены заранее)
/r[-] - включает/выключает очистку выпадающего списка после ввода очередного параметра
/h[-] - включает/выключает режим ввода пароля (звездочки)
/q"^" - задает символ, который будет заменен на двойную кавычку внутри строк параметров /c, /t и /p
/s{0-8} - задает режим запуска процесса (0 - скрытый, 1 - нормальный, 2 - свернутый, 3 - развернутый)
/w - включает опцию ожидания завершения процесса

Параметры /c, /t, /u, /p, /r, /h, /q можно использовать любое число раз для запроса любого числа параметров. После параметров указывается строка для выполнения, в которой можно использовать переменные %1, %2 и т.д. для вставки текста, введенного пользователем в ответ на запрос соответствующего параметра. Максимальное число цифр номера параметра - 3. Если сразу после параметра нужно указать цифру, которую нужно передать запускаемому приложению, номер параметра нужно указывать трехзначным, добавив нулей слева, т.е. %001 вместо %1 (таким образом, если указать %0012, это будет означать вставку текста первого запрошенного параметра и цифры 2). Также можно использовать системные переменные окружения. Для вставки символа % нужно удвоить его.

При запуске с панели инструментов ТК нужно помнить, что для вставки в строку параметров символа % нужно удвоить его. А если этот символ % нужно передать запускаемому приложению, то нужно написать его 4 раза (тотал передаст половину символов %, а потом AskPAram еще в 2 раза сократит их число при анализе строки).


В качестве примеров использования можно привести запрос числа секунд до выключения компьютера, кнопки панели управления виртуальной панелью, кнопку архивирования с запросом пароля и другие. Также простенький демонстрационный пример AskParam показывает, если запускать ее без параметров (нижняя строчка сообщения).


Это описание параметров может быть полезным
Этот краткий перечень вариантов применения может быть интересным

Добавлено: Сб авг 21, 2010 22:19
MVV
GGS писал(а):Вопрос по переменным окружения.
Для теста использую команду: AskParam /c /t"%TIME%" /p cd.

Если команда выполняется из консоли (cmd /c), то подсказка %TIME% раскрывается в своё значение.
Если из ком.строки ТС или из ТС-кнопки, то просто вижу %TIME% как текст.
Речь только об отображении в окне ввода, в качестве параметра %1 передаётся правильно. Аналогично с %DATE%.
Переменные %COMMANDER_PATH%, %TEMP% и пр. раскрываются в качестве подсказки в своё значение, а эти - нет.

Можно исправить положение?
Проблема в том, что %TIME% и %DATE% - псевдопеременные, о существовании которых знает лишь командный интерпретатор. Как официальные переменные окружения они не существуют. Вот почему другие программы не могут раскрыть их.

Но ты можешь запускать CMD, а из него AskParam. То есть, в данном случае потребуется лишь приписать строку cmd.exe /c перед путем к AskParam.exe: cmd.exe /c AskParam.exe /c /t"%TIME%" /p cd.
Единственный минус такого способа вызова - черное окно в фоне. Однако, если поставить галочку запуска программы в свернутом виде, оно будет запускаться в виде кнопки панели задач. Также можно создать ярлык для CMD.exe, в свойствах которого прописать запуск в свернутом виде и параметр /c - и запускать AskParam просто как параметр этого ярлыка. Тогда мы получим возможность задать значок и название кнопки на панели задач:)
Кстати, еще минус такого способа - то, что CMD.exe иногда криво обрабатывает параметры, если имя программы для запуска заключено в кавычки (там целая система, благодаря которой CMD.exe работает намного тупее, чем если бы ее вообще не было).

Добавлено: Вс авг 22, 2010 01:06
GGS
MVV писал(а):CMD.exe работает намного тупее, чем если бы ее вообще не было
Да, намучился я с кавычками. Всё получилось, спасибо. Тестовая кнопка такая:

Код: Выделить всё

TOTALCMD#BAR#DATA
cmd /c start "" "%COMMANDER_PATH%\TOOLs\AskParam.exe"
/c"Заголовок" /t"%%TIME:~0,5%%" /p"Время:" cmd /k echo %%1
%COMMANDER_PATH%\TotalCmd.exe,3
AskParam TEST

1
-1

Добавлено: Вс авг 22, 2010 01:27
Serge Yolkin

Код: Выделить всё

cmd=cmd /v /c
param= (Echo Время: !TIME!)&(Echo Дата:  !DATE!)&(Set /p #= %N )&(If Not Defined # Set #= )&(%P%N !#!)
Исправлено
Дополнено

Добавлено: Вс авг 22, 2010 02:00
GGS
Serge Yolkin
Задача была видеть текущее значение (в данном примере время) с возможностью его корректировки и отправки в качестве параметра дальше. Редактировать поле ввода AskParam гораздо удобнее, чем в консоли.

Добавлено: Вс авг 22, 2010 02:42
Serge Yolkin
GGS
Зато дату/время передает...

Добавлено: Вс авг 29, 2010 00:33
Infocatcher
А можно наследовать системную тему оформления?
Было бы совсем замечательно. :)

Добавлено: Вс авг 29, 2010 02:15
MVV
Наверн можно добавить файл манифеста, чтобы это заработало (попробовать создать по аналогии с другой программой). Я никогда не использую тем кроме классической, поэтому разницы нигде не вижу.

Декодируй, распакуй и положи AskParam.exe.manifest рядом с AskParam.exe:

Код: Выделить всё

MIME-Version: 1.0
Content-Type: application/octet-stream; name="AskParam.exe.manifest.7z"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="AskParam.exe.manifest.7z"

N3q8ryccAANeCYjFYAEAAAAAAABsAAAAAAAAAC8xtCkAHg/LhxHYzmaRD4Meyv17M9R/6bfaKDF2
JWYgTSoJbWr3KXA4QROVCIrQWx2TS+JShoUL9yq/xlgAFfVxB7m0LUKcUW+08Q3hbDV4eBstqWdT
OM/07c5ispOErlyzdE9T6EpPkxGG3WXErXanWcge0LIcd9TKSlb/UitpLVk8knC9m4Poq1+vL5RA
8kjlxvLXYw0xqrVnzWJvgU4hR8PzSUn42BNRaXCp+0sB1fRTOidFiD5t681N8jTDSNYBishdWbLi
FbTfNZy/RKf96FyEvVfG2RWu12huSbhJ3X6yUrhu3NkYFRrgxU0H0HkT5zl9uQ0Q1JLMwFFlGwK1
SFIm35nNOSfKrVxV+/n1Goc23Eu0B8KRkNy+V1Elf+8WOcNtit7er3baSgpkcyMAJHnxHZj0+FWV
PfHqc0MBR+t09AHR6rJ93hM3uhxZ/eBnFsj+9BT15E3uT7Jv7VFk0xkAAQQGAAEJgWAABwsBAAEj
AwEBBV0AAAEADIJOAAgKAaB40NUAAAUBES0AQQBzAGsAUABhAHIAYQBtAC4AZQB4AGUALgBtAGEA
bgBpAGYAZQBzAHQAAAAUCgEAEv3jDABHywEVBgEAIAgAAAAA


Добавлено: Вс авг 29, 2010 02:49
Infocatcher
Не помогло.
Или с AskParam.exe.manifest что-то не так, или все-таки одного его в данном случае недостаточно.

Добавлено: Вс авг 29, 2010 08:48
GGS
Infocatcher
У меня сработало, см. на кнопки
MVV, очередное спасибо.

Добавлено: Вс авг 29, 2010 11:00
MVV
У меня тоже вид элементов окна изменился, как справочного сообщения, так и диалога ввода - пришлось включить службу поддержки тем для проверки.

А теперь спросите небезызвестную корпорацию, почему умная система виндовс не может сама без этого стандартного файлика закруглить кнопочки. :D

Добавлено: Вс авг 29, 2010 11:10
GGS
MVV
А может ну её, эту корпорацию, и интегрировать manifest в ресурсы. Я попробовал, всё OK.

P.S. Кстати, TotalCmd.exe имеет manifest в ресурсах, но, несмотря на это, и в виде отдельного файла. Зачем такое дублирование?

Добавлено: Вс авг 29, 2010 12:11
MVV
Можно и в ресурсы, эффект одинаков. Но я не понимаю, зачем такую хрень встраивать в ресурсы.

Кстати, да, у тотала манифест и в ресурсах. Значит, файл можно безболезненно убить.

Добавлено: Вс авг 29, 2010 12:49
GGS
MVV писал(а):Но я не понимаю, зачем такую хрень встраивать в ресурсы.
Отдельным файлом может "потеряться". Размер на 1кБ увеличивается, но всё равно за пределы одного кластера программа вышла.

Добавлено: Вс авг 29, 2010 13:44
CaptainFlint
GGS писал(а):P.S. Кстати, TotalCmd.exe имеет manifest в ресурсах, но, несмотря на это, и в виде отдельного файла. Зачем такое дублирование?
Из истории:
21.06.06 Добавлено: Файл totalcmd.exe.manifest, поскольку Totalcmd в некоторых случаях не использовал стиль XP (внутренний manifest-ресурс игнорировался).