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

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

    [+] [-]
Обновил перевод (метка 210930). Докинул примеров, подправил ошибки, добавил описание внутренних переменных PECMD (=%VAR%.txt). В шапке.

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

    alexandr987
  • 21889
  • Стаж: 4 года 6 месяцев
  • Сообщений: 17
  • Репутация:0

    [+] [-]
Всем привет) Прошу помощи знатаков, поскольку совсем новичек в этом. Есть основная программа Win3 и ее окно, есть подпрограмма SetEdit4. Как сделать, чтобы сначала запускалась основная программа , а потом автоматически с небольшой задержкой подпрограмма без подавления окна и процесса основной программы.
CALL @Win3
_SUB Win3, \\ основная программа
................
ITEM Button5,L320T30W75H24,Browse,CALL SetEdit4
call SetEdit4
_END
SetEdit4 \\ подпрограмма
..............
_END
Если запускать от кнопки Button5, то все ОК, запускается основная программа, потом подпрограмма, но нужно нажимать кнопку, а хочется автоматически. Но кнопка тоже нужна, она есть и работает как надо.
Если через call SetEdit4, то сразу запускается подпрограмма, подавляя окно и процесс основной программы.
Пробовал прописывать вверху CALL @SetEdit4 рядом с CALL @Win3, но тогда программа и подпрограмма выполняются поочередно.

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

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

    [+] [-]
alexandr987, во-первых, вызвать окно можно по-разному (в смысле соотношений родительского потока и дочернего окна). Строго говоря, вызов call SetEdit4 не во всех версиях PECMD откроет ОКНО, только не очень новые версии интерпретируют это аналогично правильной команде call @SetEdit4.

вызов окна, определяемого _SUB

CALL @-sub[:@-#LxTyWwHh]] [LeadChar]<WinName> [CMDLineParam] //внешнее подокно
@-sub[:@-#LxTyWwHh]] дополнительные настройки дочернего окна:
@ сохранить отношение родительского и дочернего окна
- есть заголовок
# есть рамки
LxTyWwHh размер дочернего окна, например:L210T150W170H50
LeadChar символы, оределяющие отношение родительского и дочернего окна:
@ вызов окна, определяемого _SUB; для вызова из него другого окна: CALL @
@* вызов дочернего окна _SUB, которое будет работать одновременно с
родительским; следующая команда не выполяется до закрытия дочернего окна
@- вызов окна _SUB в фоновом режиме и продолжение выполнения следующей
команды, но некоторые трудоемкие операции все равно будут заблокированы
@~ вызов окна _SUB в фоновом режиме, без блокирования трудоемких операций
@+ вызов окна _SUB в фоновом режиме, без блокирования трудоемких операций,
дочернее окно независимо и программа не ждёт его закрытия для выхода
@^ напоминает @*, но родительское окно не перекрывается дочерним окнм, что
применимо к родительскому окну, управляемому исключительно событиями
$ Отсутствие указывает на вызывающий подпроцесс, имя которого - параметр;
формат параметров функции: в подпроцессе и окне, %0, %1, %2, ...%n
относятся соответственно к SubProcName/WinName, и параметр N1, N2,...Nn
%# указывает количество параметров
%* указывает все параметры, начиная с %1
%~0, %~1, %~2, ...%~n указывает на удаление обрамляющих двойных кавычек
%@ указывает все параметры, начиная с %0
Т.е., возможно, подойдёт команда call @~SetEdit4
Во-вторых, можно использовать THREAD (THRD):
THRD TEAM WAIT 1000|call @SetEdit4 //эта строчка запустит отдельный поток, в котором через 1000мс запустится независимое окно SetEdit4.

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

    alexandr987
  • 21889
  • Стаж: 4 года 6 месяцев
  • Сообщений: 17
  • Репутация:0

    [+] [-]
возможно, подойдёт команда call @~SetEdit4
Прекрасно работает, но, увы. После закрытия программы остается висеть не завершенный фоновый процесс и с каждым перезапуском программы число этих процессов накапливается. Если подпрограмму SetEdit4 вызывать кнопкой или CALL SetEdit4, то программа завершается корректно и никаких посторонних процессов не остается.
Пробую второй вариант THRD.
В этом случае секция SetEdit4 запускается и отрабатывает, но не передает данные в основную программу( Завершается работа программы корректно, без лишних роцессов) Вот сама секция
_SUB SetEdit4
TEAM FDRV NEnvi=*:|ENVI AllDrv=
FORX * %NEnvi%,DEnvi,
{* FDRV *vol ,TEnvi=%DEnvi%
FIND $%TEnvi%=,EXIT -!ENVI AllDrv=%AllDrv% %DEnvi%
}
MESS %AllDrv% *2000
FORX * %AllDrv%,DEnvi,IFEX %DEnvi%\ISO\*.wim,TEAM MESS %DEnvi% *2000| EXIT
FORX %DEnvi%\ISO\*.wim,WIMFILE,0,CALL PthName
MESS %WIMFILE% *3000
FIND $%WIMFILE%=,!ENVI @Edit4=%WIMFILE%
FDIR ypath=%WIMFILE%
call llj "%WIMFILE%"
_END
MESS %WIMFILE% отображает полный путь, но этот путь не подхватывается основной программой, но если по кнопке или через CALL SetEdit4 или call @~SetEdit4, то все ОК)
Может вообще как-то это можно переделать, чтобы сначала был поиск , а потом запуск основного окна программы. Тогда секцию, и как следствие кнопку можно убрать. Если просто CALL SetEdit4, то все работает и завершается как надо, просто на время отработки секции SetEdit4 подавляется основное окно программы. Ну и хрен с ним)
Вот вся программа по которой еще куча вопросов, если можно, конечно)
CALL @Win3
ENVI MNTDIR=
ENVI WIMFILE=
_SUB SetEdit45 // ручной выбор файла, пока без кнопки
ENVI Wimfile=
BROW Wimfile,install.wim,Please select the image source to be applied,wim;esd;swm|*.wim;*.esd;*.swm|All files|*.*|,0x1000
FIND $%WIMFILE%=,!ENVI @Edit4=%WIMFILE%
FDIR ypath=%WIMFILE%
call llj "%WIMFILE%"
_END
_SUB SetEdit4
TEAM FDRV NEnvi=*:|ENVI AllDrv=
FORX * %NEnvi%,DEnvi,
{* FDRV *vol ,TEnvi=%DEnvi%
FIND $%TEnvi%=,EXIT -!ENVI AllDrv=%AllDrv% %DEnvi%
}
MESS %AllDrv% *2000
FORX * %AllDrv%,DEnvi,IFEX %DEnvi%\ISO\*.wim,TEAM MESS %DEnvi% *2000| EXIT
FORX %DEnvi%\ISO\*.wim,WIMFILE,0,CALL PthName
MESS %WIMFILE% *3000
FIND $%WIMFILE%=,!ENVI @Edit4=%WIMFILE%
FDIR ypath=%WIMFILE%
call llj "%WIMFILE%"
_END
_SUB Apply
TEAM ENVI @item2=Выполняется| ENVI @item2.Enable=0
ENVI @Button31.enable=0
ENVI Result=1
FIND $%Edit4%=,TEAM ENVI Result=0|MESS Выберите образ Windows! @Внимание !#OK
FIND $%List4%=,TEAM ENVI Result=0|MESS Выберите раздел для установки Windows! @Внимание !#OK
FIND $%Result%=1,EXEC =CMD /C mode con cols=63 lines=10 & Dism /apply-image /imagefile:"%Edit4%" /index:%index2% /ApplyDir:"%List4%" & ping localhost -n 3 > nul
TEAM ENVI @item2=Завершено| ENVI @item2.Enable=0
call @FIX
_END
_SUB Win3,W420H460,Установка Windows из .wim файла,,PECMD.EXE#1
ENVI &::index2=1
ENVI MEMO1=
FDRV AllDrive=
MEMO MEMO1,L7T170W400H190,,,0x8
GROU Group2,L7T6W398H150,Параметры установки,,0xff0000,
LABE Label4,L15T27W110H30,Выберите файл установки
EDIT Edit4,L105T30W202H24,
ITEM Button5,L320T30W75H24,Browse,CALL SetEdit4
LABE Label5,L15T67W110H30,Выберите диск для установки
LIST List4,L130T70W40H35,%AllDrive%,TEAM envi panfu2=%list4%|envi @item2.enable=1|envi @Button22.enable=1
// ITEM Button30,L230T360W130H24,Управление дисками,mmc.exe /b diskmgmt.msc
LIST LIST1,L130T110W38H200,1,envi index2=%LIST1%,1,
LABE Label6,L15T106W110H26,Индекс редакции Windows
ITEM Button26,L182T67W100H24,Wim инфо,EXEC* -code:866 -err+ @MEMO1=!cmd.exe /c Dism /get-wiminfo /wimFile:"%WIMFILE%" /index:%index2% 2>&1,
ITEM Button22,L295T67W100H24,Формат,CALL FORM,
ITEM ITEM2,L182T100W100H35,Установить,CALL Apply,
ITEM Button31,L295T100W100H35,Загрузчик,CALL FIX,
GROU Group3,L7T360W398H60,Информация,,0xff0000,
LIST LAN,L210T382W55H100,RUS,,RUS,0x4
LIST LUN,L335T382W55H100,BIOS,,BIOS,0x4
LABE LABE1,L168T387W35H17,Язык,,
LABE LABE4,L300T387W35H17,Тип,,
RADI RADI1,L20T385W132H18,,call fund,1,
// ENVI ?disme=FVER,%CurDir%\dism.exe
ENVI ?disme=FVER,%WinDir%\System32\dism.exe
envi @RADI1=Dism %disme%
RSTR disme1=5,%disme%
LSTR disme2=3,%disme%
envi disme=%disme2%%disme1%
envi @item2.enable=0
envi @Button31.enable=0
envi @Button22.enable=0
THRD TEAM WAIT 1000|call @SetEdit4
_END
// Format ==============================================================================
_SUB FORM
ENVI Result=1
FIND $%List4%=,TEAM ENVI Result=0|MESS Выберите диск для установки Windows @Внимание !#OK
MESS Диск %List4% будет отформатирован @Внимание !#YN $N
FIND $%YESNO%=NO,CALL FORM2
TEAM ENVI @Button22=Выполняется| ENVI @Button22.Enable=0
WAIT 1500
EXEC* -code:866 -err+ @MEMO1=!cmd.exe /c Format %LIST4% /FS:NTFS /Q /V:System /Y
WAIT 1500
TEAM ENVI @Button22=Завершено
WAIT 3000
TEAM ENVI @Button22=Формат| ENVI @Button22.Enable=1
_END
_SUB FORM2
TEAM MESS Правильно! Нафик оно надо) # *3000| WAIT 1000| KILL \
EXIT
_END
// Bcdboot =============================================================================
_SUB FIX
WAIT 1500
TEAM ENVI @Button31=Выполняется| ENVI @Button31.Enable=0
WAIT 1500
EXEC* -code:866 -err+ @MEMO1=!bcdboot.exe %LIST4%\Windows /s %LIST4% /f BIOS /l ru-ru
WAIT 1500
TEAM ENVI @Button31=Завершено| ENVI @Button31.Enable=0
WAIT 6000
TEAM ENVI @Button31=Загрузчик| ENVI @Button31.Enable=1
TEAM ENVI @item2=Установить| ENVI @item2.Enable=1
_END
_SUB llj //MEMO
ENVI @LABE3=%~1
find $%radi1.check%=1,
{
FIND $X=X%~1, TEAM envi @item2.enable=0| envi @item4.enable=0! TEAM EXEC* -code:866 -err+ @MEMO1=!cmd.exe /c Dism /get-wiminfo /wimFile:"%~1" 2>&1 | envi @item4.enable=1
read -,-1,&&pos,%MEMO1%
calc #&&ipos = (%&pos% - 7)/5
envi &&i=1
envi &&j=
loop %&i%<=%&ipos%,
{
envi &j=%&j%%&i%|
CALC &i= %&i% + 1
}
TEAM envi @list1.VAL=%&j%| envi @list1.SEL=1
}
_END

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

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

    [+] [-]
alexandr987, так SetEdit4 - это обычная подпрограмма, а не окно? Тогда что мешает вначале вызвать её, а тогда открыть окно
call SetEdit4
CALL @Win3
_SUB Win3, \\ основная программа
................
ITEM Button5,L320T30W75H24,Browse,CALL SetEdit4
_END
Если хочется, чтобы основное окно открывалось БЕЗ ожидания отработки подпрограммы, тогда
THRD call SetEdit4
CALL @Win3
...
Но во этом случае не забываем, что открытое окно Win3 использует переменные НА МОМЕНТ СВОЕГО ЗАПУСКА, и, чтобы их изменить, нужно использовать не ENVI XXX=%YYY%, а ENVI @XXX=%YYY%
В частности, в приведённом примере нужно так писать:
FORX %DEnvi%\ISO\*.wim,WIMFILE,0,TEAM ENVI @WIMFILE=%WIMFILE%|CALL PthName
Тогда переменная WIMFILE станет глобальной для всего скрипта, а не только для конкретной подпрограммы (или даже одной команды - в случае с FORX).

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

    alexandr987
  • 21889
  • Стаж: 4 года 6 месяцев
  • Сообщений: 17
  • Репутация:0

    [+] [-]
SetEdit4 - это обычная подпрограмма, а не окно?
Это поиск *.wim файла, здесь нет никаких окон, кроме отладочных MESS, которые позже, скорее всего, будут удалены.
Тогда что мешает вначале вызвать её, а тогда открыть окно
Я именно так и планировал, руководствуясь вашими пояснениями "Скрипт 78RePack - как смог, так и описал.", но это не заработало, потому начал городить по своему, не сильно разбираясь в вопросе. Буду разбираться)
Если хочется, чтобы основное окно открывалось БЕЗ ожидания отработки подпрограммы, тогда
THRD call SetEdit4
CALL @Win3
Это я пробовал, но путь не заполняется в окошко.
Замена строки
FORX %DEnvi%\ISO\*.wim,WIMFILE,0,CALL PthName на
FORX %DEnvi%\ISO\*.wim,WIMFILE,0,TEAM ENVI @WIMFILE=%WIMFILE%|CALL PthName не помогает
Вся секция выглядет так
THRD TEAM WAIT 1000|call SetEdit4
CALL @Win3
_SUB SetEdit4
TEAM FDRV NEnvi=*:|ENVI AllDrv=
FORX * %NEnvi%,DEnvi,
{* FDRV *vol ,TEnvi=%DEnvi%
FIND $%TEnvi%=,EXIT -!ENVI AllDrv=%AllDrv% %DEnvi%
}
MESS %AllDrv% *2000
FORX * %AllDrv%,DEnvi,IFEX %DEnvi%\ISO\*.wim,TEAM MESS %DEnvi% *2000| EXIT
FORX %DEnvi%\ISO\*.wim,WIMFILE,0,ENVI @WIMFILE=%WIMFILE%
MESS %WIMFILE% *3000
FIND $%WIMFILE%=,!ENVI @Edit4=%WIMFILE%
FDIR ypath=%WIMFILE%
call llj "%WIMFILE%"
_END
Неа, путь не перехватывается, хотя MESS %WIMFILE% показывает правильный полный путь. Но далее он не "подхватывается" программой
Возможно ENVI @WIMFILE=%WIMFILE% не срабатывает из-за ошибки в строке.
открытое окно Win3 использует переменные НА МОМЕНТ СВОЕГО ЗАПУСКА
Вот именно, окно Win3 открывается до запуска поиска SetEdit4, потому и остается путым. Видимо, нужно сначала запускать поиск SetEdit4, и только потом открывать основное окно @Win3. Ну, или перезапускать Win3 после окончания поиска SetEdit4, но тогда, скорее всего оно откроется в новом процессе и будет два окна )))
Проверил, что переменная WIMFILE все таки подхватывается (команда отрабатывается с правильными путями), а проблема может быть в
FIND $%WIMFILE%=,!ENVI @Edit4=%WIMFILE%, вот @Edit4, которая нужна для работы основного окна, пустая. Потому и строка не отображает путь
EDIT Edit4,L105T30W202H24, в Edit4 пусто, нечего отображать. А просто нельзя использовать %WIMFILE%, зачем нужна эта Edit4 ? ))) Сами команды обходятся без Edit4 и прекрасно работают с %WIMFILE% ) Быть может Edit4 нужна только для отображения в EDIT ?
Полный код программы
CALL @Win3
ENVI MNTDIR=
ENVI WIMFILE=
_SUB SetEdit45
ENVI Wimfile=
BROW Wimfile,install.wim,Please select the image source to be applied,wim;esd;swm|*.wim;*.esd;*.swm|All files|*.*|,0x1000
FIND $%WIMFILE%=,!ENVI @Edit4=%WIMFILE%
FDIR ypath=%WIMFILE%
call llj "%WIMFILE%"
_END
_SUB SetEdit4
TEAM FDRV NEnvi=*:|ENVI AllDrv=
FORX * %NEnvi%,DEnvi,
{* FDRV *vol ,TEnvi=%DEnvi%
FIND $%TEnvi%=,EXIT -!ENVI AllDrv=%AllDrv% %DEnvi%
}
MESS %AllDrv% *2000
FORX * %AllDrv%,DEnvi,IFEX %DEnvi%\ISO\*.wim,TEAM MESS %DEnvi% *2000| EXIT
FORX %DEnvi%\ISO\*.wim,WIMFILE,0,CALL PthName
MESS %WIMFILE% *3000
FIND $%WIMFILE%=,!ENVI @Edit4=%WIMFILE%
FDIR ypath=%WIMFILE%
call llj "%WIMFILE%"
_END
_SUB Apply
TEAM ENVI @item2=Выполняется| ENVI @item2.Enable=0
ENVI @Button31.enable=0
ENVI Result=1
FIND $%Edit4%=,TEAM ENVI Result=0|MESS Выберите образ Windows! @Внимание !#OK
FIND $%List4%=,TEAM ENVI Result=0|MESS Выберите раздел для установки Windows! @Внимание !#OK
FIND $%Result%=1,EXEC =CMD /C mode con cols=63 lines=10 & Dism /apply-image /imagefile:"%Edit4%" /index:%index2% /ApplyDir:"%List4%" & ping localhost -n 3 > nul
TEAM ENVI @item2=Завершено| ENVI @item2.Enable=0
call @FIX
_END
_SUB Win3,W420H460,Установка Windows из .wim файла,,PECMD.EXE#1
ENVI &::index2=1
ENVI MEMO1=
FDRV AllDrive=
MEMO MEMO1,L7T170W400H190,,,0x8
GROU Group2,L7T6W398H150,Параметры установки,,0xff0000,
LABE Label4,L15T27W110H30,Выберите файл установки
EDIT Edit4,L105T30W202H24,
ITEM Button5,L320T30W75H24,Browse,CALL SetEdit4
LABE Label5,L15T67W110H30,Выберите диск для установки
LIST List4,L130T70W40H35,%AllDrive%,TEAM envi panfu2=%list4%|envi @item2.enable=1|envi @Button22.enable=1
// ITEM Button30,L230T360W130H24,Управление дисками,mmc.exe /b diskmgmt.msc
LIST LIST1,L130T110W38H200,1,envi index2=%LIST1%,1,
LABE Label6,L15T106W110H26,Индекс редакции Windows
ITEM Button26,L182T67W100H24,Wim инфо,EXEC* -code:866 -err+ @MEMO1=!cmd.exe /c Dism /get-wiminfo /wimFile:"%WIMFILE%" /index:%index2% 2>&1,
ITEM Button22,L295T67W100H24,Формат,CALL FORM,
ITEM ITEM2,L182T100W100H35,Установить,CALL Apply,
ITEM Button31,L295T100W100H35,Загрузчик,CALL FIX,
GROU Group3,L7T360W398H60,Информация,,0xff0000,
LIST LAN,L210T382W55H100,RUS,,RUS,0x4
LIST LUN,L335T382W55H100,BIOS,,BIOS,0x4
LABE LABE1,L168T387W35H17,Язык,,
LABE LABE4,L300T387W35H17,Тип,,
RADI RADI1,L20T385W132H18,,call fund,1,
// ENVI ?disme=FVER,%CurDir%\dism.exe
ENVI ?disme=FVER,%WinDir%\System32\dism.exe
envi @RADI1=Dism %disme%
RSTR disme1=5,%disme%
LSTR disme2=3,%disme%
envi disme=%disme2%%disme1%
envi @item2.enable=0
envi @Button31.enable=0
envi @Button22.enable=0
_END
// Format ==============================================================================
_SUB FORM
ENVI Result=1
FIND $%List4%=,TEAM ENVI Result=0|MESS Выберите диск для установки Windows @Внимание !#OK
MESS Диск %List4% будет отформатирован @Внимание !#YN $N
FIND $%YESNO%=NO,CALL FORM2
TEAM ENVI @Button22=Выполняется| ENVI @Button22.Enable=0
WAIT 1500
EXEC* -code:866 -err+ @MEMO1=!cmd.exe /c Format %LIST4% /FS:NTFS /Q /V:System /Y
WAIT 1500
TEAM ENVI @Button22=Завершено
WAIT 3000
TEAM ENVI @Button22=Формат| ENVI @Button22.Enable=1
_END
_SUB FORM2
TEAM MESS Правильно! Нафик оно надо) # *3000| WAIT 1000| KILL \
EXIT
_END
// Bcdboot =============================================================================
_SUB FIX
WAIT 1500
TEAM ENVI @Button31=Выполняется| ENVI @Button31.Enable=0
WAIT 1500
EXEC* -code:866 -err+ @MEMO1=!bcdboot.exe %LIST4%\Windows /s %LIST4% /f BIOS /l ru-ru
WAIT 1500
TEAM ENVI @Button31=Завершено| ENVI @Button31.Enable=0
WAIT 6000
TEAM ENVI @Button31=Загрузчик| ENVI @Button31.Enable=1
TEAM ENVI @item2=Установить| ENVI @item2.Enable=1
_END
_SUB llj //MEMO
ENVI @LABE3=%~1
find $%radi1.check%=1,
{
FIND $X=X%~1, TEAM envi @item2.enable=0| envi @item4.enable=0! TEAM EXEC* -code:866 -err+ @MEMO1=!cmd.exe /c Dism /get-wiminfo /wimFile:"%~1" 2>&1 | envi @item4.enable=1
read -,-1,&&pos,%MEMO1%
calc #&&ipos = (%&pos% - 7)/5
envi &&i=1
envi &&j=
loop %&i%<=%&ipos%,
{
envi &j=%&j%%&i%|
CALC &i= %&i% + 1
}
TEAM envi @list1.VAL=%&j%| envi @list1.SEL=1
}
_END


Последний раз редактировалось: alexandr987 (2021-10-25 01:15), всего редактировалось 3 раз(а)

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

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

    [+] [-]

SetEdit4 можно сильно упростить

call SetEdit4
CALL @Win3
ENVI MNTDIR=
ENVI WIMFILE=
_SUB SetEdit45 // ручной выбор файла, пока без кнопки
ENVI Wimfile=
BROW Wimfile,install.wim,Please select the image source to be applied,wim;esd;swm|*.wim;*.esd;*.swm|All files|*.*|,0x1000
FIND $%WIMFILE%=,!ENVI @Edit4=%WIMFILE%
FDIR ypath=%WIMFILE%
call llj "%WIMFILE%"
_END
_SUB SetEdit4
FORX \ISO\*.wim,WIMFILE,1,TEAM ENVI Edit4=%WIMFILE%
FDIR ypath=%Edit4%
call llj "%WIMFILE%"
_END
_SUB Apply
TEAM ENVI @item2=Выполняется| ENVI @item2.Enable=0
ENVI @Button31.enable=0
ENVI Result=1
FIND $%Edit4%=,TEAM ENVI Result=0|MESS Выберите образ Windows! @Внимание !#OK
FIND $%List4%=,TEAM ENVI Result=0|MESS Выберите раздел для установки Windows! @Внимание !#OK
FIND $%Result%=1,EXEC =CMD /C mode con cols=63 lines=10 & Dism /apply-image /imagefile:"%Edit4%" /index:%index2% /ApplyDir:"%List4%" & ping localhost -n 3 > nul
TEAM ENVI @item2=Завершено| ENVI @item2.Enable=0
call @FIX
_END
_SUB Win3,W420H460,Установка Windows из .wim файла,,PECMD.EXE#1
ENVI &::index2=1
ENVI MEMO1=
FDRV AllDrive=
MEMO MEMO1,L7T170W400H190,,,0x8
GROU Group2,L7T6W398H150,Параметры установки,,0xff0000,
LABE Label4,L15T27W110H30,Выберите файл установки
EDIT Edit4,L105T30W202H24,%Edit4%
ITEM Button5,L320T30W75H24,Browse,CALL SetEdit4
LABE Label5,L15T67W110H30,Выберите диск для установки
LIST List4,L130T70W40H35,%AllDrive%,TEAM envi panfu2=%list4%|envi @item2.enable=1|envi @Button22.enable=1
// ITEM Button30,L230T360W130H24,Управление дисками,mmc.exe /b diskmgmt.msc
LIST LIST1,L130T110W38H200,1,envi index2=%LIST1%,1,
LABE Label6,L15T106W110H26,Индекс редакции Windows
ITEM Button26,L182T67W100H24,Wim инфо,EXEC* -code:866 -err+ @MEMO1=!cmd.exe /c Dism /get-wiminfo /wimFile:"%WIMFILE%" /index:%index2% 2>&1,
ITEM Button22,L295T67W100H24,Формат,CALL FORM,
ITEM ITEM2,L182T100W100H35,Установить,CALL Apply,
ITEM Button31,L295T100W100H35,Загрузчик,CALL FIX,
GROU Group3,L7T360W398H60,Информация,,0xff0000,
LIST LAN,L210T382W55H100,RUS,,RUS,0x4
LIST LUN,L335T382W55H100,BIOS,,BIOS,0x4
LABE LABE1,L168T387W35H17,Язык,,
LABE LABE4,L300T387W35H17,Тип,,
RADI RADI1,L20T385W132H18,,call fund,1,
// ENVI ?disme=FVER,%CurDir%\dism.exe
ENVI ?disme=FVER,%WinDir%\System32\dism.exe
envi @RADI1=Dism %disme%
RSTR disme1=5,%disme%
LSTR disme2=3,%disme%
envi disme=%disme2%%disme1%
envi @item2.enable=0
envi @Button31.enable=0
envi @Button22.enable=0
_END
// Format ==============================================================================
_SUB FORM
ENVI Result=1
FIND $%List4%=,TEAM ENVI Result=0|MESS Выберите диск для установки Windows @Внимание !#OK
MESS Диск %List4% будет отформатирован @Внимание !#YN $N
FIND $%YESNO%=NO,CALL FORM2
TEAM ENVI @Button22=Выполняется| ENVI @Button22.Enable=0
WAIT 1500
EXEC* -code:866 -err+ @MEMO1=!cmd.exe /c Format %LIST4% /FS:NTFS /Q /V:System /Y
WAIT 1500
TEAM ENVI @Button22=Завершено
WAIT 3000
TEAM ENVI @Button22=Формат| ENVI @Button22.Enable=1
_END
_SUB FORM2
TEAM MESS Правильно! Нафик оно надо) # *3000| WAIT 1000| KILL \
EXIT
_END
// Bcdboot =============================================================================
_SUB FIX
WAIT 1500
TEAM ENVI @Button31=Выполняется| ENVI @Button31.Enable=0
WAIT 1500
EXEC* -code:866 -err+ @MEMO1=!bcdboot.exe %LIST4%\Windows /s %LIST4% /f BIOS /l ru-ru
WAIT 1500
TEAM ENVI @Button31=Завершено| ENVI @Button31.Enable=0
WAIT 6000
TEAM ENVI @Button31=Загрузчик| ENVI @Button31.Enable=1
TEAM ENVI @item2=Установить| ENVI @item2.Enable=1
_END
_SUB llj //MEMO
ENVI @LABE3=%~1
find $%radi1.check%=1,
{
FIND $X=X%~1, TEAM envi @item2.enable=0| envi @item4.enable=0! TEAM EXEC* -code:866 -err+ @MEMO1=!cmd.exe /c Dism /get-wiminfo /wimFile:"%~1" 2>&1 | envi @item4.enable=1
read -,-1,&&pos,%MEMO1%
calc #&&ipos = (%&pos% - 7)/5
envi &&i=1
envi &&j=
loop %&i%<=%&ipos%,
{
envi &j=%&j%%&i%|
CALC &i= %&i% + 1
}
TEAM envi @list1.VAL=%&j%| envi @list1.SEL=1
}
_END

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

    alexandr987
  • 21889
  • Стаж: 4 года 6 месяцев
  • Сообщений: 17
  • Репутация:0

    [+] [-]
SetEdit4 можно сильно упростить
Спасибо вам большое, буду разбираться ) Так понял, Вы убрали поиск "правильных" дисков, пусть будет так )))
Методом тыка сработало
EDIT Edit4,L105T30W202H24,%WIMFILE%,ENVI @Label1=%Edit1%
Строка отображает полный путь по %WIMFILE% и никакой Edit4 не нужен. Попробую вообще избавиться от Edit4 в программе и использовать только %WIMFILE%. Посмотрите строку выше, может что лишнее или не правильно ? Похоже ENVI @Label1=%Edit1% вообще не нужно)


Последний раз редактировалось: alexandr987 (2021-10-25 01:04), всего редактировалось 3 раз(а)

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

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

    [+] [-]
alexandr987, мой вам совет: начинайте с простых вещей, минимум для обкатки. А потом усложнение. А не наоборот, накидать максимум того, что непонятно, и разбираться с этим.

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

    dimo70
  • 17296
  • Стаж: 6 лет 4 месяца
  • Сообщений: 3990
  • Репутация:26

    [+] [-]
  • Откуда: BG
conty9, привет. Очень понравилась твоя утилита для WinPE Подержка Ext2 и AppleHFS, которая позволяет видеть и редактировать линукс и мак разделов. Я переделал для нормального Windows-а и заработала, но не знаю как выключить. Поможешь? aa

_________________
Подпись отключена за нарушение правил форума

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

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

    [+] [-]
dimo70, ну, это вовсе не утилита, просто скрипт подключения драйверов. Чтобы "выключить", нужно в реестре

удалить службы AppleHFS и ext2fsd

Windows Registry Editor Version 5.00
[-HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\AppleHFS]
[-HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\ext2fsd]
Или при помощи PECMD:
TEAM SERV-delete AppleHFS|SERV-delete ext2fsd
После перезагрузки поддержка исчезнет. Если больше не нужно, и сами драйверы можно удалить.
Если же периодически нужно, можно изменить значение Start для соответствующего драйвера (Start=4 - отключить драйвер).

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

    dimo70
  • 17296
  • Стаж: 6 лет 4 месяца
  • Сообщений: 3990
  • Репутация:26

    [+] [-]
  • Откуда: BG
conty9, спасибо. Попробую сделать и потом выложу. az

_________________
Подпись отключена за нарушение правил форума

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

    avalat
  • 222
  • Стаж: 9 лет 3 месяца
  • Сообщений: 453
  • Репутация:127

    [+] [-]
Просьба модераторам - перекинуть посты выше в тему "PECMD Вопросы??? "
при чём тут перевод...

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

    alexandr987
  • 21889
  • Стаж: 4 года 6 месяцев
  • Сообщений: 17
  • Репутация:0

    [+] [-]
начинайте с простых вещей
Вот и упрощаю) Поубирал ненужные (в моем понимании) взаимодублирующие переменные, упростил некоторые секции.
Код программы
CALL SetEdit4
CALL @Win3
ENVI MNTDIR=
ENVI WIMFILE=
_SUB SetEdit45
ENVI Wimfile=
BROW Wimfile,install.wim,Please select the image source to be applied,wim;esd;swm|*.wim;*.esd;*.swm|All files|*.*|,0x1000
FIND $%WIMFILE%=,!ENVI @Edit4=%WIMFILE%
FDIR ypath=%WIMFILE%
call llj "%WIMFILE%"
_END
_SUB SetEdit4
TEAM FDRV NEnvi=*:|ENVI AllDrv=
FORX * %NEnvi%,DEnvi,
{* FDRV *vol ,TEnvi=%DEnvi%
FIND $%TEnvi%=,EXIT -!ENVI AllDrv=%AllDrv% %DEnvi%
}
MESS %AllDrv% *2000
FORX * %AllDrv%,DEnvi,IFEX %DEnvi%\ISO\*.wim,EXIT
FORX %DEnvi%\ISO\*.wim,WIMFILE,0,CALL PthName
MESS %WIMFILE% *2000
FDIR ypath=%WIMFILE%
call llj "%WIMFILE%"
_END
_SUB Apply
TEAM ENVI @item2=Выполняется| ENVI @item2.Enable=0
ENVI @Button31.enable=0
ENVI Result=1
FIND $%WIMFILE%=,TEAM ENVI Result=0|MESS Выберите образ Windows! @Внимание !#OK
FIND $%List4%=,TEAM ENVI Result=0|MESS Выберите раздел для установки Windows! @Внимание !#OK
FIND $%Result%=1,EXEC =CMD /C mode con cols=63 lines=10 & Dism /apply-image /imagefile:"%WIMFILE%" /index:%LIST1% /ApplyDir:"%List4%" & ping localhost -n 3 > nul
TEAM ENVI @item2=Завершено| ENVI @item2.Enable=0
call @FIX
_END
_SUB Win3,W420H460,Установка Windows из .wim файла,,PECMD.EXE#1
ENVI &::index2=1
ENVI MEMO1=
FDRV AllDrive=
MEMO MEMO1,L7T170W400H190,,,0x8
GROU Group2,L7T6W398H150,Параметры установки,,0xff0000,
LABE Label4,L15T27W110H30,Выберите файл установки
EDIT Edit4,L105T30W202H24,%WIMFILE%,
ITEM Button5,L320T30W75H24,Browse,CALL SetEdit4
LABE Label5,L15T67W110H30,Выберите диск для установки
LIST List4,L130T70W40H35,%AllDrive%,TEAM envi panfu2=%list4%|envi @item2.enable=1|envi @Button22.enable=1
// ITEM Button30,L230T360W130H24,Управление дисками,mmc.exe /b diskmgmt.msc
LIST LIST1,L130T110W38H200,1|2|,,1,0x4
LABE Label6,L15T106W110H26,Индекс редакции Windows
ITEM Button26,L182T67W100H24,Wim инфо,TEAM EXEC* -code:866 -err+ @MEMO1=!cmd.exe /c Dism /get-wiminfo /wimFile:"%WIMFILE%" /index:%LIST1% 2>&1| ENVI @Button26=Wim инфо %LIST1%
ITEM Button22,L295T67W100H24,Формат,CALL FORM,
ITEM ITEM2,L182T100W100H35,Установить,CALL Apply,
ITEM Button31,L295T100W100H35,Загрузчик,CALL FIX,
GROU Group3,L7T360W398H60,Информация,,0xff0000,
LIST LAN,L210T382W55H100,RUS,,RUS,0x4
LIST LUN,L335T382W55H100,BIOS,,BIOS,0x4
LABE LABE1,L168T387W35H17,Язык,,
LABE LABE4,L300T387W35H17,Тип,,
RADI RADI1,L20T385W132H18,,call fund,1,
// ENVI ?disme=FVER,%CurDir%\dism.exe
ENVI ?disme=FVER,%WinDir%\System32\dism.exe
envi @RADI1=Dism %disme%
RSTR disme1=5,%disme%
LSTR disme2=3,%disme%
envi disme=%disme2%%disme1%
envi @item2.enable=0
envi @Button31.enable=0
envi @Button22.enable=0
call llj
_END
// Format ==============================================================================
_SUB FORM
ENVI Result=1
FIND $%List4%=,TEAM ENVI Result=0|MESS Выберите диск для установки Windows @Внимание !#OK
MESS Диск %List4% будет отформатирован @Внимание !#YN $N
FIND $%YESNO%=NO,CALL FORM2
TEAM ENVI @Button22=Выполняется| ENVI @Button22.Enable=0
WAIT 1500
EXEC* -code:866 -err+ @MEMO1=!cmd.exe /c Format %LIST4% /FS:NTFS /Q /V:System /Y
WAIT 1500
TEAM ENVI @Button22=Завершено
WAIT 3000
TEAM ENVI @Button22=Формат| ENVI @Button22.Enable=1
_END
_SUB FORM2
TEAM MESS Правильно! Нафик оно надо) # *3000| WAIT 1000| KILL \
EXIT
_END
// Bcdboot =============================================================================
_SUB FIX
WAIT 1500
TEAM ENVI @Button31=Выполняется| ENVI @Button31.Enable=0
WAIT 1500
EXEC* -code:866 -err+ @MEMO1=!bcdboot.exe %LIST4%\Windows /s %LIST4% /f BIOS /l ru-ru
WAIT 1500
TEAM ENVI @Button31=Завершено| ENVI @Button31.Enable=0
WAIT 6000
TEAM ENVI @Button31=Загрузчик| ENVI @Button31.Enable=1
TEAM ENVI @item2=Установить| ENVI @item2.Enable=1
_END
_SUB llj
EXEC* -code:866 -err+ @MEMO1=!cmd.exe /c Dism /get-wiminfo /wimFile:"%WIMFILE%" 2>&1
_END


Последний раз редактировалось: alexandr987 (2021-10-30 09:53), всего редактировалось 1 раз

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

    avalat
  • 222
  • Стаж: 9 лет 3 месяца
  • Сообщений: 453
  • Репутация:127

    [+] [-]
alexandr987, Почему не читаешь "Личное сообщение" ?? (вверху, рядом с профилем)

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


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

Текущее время: 26-Апр 10:24

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


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