Karpov
 - Стаж: 7 лет
- Сообщений: 26
- Репутация:-2[+] [-]
|
подскажите, как сделать так, чтобы программа запущенная на начальном этапе загрузки через 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
|
Karpov
 - Стаж: 7 лет
- Сообщений: 26
- Репутация:-2[+] [-]
|
conty9, спасибо за ответ. где-то в начале файла pecmd.ini будет строчка: HOTK #112,x:\program.exe нужно, чтобы при нажатии клавиши открылась программа, ее было видно, но все что ниже строчки (HOTK #112,x:\program.exe) - не выполнялось. подскажите как это сделать. спасибо.
|
 Отправлено: 05-Фев-2020 02:16
(спустя 1 час 30 минут)
gera_serg
  - Стаж: 9 лет 7 месяцев
- Сообщений: 1421
- Репутация:9[+] [-]
|
73705на данный момент программа запускается, но ее скрывает pecmd.exe до появления рабочего стола. появление Рабочего Стола - это результат от explorer.exe, который был запущен строкой в pecmd.ini ... SHEL %Windir%\explorer.exe ... Если Вам не нужен РС эксплорера (и запуск из него других программ), запустите через SHEL вашу "program.exe"...
|
Karpov
 - Стаж: 7 лет
- Сообщений: 26
- Репутация:-2[+] [-]
|
73709HOTK #112,x:\program.exe мне нужно, чтобы при нажатии кнопки ничего уже не выполнялось в pecmd.ini ниже строки HOTK #112,x:\program.exe при нажатии кнопки HOTK #112 должна запуститься программа program.exe любым способом и ее должно быть видно. все что ниже строки HOTK #112 не выполняется\прерывается никакие оболочки не нужны winpe стартует нажал кнопку открылась прога и ничего более не нажал кнопку - обычная загрузка winpe все как реализовать? спасибо
|
gera_serg
  - Стаж: 9 лет 7 месяцев
- Сообщений: 1421
- Репутация:9[+] [-]
|
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мс и повторяем опрос... Столько раз, сколько нужно ждать нажатия кнопки.winpe стартует... нажал кнопку... открылась прога и ничего более... не нажал кнопку - обычная загрузка winpe Так это не работает. Точнее, пользователь 100% не успеет нажать кнопку, и произойдет обычная загрузка. Нужно задать время, которое мы отведем пользователю на нажатие кнопки. Если это время истекло, тогда обычная загрузка. Вот скрипт, который работает так: производится опрос правого Ctrl, если она была нажата, тогда запускаем notepad.exe, ждём его завершения (если не надо ждать - убираем "=" перед notepad.exe) и выходим из FORX. Если кнопка не нажата, тогда ожидаем 200мс и повторяем. Всего будет ждать 4сек (200мс * 20 значений в FORX). Так или иначе - приходим к сообщению DONE.FORX* 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0,,IFEX KEY=#0x11,TEAM EXEC =notepad.exe|EXIT FORX!WAIT 200 MESS DONE Вместо FORX* можно использовать цикл на LOOP.
|
gera_serg
  - Стаж: 9 лет 7 месяцев
- Сообщений: 1421
- Репутация:9[+] [-]
|
73721_SUB LoadMyProg EXEC x:\program.exe KILL pecmd.exе _END спасибо за ответ. прога запускается но сценарий pecmd.ini идет дальше. как прекратить выполнения сценария? попробуйте _SUB LoadMyProg EXEC =x:\program.exe KILL pecmd.exе _END После нормального окончания работы "program.exe" следующая строка сценария должна отправить комп в перезагрузку
|
nikzzzz
  - Стаж: 10 лет
- Сообщений: 3114
- Репутация:127[+] [-]
|
conty9,  Не подскажешь, как вывести строку в поток StdOut?
|
|
nikzzzz, нет, не знаю. Может, через костыль с cmd.exe?
|
nikzzzz
  - Стаж: 10 лет
- Сообщений: 3114
- Репутация:127[+] [-]
|
74031 Может, через костыль с cmd.exe? Не, не подходит. Пробовал WRIT с параметром CONOUT$ , получается тот-же костыль, что и с cmd.exe, а мне не нужно консольное окно, мне просто нужен поток для отладчика. Может File поможет, если указать ему выводить в поток, пока не разобрался.
|
|
Довольно неожиданный вариант "окна" - полноценное меню в трее. Этот вариант позволит сделать утилиту, которая висит в трее и выполняет какие-то задачи. Для реализации меню понадобится команда... MENUОписание команды MENUMENU [-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
|
nikzzzz
  - Стаж: 10 лет
- Сообщений: 3114
- Репутация:127[+] [-]
|
conty9,  А ты не разбирался с api функциями?
|
|
nikzzzz, я даже не уверен, что знаю, что это. )) Подозреваю, что это вызов библиотек для выполнения неких действий?Например, получение UUID для диска С:\SET$ buf=*1024 0x00 CALL $**qd **ret:&&r Kernel32.dll,GetVolumeNameForVolumeMountPointW,$C:\,*&buf,#1000 MESS %&buf% Error=%&&r%
|
nikzzzz
  - Стаж: 10 лет
- Сообщений: 3114
- Репутация:127[+] [-]
|
conty9 Да, именно это я и имел ввиду. Как вызвать функцию, я понял из описания, но вот с передачей ей аргументов не разобрался. PeCmd не имеет явных типов переменных, как их преобразовать к нужному типу, как передать функции указатель на переменную, как создать структуру? К сожалению, в описании очень мало информации, да и плюс к этому, она искажена переводом. Из приведенного примера, я мало что понял, хотя знаю как эта функция работает, но спец. символы для меня остаются китайскими иероглифами.  Если у тебя есть подобные примеры, подбрось, попытаюсь разобраться.
|
Страница 19 из 28
Текущее время: 14-Мар 20:18
Часовой пояс: UTC + 3
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете прикреплять файлы к сообщениям Вы можете скачивать файлы
|
|