подскажите, как сделать так, чтобы программа запущенная на начальном этапе загрузки через pecmd.exe была видна сразу? а pecmd.exe прекращал выполнять pecmd.ini на данный момент программа запускается, но ее скрывает pecmd.exe до появления рабочего стола. спасибо. запускаю так: EXEC x:\program.exe
Karpov, что значит "прекращал выполнять pecmd.ini"? Если нужно дождаться завершения работы program.exe и только после этого продолжить выполнение pecmd.ini, тогда так: EXEC =x:\program.exe или EXEC --wait x:\program.exe Окно program.exe при таком запуске не скрывается, чтобы скрыть используется EXEC =!x:\program.exe или EXEC --wait --hide x:\program.exe
conty9, спасибо за ответ. где-то в начале файла pecmd.ini будет строчка: HOTK #112,x:\program.exe нужно, чтобы при нажатии клавиши открылась программа, ее было видно, но все что ниже строчки (HOTK #112,x:\program.exe) - не выполнялось. подскажите как это сделать. спасибо.
73705на данный момент программа запускается, но ее скрывает pecmd.exe до появления рабочего стола.
появление Рабочего Стола - это результат от explorer.exe, который был запущен строкой в pecmd.ini ... SHEL %Windir%\explorer.exe ... Если Вам не нужен РС эксплорера (и запуск из него других программ), запустите через SHEL вашу "program.exe"...
мне нужно, чтобы при нажатии кнопки ничего уже не выполнялось в pecmd.ini ниже строки HOTK #112,x:\program.exe при нажатии кнопки HOTK #112 должна запуститься программа program.exe любым способом и ее должно быть видно. все что ниже строки HOTK #112 не выполняется\прерывается никакие оболочки не нужны winpe стартует нажал кнопку открылась прога и ничего более не нажал кнопку - обычная загрузка winpe все как реализовать? спасибо
winpe стартует pecmd.exе начинает отрабатывать свой INI резервирует нажатие #112 "бесконечно" запускает эксплорер с его рабочим столом при нажатии #112 запустит поверх него вашу программу Запустите Диспетчер Задач - можно убить эксплорер, но pecmd.exе тут же его запустит заново - можно убить pecmd.exe, но тогда winpe закончит работу... Вызывайте диалог Да/Нет При Да - запуск программы, через CALL LoadMyProg (подраздела pecmd.ini) _SUB LoadMyProg EXEC x:\program.exe KILL pecmd.exе _END при Нет (или не ответить Да) за несколько секунд - продолжить отрабатывать pecmd.ini (запустить РС в т.ч.) Добавлено через 9 минут 27 секунд: или через LOAD, типа _SUB EXT_INST MESS Подгрузить видео-драйвер? #YN *4000 $N FIND $%YESNO%=YES,LOAD %Windir%\System32\drvideo86.ini _END
Karpov, назначать хоткей для программы, которая запускается один раз - глупо. Ибо при каждом нажатии кнопки программа будет запущена снова. Обычно это не нужно. Лучше сделать цикл опроса нашей кнопки, если нажата - запускаем нужное и идём дальше по скрипту. Если не нажата, тогда ждём 200-1000мс и повторяем опрос... Столько раз, сколько нужно ждать нажатия кнопки.
Karpov писал(а):
winpe стартует... нажал кнопку... открылась прога и ничего более... не нажал кнопку - обычная загрузка winpe
Так это не работает. Точнее, пользователь 100% не успеет нажать кнопку, и произойдет обычная загрузка. Нужно задать время, которое мы отведем пользователю на нажатие кнопки. Если это время истекло, тогда обычная загрузка. Вот скрипт, который работает так: производится опрос правого Ctrl, если она была нажата, тогда запускаем notepad.exe, ждём его завершения (если не надо ждать - убираем "=" перед notepad.exe) и выходим из FORX. Если кнопка не нажата, тогда ожидаем 200мс и повторяем. Всего будет ждать 4сек (200мс * 20 значений в FORX). Так или иначе - приходим к сообщению DONE.
спасибо за ответ. прога запускается но сценарий pecmd.ini идет дальше. как прекратить выполнения сценария?
попробуйте _SUB LoadMyProg EXEC =x:\program.exe KILL pecmd.exе _END После нормального окончания работы "program.exe" следующая строка сценария должна отправить комп в перезагрузку
Не, не подходит. Пробовал WRIT с параметром CONOUT$ , получается тот-же костыль, что и с cmd.exe, а мне не нужно консольное окно, мне просто нужен поток для отладчика. Может File поможет, если указать ему выводить в поток, пока не разобрался.
Довольно неожиданный вариант "окна" - полноценное меню в трее. Этот вариант позволит сделать утилиту, которая висит в трее и выполняет какие-то задачи. Для реализации меню понадобится команда... MENU
Описание команды MENU
Описание команды MENU
MENU [-bar] [-sub] <MenuItemName>,[MenuItemTitle],[MenuItemEvent],[MenuItemStatus] Для добавления пункта меню в определяемое пользователем меню значка на панели задач. -bar меню окна (необходимо для первой команды MENU, необязательно для последующих) -sub параметры подменю (_SUB) MenuItemName строка (за исключением разделительной линии) должна быть уникальной, не такой, как у других элементов управления и переменных среды. Если MenuItemName или его первый символ "-", это означает разделительную линию. В противном случае это обычный элемент меню. MenuItemTitle символы в пункте меню для описания его функций или инструкций. MenuItemEvent команда, выполняемая при нажатии на элемент меню. Это должна быть действительная команда, поддерживаемая PECMD. *** указывает на выход из иконки в трее. MenuItemStatus по умолчанию 0 (нормальное меню), "-" или "+/-1" означает, что оно отключено. 2: разделительная линия 4: проверено 8: скрыть. 0x20: подполе MENU Menu2,definition 1024X768 color 32 bit RefRate 85,DISP W1024H768B32F85 MENU - MENU обычно находится между _SUB и _END. Значок в трее определяется значком окна, заданным _Sub. Если он отсутствует, будет принят основной значок PECMD. Ссылка на MenuItemTitle осуществляется через переменную среды %MenuItemName%, поддерживается %MenuItemName.Enable%. Используйте "ENVI @MenuItemName=NewTitle" для установки и изменения MenuItemTitle. Используйте "ENVI @MenuItemName.Enable=Num", чтобы установить значение поля ввода: 0 - отключено, 1 - включено. Используйте "ENVI @MenuItemName.ID=?[hmenu][;CtrlIDVarName][;MenuItemSN]" для запроса IDVarName и прочего.
Демонстрационный скрипт: меню в трее
Демонстрационный скрипт: меню в трее
CALL @WIN1 //Запуск меню _SUB WIN1,L-10T-10W1H1,My tray menu,,#2,- //Создаем в трее меню с именем "My tray menu" и иконкой #2 ENVI &WINID1=%__WinID% //Присваиваем переменной &WINID1 идентификатор нашего меню MENU Menu2,Create LNK (devmgmt),CALL CrLnk //Создаем пункт меню "Создать ярлык" MENU - //Второй пункт меню (разделитель) MENU ,Load data from LNK (devmgmt),CALL LdLnk //Пункт меню "Прочитать данные из ярлыка" MENU - //Ещё раз разделитель MENU Menu1,Exit, KILL @@%WINID1% //Последний пункт меню, выход из меню _END _SUB CrLnk LINK !%Desktop%\Device Manager (test),mmc.exe,devmgmt.msc,explorer.exe#4 //Создание ярлычка "Device Manager" на рабочем столе с иконкой 4 из explorer.exe _END _SUB LdLnk LINK ? %Desktop%\Device Manager (test),DestPath,ExecParam,IconPath#IconIdx,Rem,StartPos,HK,DspMark //Получаем в переменные все данные из ярлычка MESS DestPath=%DestPath%\nExecParam=%ExecParam%\nIconPath=%IconPath%\nIconIdx=%IconIdx%\nRem=%Rem%\nStartPos=%StartPos%\nHK=%HK%\nDspMark=%DspMark% //Вывод полученных данных _END
conty9 Да, именно это я и имел ввиду. Как вызвать функцию, я понял из описания, но вот с передачей ей аргументов не разобрался. PeCmd не имеет явных типов переменных, как их преобразовать к нужному типу, как передать функции указатель на переменную, как создать структуру? К сожалению, в описании очень мало информации, да и плюс к этому, она искажена переводом. Из приведенного примера, я мало что понял, хотя знаю как эта функция работает, но спец. символы для меня остаются китайскими иероглифами. Если у тебя есть подобные примеры, подбрось, попытаюсь разобраться.
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете прикреплять файлы к сообщениям Вы можете скачивать файлы