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

    puhpol
  • 2
  • Стаж: 10 лет
  • Сообщений: 892
  • Репутация:75

    [+] [-]
Приветствую господа! aa
Предлагаю в данной теме выкладывать примеры работы скриптов на PECMD.
Добавлено через 2 минуты 54 секунды:
Сам и начну.
Скрипт для организации удобной работой с носителем. Сделано для себя любимого, здесь как пример.
.

Сам скрипт

CALC #XEnvi=0
ENVI pb=CALC Pbar1=%Pbar1%+%b%
ENVI pb1=ENVI @Pbar1=%Pbar1%
ENVI p=CALC n=%n%+1
CALL @Windows1
_SUB Windows1,W400H240,Установка программ,,
ENVI @this.Font=14:Tahoma
LABE Label1,L10T10W380H20,Что будем делать?,,0xaaaaaa,16
ITEM But1,L20T50W350H25,Установить Минимальный пакет программ,CALL W2
ITEM But2,L20T95W150H25,Запуск MInstAll,TEAM EXEC %CurDir%\MInstAll\MInst.exe|KILL \%Windows1%
ITEM But3,L220T95W150H25,Активаторы,CALL W3
ITEM But4,L20T140W350H25,Office 2013-2019 C2R Install,TEAM EXEC %CurDir%\MInstAll\software\Activation\Office2013_2019\OInstall.exe|KILL \%Windows1%
_END
_SUB W3,W400H240,Активаторы,,
ENVI @this.Font=14:Tahoma
ITEM Bu1,L20T50W350H25,KMSAuto++ Portable v1.5.5,TEAM EXEC %CurDir%\MInstAll\software\Activation\KMSAuto++\KMSAuto++.exe|KILL \%W3%
ITEM Bu2,L20T95W350H25,Windows Loader 2.2.2 by Daz,TEAM EXEC %CurDir%\MInstAll\software\Activation\Loader\Windows Loader.exe|KILL \%W3%
//ITEM Bu3,L20T140W350H25,Office 2013-2019 C2R Install,TEAM EXEC %CurDir%\MInstAll\software\Activation\Office2013_2019\OInstall.exe|KILL \%W3%
_END
_SUB W2,W400H280,Мини Инсталл,,
ENVI @this.Font=12:Tahoma
LABE Label,L10T10W380H20,Выберите программы для установки ,,0xaaaaaa,16
// рисуем чекбоксы
CHEK Chk1,L15T40W150H20,7-Zip 19.00,,1
CHEK Chk2,L15T60W150H20,SumatraPDF 3.1.2,,1
CHEK Chk3,L15T80W150H20,UltraISO 9.7.2.3561,,1
CHEK Chk4,L15T100W150H20,WinRAR 5.71,,1
CHEK Chk5,L15T120W150H20,RuntimePack Lite,,1
//CHEK Chk6,L15T140W150H20,RuntimePack Lite,,0
CHEK Chk7,L220T40W250H20,Notepad++,,1
CHEK Chk8,L220T60W250H20,VLC,,1
CHEK Chk9,L220T80W250H20,XnShell,,1
CHEK Chk10,L220T100W250H20,Office2003micro,,1
CHEK Chk11,L220T120W250H20,DirectX 9.0c,,1
//CHEK Chk12,L220T140W250H20,DirectX 9.0c,,0
PBAR PBAR1,L15T180W365H20,,
ENVI @Pbar1=-1 //Задаём начальное значение прогрессбара, при -1 он невидим
ITEM Button1,L15T215W100H24,Снять выбор,CALL Slct
ITEM Button2,L285T215W100H24,Установить,CALL puh
LABE h1,L130T200W120H24, ,,0x0000FF,14
_END
_SUB Slct
FORX* 1 2 3 4 5 6 7 8 9 10 11 12,TEnvi,ENVI @Chk%TEnvi%.Check=%XEnvi%
CALC XEnvi=lnot(%XEnvi%)
FIND $%XEnvi%=0,ENVI @Button1=Снять выбор!ENVI @Button1=Выбрать всё
_END
_SUB puh
MESS Установить выбранные приложения?@#YN
FIND $%YESNO%=YES,CALL st
FIND $%YESNO%=NO,EXIT
_END
_SUB st
ENVI n=0
IFEX $%Chk1.Check%=1,%p%
IFEX $%Chk2.Check%=1,%p%
IFEX $%Chk3.Check%=1,%p%
IFEX $%Chk4.Check%=1,%p%
IFEX $%Chk5.Check%=1,%p%
IFEX $%Chk6.Check%=1,%p%
IFEX $%Chk7.Check%=1,%p%
IFEX $%Chk8.Check%=1,%p%
IFEX $%Chk9.Check%=1,%p%
IFEX $%Chk10.Check%=1,%p%
IFEX $%Chk11.Check%=1,%p%
IFEX $%Chk12.Check%=1,%p%
CALC b=100/%n%
ENVI @Pbar1=0
CALL inst
_END
_SUB inst
ENVI @h1=Установка .....
IFEX $%Chk1.Check%=1,TEAM EXEC ="%CurDir%\MInstAll\software\Archivers\7-Zip-19.00.exe" /ais|%pb%|%pb1%
IFEX $%Chk2.Check%=1,TEAM EXEC ="%CurDir%\MInstAll\software\Office\SumatraPDF-3.1.2.exe" /ais|%pb%|%pb1%
IFEX $%Chk3.Check%=1,TEAM EXEC ="%CurDir%\MInstAll\software\ISO\UltraISO-9.7.2.3561.exe" /VERYSILENT|%pb%|%pb1%
IFEX $%Chk4.Check%=1,TEAM EXEC ="%CurDir%\MInstAll\software\Archivers\WinRAR-5.71.exe" /ais|%pb%|%pb1%
IFEX $%Chk5.Check%=1,TEAM EXEC ="%CurDir%\MInstAll\software\System\RuntimePack_Lite-17.3.14.exe" /y /gm2 /fm0|%pb%|%pb1%
//IFEX $%Chk6.Check%=1,TEAM EXEC ="%CurDir%\MInstAll\software\prog\"|%pb%|%pb1%
IFEX $%Chk7.Check%=1,TEAM EXEC ="%CurDir%\MInstAll\software\Text\Notepad++7.8.1.exe" /ais|%pb%|%pb1%
IFEX $%Chk8.Check%=1,TEAM EXEC ="%CurDir%\MInstAll\software\Players\VLC-3.0.8.exe" /ais|%pb%|%pb1%
IFEX $%Chk9.Check%=1,TEAM EXEC =*"%CurDir%\MInstAll\software\Graphics\XnShell.cmd"|%pb%|%pb1%
IFEX $%Chk10.Check%=1,TEAM EXEC ="%CurDir%\MInstAll\Office_micro\Office2003micro.exe" /y| EXEC ="%CurDir%\MInstAll\Office_micro\Office2007support.exe"|%pb%|%pb1%
IFEX $%Chk11.Check%=1,TEAM EXEC ="%CurDir%\MInstAll\software\System\DirectX.exe" /S|%pb%|%pb1%
//IFEX $%Chk12.Check%=1,TEAM EXEC ="%CurDir%\MInstAll\software\prog\"|%pb%|%pb1%
ENVI @h1=ГОТОВО!
TIPS Выбранные приложения установленны!!!, \n,5000,1,
KILL \%W2%
_END

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

    dimo70
  • 17296
  • Стаж: 7 лет
  • Сообщений: 3785
  • Репутация:27

    [+] [-]
  • Откуда: BG
puhpol, спасибо большое за скрипт. Очень помог мне сделать мою утилитку Defender Killer.

скрипт

CALC #XEnvi=0
ENVI pb=CALC Pbar1=%Pbar1%+%b%
ENVI pb1=ENVI @Pbar1=%Pbar1%
ENVI p=CALC n=%n%+1
CALL @Windows1
_SUB Windows1,W250H130,Defender Killer,,
ENVI @this.Font=16:Tahoma
LABE Label1,L0T10W250H20,Killing Windows Defender,,0xaaaaaa,16
ITEM But1,L22T45W200H30,Kill Defender,EXEC %CurDir%\DefenderKiller\Defenfer_Removal.cmd
_END
Есть только один вопрос пока: есть вариант сделать тихую установку с ключа?

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

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

    puhpol
  • 2
  • Стаж: 10 лет
  • Сообщений: 892
  • Репутация:75

    [+] [-]
dimo70, Приветствую! aa
Так вот же:
EXEC ="%CurDir%\MInstAll\software\System\RuntimePack_Lite-17.3.14.exe" /y /gm2 /fm0

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

    loban_ser
  • 17796
  • Стаж: 6 лет 10 месяцев
  • Сообщений: 577
  • Репутация:24

    [+] [-]
75419EXEC %CurDir%\DefenderKiller\Defenfer_Removal.cmd
EXEC !%CurDir%\DefenderKiller\Defenfer_Removal.cmd - скрыть
EXEC =%CurDir%\DefenderKiller\Defenfer_Removal.cmd - с ожиданием
вроде так

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

    sergeysvirid
  • 104
  • Стаж: 10 лет
  • Сообщений: 2592
  • Репутация:127

    [+] [-]
  • Откуда: 65 регион (GMT+11)
loban_ser,
dimo70,
Может всё таки как то так?:
CALL @Windows1
_SUB Windows1,W250H130,Defender Killer,,
ENVI @this.Font=16:Tahoma
LABE Label1,L0T10W250H20,Killing Windows Defender,,0xaaaaaa,16
ITEM But1,L22T45W200H30,Kill Defender,TEAM EXEC =!%CurDir%\DefenderKiller\Defenfer_Removal.cmd|KILL \%Windows1%
_END

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

    dimo70
  • 17296
  • Стаж: 7 лет
  • Сообщений: 3785
  • Репутация:27

    [+] [-]
  • Откуда: BG
75445
CALL @Windows1
_SUB Windows1,W250H130,Defender Killer,,
ENVI @this.Font=16:Tahoma
LABE Label1,L0T10W250H20,Killing Windows Defender,,0xaaaaaa,16
ITEM But1,L22T45W200H30,Kill Defender,TEAM EXEC =!%CurDir%\DefenderKiller\Defenfer_Removal.cmd|KILL \%Windows1%
_END
Пробовал, так проще всего и проблем нет. Обновлю.

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

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

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

    [+] [-]
Cкопировал из темы PECMD:

Скрипт для создания списка исключительно 'работающих' буковок дисков

TEAM FDRV NEnvi=*:|ENVI AllDrv=
FORX * %NEnvi%,DEnvi,
{* FDRV *vol ,TEnvi=%DEnvi%
FIND $%TEnvi%=,EXIT -!ENVI AllDrv=%AllDrv% %DEnvi%
}
MESS %AllDrv%

Скрипт работает так: вначале в NEnvi помещается список всех имеющихся буковок дисков (FDRV NEnvi=*:). Потом по этому списку проверяется наличие файловой системы (FDRV *vol ...). При её наличии буковка добавляется в список %AllDrv%. После отработки в %AllDrv% находится перечень всех "рабочих" буковок, который можно использовать, например, для операции поиска на диске (без опасности обращения к поврежденному диску или диску-пустышке). Этот список выводится на экран MESS %AllDrv%.
Как можно использовать этот скрипт? Например, нам нужно найти 2k10\Programs-2k10\Win2k78.bat. Тогда после скрипта организуем поиск и запуск:
FORX * %AllDrv%,DEnvi,IFEX %DEnvi%\2k10\Programs-2k10\Win2k78.bat,TEAM EXEC %DEnvi%\2k10\Programs-2k10\Win2k78.bat|EXIT -
Эта строчка перебирает все буковки из списка в %AllDrv%. Если на конкретном диске найден Win2k78.bat, тогда запуск бантика и выход из перебора буковок.

Получить информацию о файле (разрядность х32/х64, версия файла, время, атрибуты)

ENVI XFile=%Path%\MyFile.exe
TEAM GETF %XFile%,0x3C#2,TEnvi|MSTR TEnvi,DEnvi=<1><2>%TEnvi%|CALC -base=16 DEnvi=%DEnvi%*256+%TEnvi%+0x19|GETF %XFile%,%DEnvi%#1,TEnvi|FIND $%TEnvi%=0x02,CALC #Razr=64!CALC #Razr=32
MESS %XFile% - разрядность х%Razr%
SITE ?TEnvi=FVER,%XFile%
MESS %XFile% - версия %TEnvi%
SITE ?NEnvi,TEnvi,DEnvi=FTIME,%XFile%
MESS %XFile% - время создания файла %NEnvi%, время записи файла %TEnvi%, время последнего доступа %DEnvi%
SIZE TEnvi=%XFile%
MESS %XFile% - размер файла %TEnvi% байт
SITE ?A,H,R,S=FATTR,%XFile%
MESS %XFile% - атрибуты файла A=%A% H=%H% R=%R% S=%S%

Небольшой пример, какую информацию о накопителе можно получить с помощью команды PART (в переменной SelDsk указываем букву диска)

ENVI SelDsk=C:
PART -hextp -phy list drv %SelDsk%,TEnvi
MSTR DiskN=<9>%TEnvi%
MESS PartID, Type, BootMark, BaseOffset, Size, HideSectorNum, End, DrvLetter,DiskID\n%TEnvi%
PART -devid list disk %DiskN%,TEnvi
MESS DiskID, Size, CylinNum, HeadNum, SetorNum, SectorSize, MediaType, Sign(Hex), BusType, PartType, RemvFixDisk.\n%TENVI%
FORM TEnvi=%SelDsk%
MESS Type Disk (Fixed HDD/USB Drive/USB Flash)\n%TEnvi%
EXIT

Получаем в текст .\HDD_data.txt инфу о накопителях, с комментариями что и как

```````Для облегчения понимания комментов убрал TEAM (это команда, позволяющая размещать несколько команд в одну строчку, разделяя их символом "|"). Применение TEAM позволяет уменьшить кол-во строчек за счет увеличения их длины
`====================================================
ENVI^ EnviMode=1 `определяем работу с локальными переменными
SET$ &NL=0d 0a `присваиваем &NL код перевода строки
FDRV &Drvs=*: `получаем в переменную &Drvs список всех букв дисков в системе (C: D: E: ...)
FORX * %&Drvs%,&D, `начинаем перебор буковок, обрабатываемая буква в переменной &D
{* PART list drv %&D%,&&V `получаем в переменную &&V инфу о смонтированном на эту букву накопителе, в одну строчку: PartID, Type, BootMark, BaseOffset, Size, HideSectorNum, End, DrvLetter, HD number | выглядит примерно так: 3 12 1 474384798720 25720450560 926532810 500105249280 D: 1
MSTR &&hd=<9>%&V% `из всей полученной инфы используем только номер накопителя, 9-е значение |в примере - это 1 (hd1)
^SET &Drv[%&hd%]=%%&Drv[%&hd%]%%%&D% `присваиваем переменной Drv [с привязкой к номеру текущего накопителя hd0] используемую букву
} `повторяем для следующей буквы диска, в результате получим привязку всех буковок к номеру накопителя, например, &Drv0=C:F:G:
PART list disk,&&AllDsk `получаем в переменную &&AllDsk инфу о всех накопителях (примерно так будет 0 1 2 3 4, если в системе 5 накопителей)
ENVI &&FindLIST= `очищаем переменную &&FindLIST
SET &D1= `очищаем переменную &D1
FORX * %&AllDsk%,&Find, `начинаем перебор списка накопителей %&AllDsk%, текущее значение в переменной &Find
{* PART -devid list disk %&Find%,&DskID `получаем в переменную &DskID инфу о накопителе с номером %&Find%, в одну строчку: DiskID, Size, CylinNum, HeadNum, SetorNum, SectorSize, MediaType, Sign(Hex), BusType, PartType, RemvFixDisk, DiskInfo | выглядит примерно так: 0 500107862016 60801 255 63 512 12 CE3BDCAA 3 MBR F IDE\DISKST500DM002-1BC142_______________________JC4B____\5&1D4241CA&0&0.0.0
MSTR &&hd,&&SZ,&&Bus=<1><2><9>%&DskID% `извлекаем 1-е, второе и девятое слова из инфы, это будет соответственно номер харда, размер и шина
SED &DskID=1,DISK\&VEN_, ,%&DskID% `заменяем первую найденную комбинацию "DISK\&VEN_" на " " (пробел), чистим "мусор" с головы
SED &DskID=1,IDE\\DISK,1 ,%&DskID% `заменяем первую найденную комбинацию "IDE\\DISK" на " "
SED &DskID=1,\&PROD_,_,%&DskID% `заменяем первую найденную комбинацию "\&PROD_" на "_"
MSTR &DskID=<-1>%&DskID% `присваиваем переменной &DskID только последнее слово (отсекаем мусор спереди)
SED &DskID=1,\&REV, ,%&DskID% `заменяем первую найденную комбинацию "\&REV" на " " (пробел), чистим "мусор" с хвоста
SED &DskID=1,\\, ,%&DskID% `заменяем первую найденную комбинацию "\\" на " "
SED &DskID=1,___, ,%&DskID% `заменяем первую найденную комбинацию "___" на " "
MSTR &DskID=<1>%&DskID% `присваиваем переменной &DskID только первое слово (отсекаем мусор сзади)
SED &DskID=8,_, ,%&DskID% `заменяем все "_" на пробелы (для красоты)
FIND $%&DskID%=,SET &DskID=- `если инфа о накопителе не получена, тогда прочерк "-"
IFEX #%Bus%=2, SET Bus=(ATAPI) `анализ шины >> ATAPI
IFEX #%Bus%=3, SET Bus=(ATA) `анализ шины >> ATA
IFEX #%Bus%=7, `анализ шины - USB, но пока не известно - Flash или HDD
{
SET Bus=(USB_HDD) `анонсом присвоим шине значение USB-HDD
^SET &TEnvi=%%&Drv[%hd%]%% `получаем буквы дисков для этого накопителя
FORM &TEnvi=%&TEnvi% `получаем в TEnvi тип устройства
FIND $%&TEnvi%=DRIVE_USBFLASH,SET Bus=(USB_Flash) `если устройство USB_Flash, тогда обзываем его флешкой ))
}
IFEX #%Bus%=11, SET Bus=(SATA) `анализ шины >> SATA
IFEX #%&SZ%>2G, @TEAM CALC &SZ=%&SZ%/1G#1|SET SZ=%&SZ%G! IFEX #%&SZ%>2M, @TEAM CALC &SZ=%&SZ%/1M#1| SET SZ=%&SZ%M `Пересчет байтов в кило/мега/гигабайты. #1 задаёт точность отображения результата (один знак после запятой)
^SET &FindLIST=%&FindLIST%%&NL%%&Find%,%&Bus%,%&SZ%,%&DskID%,%%&Drv[%hd%]%% `после перевода строки (код в %&NL%) добавляем строчку с данными харда в общий списочек &FindLIST, данные: номер накопителя, шина, размер, название, буквы смонтированных разделов
}
FILE .\HDD_data.txt `удаляем файл .\HDD_data.txt `удаляем файл .\HDD_data.txt (если имеется)
WRIT .\HDD_data.txt,$*,%&FindLIST% `записываем в файл .\HDD_data.txt наш список

Ещё немного обновил скрипт создания списка разделов, теперь имя накопителей как в диспетчере устройств + отображает невидимые разделы флешки

TEAM ENVI HdData=|SET$ &NL=0d 0a|PART list disk,AllDrv
FORX* %AllDrv%,CurDrv,
{* TEAM PART -devid list disk %CurDrv%,DskNam|MSTR HdNum,HdSize,HdBus=<1><2><9>%DskNam%
TEAM REGI $HKLM\SYSTEM\CurrentControlSet\Services\Disk\Enum\%CurDrv%,DskNam
TEAM SED *ni DskNam=1,Disk\&Ven_\&Prod_, ,%DskNam%|SED *ni DskNam=1,Disk\&Ven_, ,%DskNam%
TEAM SED *ni DskNam=1,\\DISK, ,%DskNam%|MSTR DskNam=<-1>%DskNam%|SED *ni DskNam=1,&Rev_, ,%DskNam%
TEAM SED *ni DskNam=1,\&Prod_,_,%DskNam%|SED DskNam=1,___, ,%DskNam%
TEAM SED DskNam=1,\\, ,%DskNam%|MSTR DskNam=<1>%DskNam%|SED DskNam=6,_, ,%DskNam%
FIND $%DskNam%=, SET DskNam=Unrecognized Drive
IFEX #%HdSize%>2G, @TEAM CALC HdSize=%HdSize%/1G#1|ENVI HdSize=%HdSize%G!IFEX #%HdSize%>2M,@TEAM CALC HdSize=%HdSize%/1M#1|ENVI HdSize=%HdSize%M
IFEX #%HdBus%=2,ENVI HdBus=(ATAPI)!IFEX #%HdBus%=3,ENVI HdBus=(ATA)!IFEX #%HdBus%=11,ENVI HdBus=(SATA)
IFEX #%HdBus%=7, TEAM ENVI HdBus=(USB_HDD)|DISK TEnvi,%CurDrv%,1|FORM TEnvi=%TEnvi%|FIND $%TEnvi%=DRIVE_USBFLASH,ENVI HdBus=(USB_Flash)
ENVI HdData=%HdData%%&NL%HD%HdNum%,%HdBus%,%HdSize%,%DskNam%
PART list part %CurDrv%,AllPrt
FORX* %AllPrt%,CurPrt,
{* TEAM SED TEnvi=1,=,1,%CurPrt%|IFEX $%Tenvi%<1,EXIT -
TEAM PART list part %CurDrv%#%CurPrt%,TEnvi|SED CurPrt=1,=,,%CurPrt%
TEAM MSTR PtSize,PtLet=<5><8>%TEnvi%|FIND $%PtLet%=,ENVI PtLet=*
ENVI HdData=%HdData%|%CurPrt%,%PtLet%,%PtSize%
}}
FILE .\HDD_data.txt
WRIT .\HDD_data.txt,$*,%HDdata%
`MESS %HDdata%
EXIT

Обмен двух разделов на двухраздельной флешке (меняем местами видимый и невидимый разделы местами)

ENVI DiskN=6 //В переменной DiskN указываем номер накопителя
PART -phy -super -force -up -hup -swap:2 %DiskN%#1

Скрипт для использования Primo RAM disk под х86 с комментариями

REGI #HKLM\system\ControlSet001\Services\FancyRd\Parameters\EnableIM=0 //Предварительно запрещаем использование невидимой памяти
IFEX MEM=?,MemA //Получаем размер видимой памяти
TEAM EXEC* TEnvi=!cpu64.exe Y|LPOS TEnvi=CPU is 64,1,%TEnvi% //Запускаем утилиту cpu64 для проверки поддержки системой х64 адресации, проверям наличие в выхлопе "CPU is 64"
FIND MEM>2560,IFEX $%TEnvi%=5,REGI #HKLM\system\ControlSet001\Services\FancyRd\Parameters\EnableIM=1 //Если доступной памяти больше 2560Мб и при этом есть поддержка х64 адресации, тогда разрешаем использование невидимой х86 памяти
TEAM EXEC =!frsetup.exe -i1 "X:\Windows\System32\drivers\\"|WAIT 200|EXEC =!frsetup.exe //устанавливаем драйвер при помощи штатного инсталятора Primo frsetup.exe, драйвера fancyrd.* заранее положены в каталог System32\drivers
FORX * 1 2 3 4 5 6 7 8,,TEAM EXEC* MemH=!rxprd.exe mem|FIND $%MemH%=,WAIT 300!EXIT FORX //Пробуем получить информацию о невидимой памяти средствами rxprd.exe, если не получается - ждём 300мс и повторяем до 8 раз
TEAM SED MemH=0,/, ,%MemH%|TEAM MSTR MemH=<7> %MemH%|CALC MemH=%MemH% //Получаем размер невидимой памяти из выхлопа rxprd.exe mem
IFEX $%MemH%<%MemA%,CALC MemA=%MemA%-%MemH%!CALC MemA=128 //Сравниваем количество невидимой и видимой памяти
TEAM ENVI TEnvi=ntfs|CALC #DSize=(%MemA%-128)*6/10+%MemH% //Выбираем файловую систему ntfs и рассчитываем размер РАМ-диска.
IFEX $%DSize%<256,TEAM ENVI TEnvi=fat|CALC DSize=4|PATH X:\Temp //Если рассчитанный размер меньше 256Мб, тогда выбираем файловую систему fat и размер 4Мб (только для монтирования WIM-ов), создаём каталог Temp на Х:\
EXEC =!rxprd.exe add -n %DSize% -t dio -d B -v -i -dmm=COMPACT -f %TEnvi% -c 4KB -l RAMDisk -X -N -T -s //Создаём РАМ-диск, форматируем его
FORX * 1 2 3 4 5 6 7 8,,IFEX B:\,EXIT FORX!WAIT 200 //Ожидаем окончание создания и форматирования.
IFEX X:\TEMP,TEAM ENVI PT=X:\TEMP|FILE --force B:\Temp!TEAM ENVI PT=B:\TEMP|PATH %PT% //Если есть X:\Temp (у нас слишком мало памяти и РАМ-диск 4Мб), тогда назначаем именно X:\Temp в качестве %Temp%
TEAM EXEC =!setenv.exe -m Temp %PT%|EXEC =!setenv.exe -m Tmp %PT% //На всякий случай всем запущенным процессам также указываются выбранный %Temp% и %Tmp%
TEAM REGI HKCU\Environment\TEMP=%PT%|REGI HKCU\Environment\TMP=%PT%
REGI HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\TEMP=%PT%
REGI HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\TMP=%PT% //Прописка %TEMP% и %TMP% в реестре
TEAM ENVI $TEMP=%PT%|ENVI $TMP=%PT%|ENVI //Указание переменных %TEMP% и %TMP% как системных
------------------------------------------------------------------------------------------------------------
*** Замечания.
1. Использование невидимой памяти на системах без поддержки х64 адресации - это 100% BSOD.
2. Драйвера Primo RAM disk, в принципе, можно и в систему интегрировать. Но обязательно дефолтное значение EnableIM=0
3. При небольшом количестве памяти лучше в качестве %TEMP% использовать системный диск Х:\, это позволяет эффективнее использовать память, что и отображено в скрипте. Если памяти мало, тогда РАМ-диск создаётся только под монтирование WIM-набора программ.
4. Если скрипт запущен командой MAIN и PECMD используется в качестве главной оболочки, тогда назначение %TEMP% и %TMP% с помощью setenv.exe, как и прописка в реестре, необязательны. Поскольку в таком случае всё, что запущено после выполнения скрипта, будет запущено из PECMD и унаследует переменные сессии PECMD.

Демонстрационный скрипт: меню в трее

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
------------------------------------------------------------------------------

Скрипт для создания ярлычков для файлов с несколькими путями для обработки, разделитель #

ENVI ScanDir=XMPE\Programs#2k10\Programs-2k10#_WIN\Utilites //Указываем пути, разделителем служит символ "#" (в пути его быть не должно), поддерживаются пути с пробелами
ENVI ScanDpt=3
ENVI ScanTyp=exe cmd bat
ENVI PathLnk=B:\lnk
//////////////////////////////////////////////////////////////
IFEX %PathLnk%,!PATH %PathLnk%
CALC #QEnvi=1 //Начнём с первого пути
LOOP #%QEnvi%=%QEnvi%, //Вечный цикл ))
{* MSTR -delims:# SEnvi=<%QEnvi%>%ScanDir% //Организуем перебор вариантов пути с разделителем "#"
FIND $%SEnvi%=,EXIT LOOP!CALC #QEnvi=%QEnvi%+1 //Если пути закончились, выход! А иначе - следующий путь
FORX @\%SEnvi%,TEnvi,0,
{* FORX* %ScanTyp%,DEnvi,
{* ENVI SCAN=FORX /S:%ScanDpt% %TEnvi%\*.%DEnvi%
%SCAN%,XEnvi,0,TEAM FNAM NEnvi=%XEnvi%|LINK %PathLNK%\%NEnvi%,%XEnvi%
}}}
-----------------------------------------------------------------------------------------
Количество путей и количество расширений не ограничено. Как, при желании, и глубина сканирования. Главное - не перестараться, чтобы не было "всё небо в попугаях" (рабочий стол).

Скрипт для создания ярлычков для файлов с несколькими путями для обработки, разделитель пробел

ENVI ScanDir=XMPE\Programs 2k10\Programs-2k10 _WIN\Utilites //Указываем пути, разделителем служит пробел, поэтому не поддерживаются пути с пробелами
ENVI ScanDpt=3
ENVI ScanTyp=exe cmd bat
ENVI PathLnk=B:\lnk
//////////////////////////////////////////////////////////////
IFEX %PathLnk%,!PATH %PathLnk%
CALC #QEnvi=1
LOOP #%QEnvi%=%QEnvi%,
{* MSTR SEnvi=<%QEnvi%>%ScanDir%
FIND $%SEnvi%=,EXIT LOOP!CALC #QEnvi=%QEnvi%+1
FORX @\%SEnvi%,TEnvi,0,
{* FORX* %ScanTyp%,DEnvi,
{* ENVI SCAN=FORX /S:%ScanDpt% %TEnvi%\*.%DEnvi%
%SCAN%,XEnvi,0,TEAM FNAM NEnvi=%XEnvi%|LINK %PathLNK%\%NEnvi%,%XEnvi%
}}}
-----------------------------------------------------------------------------------------
Количество путей и количество расширений не ограничено. Как, при желании, и глубина сканирования. Главное - не перестараться, чтобы не было "всё небо в попугаях" (рабочий стол).
-Предлагаю все обсуждения вести в этой теме, а тут постить только готовые скрипты.

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

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

    [+] [-]
Пример подсказки (более компактный)
win
_SUB win,W300H200
  ITEM k1,L20T20W100H30,88,TEAM *| MESS 123
      ENVI @k1.MSG=0x02A1: CALL m , подсказка
      ENVI @k1.MSG=0x02A3: TIPS -
  ITEM k2,L140T20W100H30,99,*
      ENVI @k2.MSG=0x02A1: CALL m , 123456789
      ENVI @k2.MSG=0x02A3: TIPS -
  LABE st,L20T120W128H48,Подсказка,*
      ENVI @st.MSG=0x02A1: CALL m , abcde
      ENVI @st.MSG=0x02A3: TIPS -
_END
_SUB m
     ENVI @@Cur=?&x;&y
   ^TIPS %*,100000,0,@AL%&x%T%&y%
_END


Последний раз редактировалось: avalat (2021-07-16 23:29), всего редактировалось 3 раз(а)

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

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

    [+] [-]
Левый и правый клик по кнопке
win
_SUB win,W300H200
  ITEM k1,L30T20W100H30,Кнопка 1,mess Левый клик
    ENVI @k1.MSG=0x0204: MESS Правый клик
  ITEM k2,L165T20W100H30,Кнопка 2,ENVI @st= Левый клик
    ENVI @k2.MSG=0x0204: ENVI @st= Правый клик
    ENVI @k2.MSG=0x02A3: ENVI @st=
  LABE st,L90T120W128H30,,,,15
_END

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

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

    [+] [-]
Кто то спрашивал про цветные кнопки...
Псевдокнопки
win
_SUB win,W300H200
  LABE+ -center s,L30T20W100H25,Кнопка 1,mess желтый,0x330B97#0x9AF8F4 ,15  // цвет текста#фона
  LABE+ -center s2,L165T20W100H25,Кнопка 2,mess зеленый,0xB2170A#0x9AF89A ,15
_END
Размеры шрифта и "кнопок" конечно придётся подбирать самому

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

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

    [+] [-]
Выплывающее меню на иконке в окне
&win
_SUB &win,W300H200,test,,,,,-nosysmenu
  IMAG im,L255T130W25H25,%systemroot%\explorer.exe#50,CALL @--popmenu m
_END
_SUB m
    MENU ,Справка,mess Справка
    MENU  ,Рабочий стол,EXEC $%desktop%
    MENU ,WinDir,EXEC $%windir%
    MENU -
    MENU ,О программе,mess OK
    MENU -
    MENU ,Выход,KILL \
_END

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

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

    [+] [-]
Координаты курсора мыши и перетаскиваемого окна
win
_SUB win,W400H300,,
call m
call n
_END
_SUB m
ENVI @@Cur =? x; y
ENVI @this.MSG=0x0200:m
ENVI @this=Курсор   %x%  %y%
_END
_SUB n
ENVI @this.MSG=0x0047:pp
_END
_SUB pp
ENVI @this.POS=?xx:yy
ENVI @this=Окно   %xx%  %yy%
_END

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

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

    [+] [-]
Пример оконного и контекстного меню

код

win
_SUB win,W364H212,Оконное меню,
MEMO*+ mem,L1T1W355H175,\nПример,,0x20,0x000000#0xFFFFFF,13
MENU -bar -sub m,Файл,
MENU -bar -sub mm,Правка,
MENU -bar -sub mm3,Вид,
ENVI @mem.MSG=0x0204:CALL@--popmenu mm
_END
_SUB m
MENU ,Открыть,call v
MENU ,Сохранить,,1
MENU -sub m1,Печать,
MENU -
MENU Menu14,Выход,KILL \
_END
_SUB m1
MENU ,Черно-белая,,1
MENU ,Цветная,,1
_END
_SUB mm
MENU ,Копировать,ENVI @mem.SENDMSG=0x0301
MENU ,Вставить,ENVI @mem.SENDMSG=0x0302
MENU ,Вырезать,ENVI @mem.SENDMSG=0x0303
MENU -
MENU ,Отменить,ENVI @mem.SENDMSG=0x0304
_END
_SUB mm3
MENU ,Перенос по словам,,1
MENU ,Настройки,MESS Настройки
_END
_SUB v
TEAM BROW bb,,,txt|READ %bb%,*,tx|ENVI @mem=%tx%
_END

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

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

    [+] [-]
Простенькая помогалка, как пример запуска из ресурса
В секции EXEDATA создать ресурс 100 и назначить его на mpress.exe. ( В Restorator-е можно просто перетащить на 100 )
win
_SUB win,W360H115,MPressGUI,,,,,-top
EDIT= ed,L10T10W326H20,"",,0x100,0x000000#0xDAF0F1
LABE ,L10T40W200H50, перетащите файл...\n старый сохраняется в *.exe.bak
  LABE+ -center,L236T40W100H27,MPress,CALL st,0xDAF0F1#0x5050C7,18
_END
_SUB st
SIZE s=%ed%
IFEX $%s%=0,TEAM MESS-icon  Файл не найден|ENVI @ed=|exit
EXEC* -wait --exe:#100 -b &V=!#100 -b  %ed%
MESS-icon   Файл упакован
_END

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

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

    [+] [-]
Пример поиска по трём буквам из "массива" <mass>
Буквы в любом месте - AcrobatPro -AmmyAdmin
Без учёта регистра

код

ENVI^ ENVIMode=1
win
_SUB win,W300H200,поиск,
EDIT ed,L25T25W55H30,,,,0x000000#0xDAF0F1,20
ITEM ,L25T75W150H30,Поиск,CALL f
_END
_SUB f
STRL str=%ed%
IFEX $%str%<>3,TEAM MESS-icon Три буквы |ENVI @ed=|EXIT
ENVI mass=ABBYY ac-10 AccountProfileFixer AccountTuner AcrobatPro ActStatus AddStore AdobeMasterCollection2020.torrent AdobeReader AdvancedBootMenu AdvancedIPScanner AdvEFSRecovery AdvOfficePassRecovery AdvPDFPassRecovery AdvUser AdwCleaner AdwCleaner6_XP Aida64 AirExplorerPortable AlReader2 AmmyAdmin AnVir AnyDesk AOMEIBackupper AOMEIPartAssist ASBenchmark AsTrustedInst AudioRecorder AusLogicsBoostSpeed AuslogicsDuplicateFileFinder AutoassignLetterFix AutoBackUp AutoCAD2020.torrent AutorunOrganizerPortable Autoruns AvastFree AVCLR AVTOOL Backuper BalancedPower Bandicam BatteryMonitor BatToExeConverter BCDBootGUI BeyondComparePortable BIOSCodes BitLockerOff BitLockerTE BOOTICE BootSectGui BSPlayerPRO BurnInTest
FORX* %mass%,k,
ENVI i=1
LOOP %i%<%k%,
{
MSTR s=<%i%>%mass%
ENVI ut3=LPOS a=%ed%,,%s%
%ut3%
IFEX $%a%>0,MESS %s%
CALC i=%i%+1
}
_END

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


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

Текущее время: 15-Дек 18:36

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


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