![]() |
Помогите грамотно записать батник применение темы в Seven
Есть вот такой скрипт применения темы в Seven:
Код:
rundll32.exe %SystemRoot%\system32\shell32.dll,Control_RunDLL %SystemRoot%\system32\desk.cpl desk,@Themes /Action:OpenTheme /file:"%SystemRoot%\Resources\themes\Aero.theme" Код:
ping -n 10 127.0.0.1 > NUL Код:
start /wait rundll32.exe %SystemRoot%\system32\shell32.dll,Control_RunDLL %SystemRoot%\system32\desk.cpl desk,@Themes /Action:OpenTheme /file:"%SystemRoot%\Resources\themes\Aero.theme" |
Может во время запуска исходного батника посмотреть какой процесс появляется на доли секунд. Его исчезновение и надо отслеживать по "TaskList"
(т.е. "неграмотность" исходного скрипта заключается в том, что нет точной инфы, сколько времени требуется панели инструментов на применение темы - от долей секунд - до нескольких секунд - такое тоже может случиться) |
Цитата:
Цитата:
Цитата:
|
1. Делаем "сканер", запускаем в отдельном CMD, желательно назначив ему высокий приоритет
@echo off :Loop echo === %time%>>%~dpn0.log TaskList >>%~dpn0.log goto :Loop сканер будет бесконечно крутиться и надеюсь несколько раз в секунду сохранять список процессов в одноименный лог-файл. По нормальному завершению исходного, работающего скрипта смены темы останавливаем "сканер" (Ctrl+Break). 2. Анализируем лог-файл, возможно кроме Control.exe будет еще что-то. Ищем их отличительные особенности (лучше, если это уникальное имя файла). Если наблюдаются совпадения с уже имеющимися в памяти, то увеличиваем кол-во инфы в сканере "TaskList /V" - дополнительная инфа может быть (в конечном скрипте) отсяна по фильтру, например на совпадение названия "окна": TaskList /FI "WindowTitle eq Название окна"... 3. В итоге строки ожидания вместо пинга будет выглядить так: :Loop for /f "tokens=1" %%F in ('tasklist^|find /c "Control.exe"') do if not "%%F"=="0" GotTo :Loop * здесь для прмера ожидается окончание выполнения файла "Control.exe" - его кол-во в оперативке должно стать равным нулю. |
Цитата:
|
А разве тему нельзя применить просто так:
Код:
Start /wait "" "%SystemRoot%\Resources\themes\Aero.theme" |
2seriych: зя ;)!. Но, если посмотреть в реестр, то пройдя по пути «HKCR\.theme\(Default)» --> «HKCR\themefile\shell\open\command\(Default)» — придём в аккурат к указанному в первом посте темы:
Код:
%SystemRoot%\system32\rundll32.exe %SystemRoot%\system32\shell32.dll,Control_RunDLL %SystemRoot%\system32\desk.cpl desk,@Themes /Action:OpenTheme /file:"%1" |
NiOl, отследил процессы. Их три: conhost.exe, dllhost.exe, rundll32.exe
По вашему методу должно быть так: Код:
rundll32.exe %SystemRoot%\system32\shell32.dll,Control_RunDLL %SystemRoot%\system32\desk.cpl desk,@Themes /Action:OpenTheme /file:"%SystemRoot%\Resources\themes\Spring WD.theme" Нашел другой метод (по сути тот же): Скрипт: Код:
rundll32.exe %SystemRoot%\system32\shell32.dll,Control_RunDLL %SystemRoot%\system32\desk.cpl desk,@Themes /Action:OpenTheme /file:"%SystemRoot%\Resources\themes\Spring WD.theme" Код:
Set objService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\CIMV2") |
Pozia А принципиально в CMD? В AutoIt'е не подойдет?
Код:
$theme = "Aero" |
Цитата:
|
Извини , неправильно скопировал код. Подправил , сейчас должно работать.
|
Bodya.N, работает. Еще бы доработать скрипт чтобы окно Персонализации закрывалось. Перезагрузкой explorer проще всего, но может как нить хитрее можно? Без перезагрузки?
|
Да можно ...
Код:
#NoTrayIcon |
Bodya.N, а подскажите как скрыть окно персонализации? Чтобы оно запускалось скрытым или после запуска сразу же скрывалось?
|
Pozia
Код:
WinWait($title, "", 10) |
Скажите, а кто-нибудь решал проблему удаления тем из командной строки?
|
Кто то мне подкинул автоит скрипт, который применяет любую тему при запуске его из командной строки типа:
Код:
ThemeApply.exe "New Look Dark WD" |
Подскажите, пожалуйста, нельзя ли как-то автоматически закрывать "Персонализацию" после применения темы?
Autoit ставить не очень хочется, неужели этого нет в стандартных возможностях cmd? Я внимательно изучил эту тему (я мало что понимаю в управлении командной строкой), подскажите, пожалуйста, как дописать батник на автозакрытие персонализации? Спасибо! |
Цитата:
|
|
Цитата:
|
лирическое отступление - cmd был придуман когда windows | deskstop | windows stations не было даже в проекте вот неумеет он ничо
во vbscript - кто умеет превести на js пожта Код:
Dim objShell: Set objShell = WScript.CreateObject("WScript.Shell") |
Цитата:
Но распаковать .ехе, чтоб вытащить конкретно скрипт не получилось... Приходится пользоваться так. (Да простит меня Сергей...) |
Время: 05:55. |
Время: 05:55.
© OSzone.net 2001-