[Цитировать]

    Karpov
  • 17930
  • Стаж: 6 лет 1 месяц
  • Сообщений: 26
  • Репутация:-2

    [+] [-]
подскажите, как сделать так, чтобы программа запущенная на начальном этапе загрузки через pecmd.exe была видна сразу?
а pecmd.exe прекращал выполнять pecmd.ini
на данный момент программа запускается, но ее скрывает pecmd.exe до появления рабочего стола.
спасибо.
запускаю так:
EXEC x:\program.exe

[Цитировать]

    Гость
  • Репутация:0

    [+] [-]
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
  • 17930
  • Стаж: 6 лет 1 месяц
  • Сообщений: 26
  • Репутация:-2

    [+] [-]
conty9,
спасибо за ответ.
где-то в начале файла pecmd.ini будет строчка:
HOTK #112,x:\program.exe
нужно, чтобы при нажатии клавиши открылась программа, ее было видно, но все что ниже строчки (HOTK #112,x:\program.exe) - не выполнялось.
подскажите как это сделать.
спасибо.

[Цитировать]

    gera_serg
  • 1171
  • Стаж: 8 лет 8 месяцев
  • Сообщений: 1421
  • Репутация:9

    [+] [-]
73705на данный момент программа запускается, но ее скрывает pecmd.exe до появления рабочего стола.
появление Рабочего Стола - это результат от explorer.exe, который был запущен строкой в pecmd.ini
...
SHEL %Windir%\explorer.exe
...
Если Вам не нужен РС эксплорера (и запуск из него других программ), запустите через SHEL вашу "program.exe"...

[Цитировать]

    Karpov
  • 17930
  • Стаж: 6 лет 1 месяц
  • Сообщений: 26
  • Репутация:-2

    [+] [-]
73709HOTK #112,x:\program.exe
мне нужно, чтобы при нажатии кнопки ничего уже не выполнялось в pecmd.ini ниже строки HOTK #112,x:\program.exe
при нажатии кнопки HOTK #112
должна запуститься программа program.exe любым способом и ее должно быть видно.
все что ниже строки HOTK #112 не выполняется\прерывается
никакие оболочки не нужны
winpe стартует
нажал кнопку
открылась прога и ничего более
не нажал кнопку - обычная загрузка winpe
все
как реализовать?
спасибо

[Цитировать]

    gera_serg
  • 1171
  • Стаж: 8 лет 8 месяцев
  • Сообщений: 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

[Цитировать]

    Гость
  • Репутация:0

    [+] [-]
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
  • 1171
  • Стаж: 8 лет 8 месяцев
  • Сообщений: 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
  • 215
  • Стаж: 9 лет 2 месяца
  • Сообщений: 3114
  • Репутация:127

    [+] [-]
conty9, aa
Не подскажешь, как вывести строку в поток StdOut?

[Цитировать]

    Гость
  • Репутация:0

    [+] [-]
nikzzzz, нет, не знаю. Может, через костыль с cmd.exe?

[Цитировать]

    nikzzzz
  • 215
  • Стаж: 9 лет 2 месяца
  • Сообщений: 3114
  • Репутация:127

    [+] [-]
74031 Может, через костыль с cmd.exe?
Не, не подходит.
Пробовал WRIT с параметром CONOUT$ , получается тот-же костыль, что и с cmd.exe, а мне не нужно консольное окно, мне просто нужен поток для отладчика.
Может File поможет, если указать ему выводить в поток, пока не разобрался.

[Цитировать]

    Гость
  • Репутация:0

    [+] [-]
Довольно неожиданный вариант "окна" - полноценное меню в трее. Этот вариант позволит сделать утилиту, которая висит в трее и выполняет какие-то задачи. Для реализации меню понадобится команда... 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

[Цитировать]

    nikzzzz
  • 215
  • Стаж: 9 лет 2 месяца
  • Сообщений: 3114
  • Репутация:127

    [+] [-]
conty9, aa
А ты не разбирался с api функциями?

[Цитировать]

    Гость
  • Репутация:0

    [+] [-]
nikzzzz, я даже не уверен, что знаю, что это. ))
Подозреваю, что это вызов библиотек для выполнения неких действий?

Например, получение UUID для диска С:\

SET$ buf=*1024 0x00
CALL $**qd **ret:&&r Kernel32.dll,GetVolumeNameForVolumeMountPointW,$C:\,*&buf,#1000
MESS %&buf% Error=%&&r%

[Цитировать]

    nikzzzz
  • 215
  • Стаж: 9 лет 2 месяца
  • Сообщений: 3114
  • Репутация:127

    [+] [-]
conty9
Да, именно это я и имел ввиду.
Как вызвать функцию, я понял из описания, но вот с передачей ей аргументов не разобрался.
PeCmd не имеет явных типов переменных, как их преобразовать к нужному типу, как передать функции указатель на переменную, как создать структуру?
К сожалению, в описании очень мало информации, да и плюс к этому, она искажена переводом.
Из приведенного примера, я мало что понял, хотя знаю как эта функция работает, но спец. символы для меня остаются китайскими иероглифами. al
Если у тебя есть подобные примеры, подбрось, попытаюсь разобраться.

Страница 19 из 28


Показать сообщения:    

Текущее время: 20-Апр 12:29

Часовой пояс: UTC + 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы можете скачивать файлы