Требуется автоматический запуск рекламы на ноутбуках в магазине. около 60 ПК. Немного поправил сделанный моим предшественником бат файл, и добавил комментарии(не уверен в их правильности).
Суть в в следующем:
бат файл проверяет наличие старой рекламы на рабочем столе, создает свою схему питания чтобы компьютер не отключался и не уходил в сон, если рекламы есть и она устарела, удаляет ее и копирует новую.
Через запуск скринсивера проверяет наличие файла на рабочем столе раз в 10-60 сек. В случае отсутствия файла (например если продавец продал компьютер и удалил рекламу), откатывает схему питания на стандартную и удаляет все свои файлы, в случае наличия рекламы, запускает. все работало на 7 , но на десятке отказывается запускать рекламный файл через ключ хранителя экрана в реестре, скорее всего в 10 что-то изменили для большей безопасности (запускать через этот ключ требуется бат файл).На Windows 8 тоже не работает.
Скрипт@echo ON
rem включаем отображение информации в консоли
time
rem устанавливаем текущее время
SCHTASKS -f /Delete /tn "PC OFF"
rem удаляем старое задание на выключение
set /p ROHS
rem вводим переменную ROHS
powercfg -L | find /i /c "ROHS" > "%TMP%\ROHS.txt"
rem выводим список всек профилей питания
rem проверяем есть ли профиль ROHS? выводим результат в файл ROHS.txt в папке темп
set /p ROHS= < "%TMP%\ROHS.txt"
rem получаем информацию из файла
if %ROHS% == 0 (goto New) else (goto Next)
rem если профиль питания ROHS есть, переходим к следующему К :NEXT, если нет, то к :NEW.
:New
for /f "usebackq tokens=4" %%a in (`powercfg -GETACTIVESCHEME`) do (powercfg -DUPLICATESCHEME %%a > "%TMP%\ROHS.txt")
rem получаем инф. о текущей активной сехеме питания,дублируем ее, копируем схему в файл ROHS
for /f "usebackq tokens=4" %%b in ("%TMP%\ROHS.txt") do (powercfg -CHANGENAME %%b ROHS "ROHS" && echo %%b > "%TMP%\ROHS.txt")
rem изменяем имя и описание схемы управления питания на ROHS, выводим новую схему в файл
set /p ROHS= < "%TMP%\ROHS.txt"
powercfg -S %ROHS%
rem активируем схему питания ROHS
powercfg -SetAcValueIndex %ROHS% 7516b95f-f776-4464-8c53-06167f40cc99 17aaa29b-8b43-4b94-aafe-35f64daaf1ee 0
rem включает параметр адаптивной регулировки яркости(в виндовс 10 он не виден по умолчаниЮ, поэтому скорее всего не будет работать)
powercfg -SetAcValueIndex %ROHS% 7516b95f-f776-4464-8c53-06167f40cc99 aded5e82-b909-4619-9949-f5d71dac0bcb 100
rem выставляем яркость дислпея на 100
powercfg -SetAcValueIndex %ROHS% 4f971e89-eebd-4455-a8de-9e59040e7347 5ca83367-6e45-459f-a27b-476b1d01c936 100
rem отключаем действие крышки
powercfg -SetAcValueIndex %ROHS% 4f971e89-eebd-4455-a8de-9e59040e7347 7648efa3-dd9c-4e3e-b566-50f929386280 000
rem отключаем действие крышки
powercfg -CHANGE -monitor-timeout-ac 0
rem устанавливаем отключение монитора никогда
powercfg -CHANGE -standby-timeout-ac 0
rem устанавливаем переход в режим ожидания никогда
powercfg -CHANGE -hibernate-timeout-ac 0
rem устанавливаем значение параметра гибернация после - никогда
:Next
powercfg -L | find /i "ROHS" > "%TMP%\ROHS.txt"
rem выводим список всех схем электропитания в файл
for /f "usebackq tokens=4" %%c in ("%TMP%\ROHS.txt") do (powercfg -S %%c)
rem активируем схему питания ROHS
del "%USERPROFILE%\desktop\*scr*.exe"
rem удаляем с рабочего стола старый скрин
copy "%CD%\*scr*.exe" "%USERPROFILE%\desktop" > nul
rem копируем файл из каталога в котором находиться батникник на рабочий стола
reg query "HKCU\CONTROL PANEL\DESKTOP" /v scrNSAVE.EXE | find /i /c "start.bat" > "%TMP%\ROHS.txt"
rem запрашиваем параметры из ветки реестра десктоп, находим параметр start.bat, выводи из него в ROHS.txt (SCRNSAVE.EXE - расположение файла заставки)
set /p ROHS= < "%TMP%\ROHS.txt"
rem проверяем файл ROHS.txt
if %ROHS% == 0 (goto Createscr) else (goto Skip)
rem если значение в ROHS.txt =0 то переходим к :creatscr если нет, к :SKIP
:CreateScr
echo shutdown /H > %TMP%\shutdown.bat
rem создает файл shutdown.bat
reg add "HKCU\CONTROL PANEL\DESKTOP" /v ScreenSaveActive /d 1 /f > nul
rem присваиваем ScreenSaveActive значение 1 (ScreenSaveActive - включение (1) и отключение (0) скринсивера)
echo "%TMP%\start.bat" > "%TMP%\ROHS.txt"
rem записываем инфомарцию о расположение файла start.bat в ROHS.txt
set /p ROHS= < "%TMP%\ROHS.txt"
rem получаем инфор из ROHS.txt
reg add "HKCU\CONTROL PANEL\DESKTOP" /v SCRNSAVE.EXE /d %ROHS% /f > nul
rem записываем информацию в о расположении файла start.bat в ключ реестра SCRNSAVE.EXE
reg add "HKCU\CONTROL PANEL\DESKTOP" /v ScreenSaveTimeOut /d 60 /f > nul
rem устанавливаем занчение ScreenSaveTimeOut 60 сек.
echo cmd /c start ^"^" "%TMP%\!scr_autostarter.bat"^&^&exit > "%TMP%\start.bat"
rem запускаем cmd в свернутом режиме, выводим информациюю о расположении scr_autostarter.bat в start.bat
echo dir /b "%%USERPROFILE%%\desktop\*.exe" ^| find /i "scr" ^> "%%TMP%%\ROHS.txt" > "%TMP%\!scr_autostarter.bat"
rem проверяем рабочий стол на наличие exe файлов, находим файл с "scr" в имени, выводим информацию в ROHS.txt и в scr_autostarter
echo set /p ROHS= ^< "%%TMP%%\ROHS.txt" >> "%TMP%\!scr_autostarter.bat"
rem добавляем эту строку в scr_autostarter.bat далее записываем инф. в scr_autostarter
echo if NOT "%%USERPROFILE%%\desktop\%%ROHS%%" == "%%USERPROFILE%%\desktop\" ( >> "%TMP%\!scr_autostarter.bat"
echo start /wait "" "%%USERPROFILE%%\desktop\%%ROHS%%") else ( >> "%TMP%\!scr_autostarter.bat"
echo goto Delete) >> "%TMP%\!scr_autostarter.bat"
echo exit >> "%TMP%\!scr_autostarter.bat"
echo :Delete >> "%TMP%\!scr_autostarter.bat"
echo del "%%TMP%%\start.bat" >> "%TMP%\!scr_autostarter.bat"
echo reg delete "HKCU\CONTROL PANEL\DESKTOP" /v SCRNSAVE.EXE /f ^> nul >> "%TMP%\!scr_autostarter.bat"
echo reg delete "HKCU\CONTROL PANEL\DESKTOP" /v ScreenSaveTimeOut /f ^> nul >> "%TMP%\!scr_autostarter.bat"
echo powercfg -S 381b4222-f694-41f0-9685-ff5bb260df2e >> "%TMP%\!scr_autostarter.bat"
echo powercfg -L ^| find /i "ROHS" ^> "%%TMP%%\ROHS.txt" >> "%TMP%\!scr_autostarter.bat"
echo for /f "usebackq tokens=4" %%%%a in ("%%TMP%%\ROHS.txt") do (powercfg -D %%%%a) >> "%TMP%\!scr_autostarter.bat"
echo del "%TMP%\shutdown.bat" >> "%TMP%\!scr_autostarter.bat"
rem удаляем shutdown.bat
echo SCHTASKS -f /Delete /tn "PC OFF" >> "%TMP%\!scr_autostarter.bat"
rem удаляем задачу отключение ПК из планировщика задач
echo del "%%TMP%%\ROHS.txt" >> "%TMP%\!scr_autostarter.bat"
echo del "%%TMP%%\!scr_autostarter.bat"^&^&exit >> "%TMP%\!scr_autostarter.bat"
del "%%TMP%%\ROHS.txt"
rem shutdown -r -t 10
SCHTASKS /create /tn "PC OFF" /tr %temp%\shutdown.bat /SC DAILY /ST 22:00
rem создаем задачу которая будет запкускать shutdown.bat который вводит ПК в гибернацию
goto :EOF
:Skip
echo cmd /c start /min ^"^" "%%TMP%%\!scr_autostarter.bat"^&^&exit > "%TMP%\start.bat"
echo dir /b "%%USERPROFILE%%\desktop\*.exe" ^| find /i "scr" ^> "%%TMP%%\ROHS.txt" > "%TMP%\!scr_autostarter.bat"
echo set /p ROHS= ^< "%%TMP%%\ROHS.txt" >> "%TMP%\!scr_autostarter.bat"
echo if NOT "%%USERPROFILE%%\desktop\%%ROHS%%" == "%%USERPROFILE%%\desktop\" ( >> "%TMP%\!scr_autostarter.bat"
echo start /wait "" "%%USERPROFILE%%\desktop\%%ROHS%%") else ( >> "%TMP%\!scr_autostarter.bat"
echo goto Delete) >> "%TMP%\!scr_autostarter.bat"
echo exit >> "%TMP%\!scr_autostarter.bat"
echo :Delete >> "%TMP%\!scr_autostarter.bat"
echo del "%%TMP%%\start.bat" >> "%TMP%\!scr_autostarter.bat"
echo reg delete "HKCU\CONTROL PANEL\DESKTOP" /v SCRNSAVE.EXE /f ^> nul >> "%TMP%\!scr_autostarter.bat"
echo reg delete "HKCU\CONTROL PANEL\DESKTOP" /v ScreenSaveTimeOut /f ^> nul >> "%TMP%\!scr_autostarter.bat"
echo powercfg -S 381b4222-f694-41f0-9685-ff5bb260df2e >> "%TMP%\!scr_autostarter.bat"
echo powercfg -L ^| find /i "ROHS" ^> "%%TMP%%\ROHS.txt" >> "%TMP%\!scr_autostarter.bat"
echo for /f "usebackq tokens=4" %%%%a in ("%%TMP%%\ROHS.txt") do (powercfg -D %%%%a) >> "%TMP%\!scr_autostarter.bat"
echo del "%TMP%\shutdown.bat" >> "%TMP%\!scr_autostarter.bat"
rem удаляем shutdown.bat
echo SCHTASKS -f /Delete /tn "PC OFF" >> "%TMP%\!scr_autostarter.bat"
rem удаляем задачу отключение ПК из планировщика задач
echo del "%%TMP%%\ROHS.txt" >> "%TMP%\!scr_autostarter.bat"
echo del "%%TMP%%\!scr_autostarter.bat" >> "%TMP%\!scr_autostarter.bat"
echo exit >> "%TMP%\!scr_autostarter.bat"
del "%TMP%\ROHS.txt"
goto :EOF