![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Помогите грамотно записать батник применение темы в Seven |
|
|
CMD/BAT - [решено] Помогите грамотно записать батник применение темы в Seven
|
Ветеран Сообщения: 2756 |
Есть вот такой скрипт применения темы в 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 taskkill /im explorer.exe /F start explorer.exe но не работает. Может как не правильно оформил? Помогите пожалуйста. |
|
------- Отправлено: 22:22, 31-10-2010 |
Старожил Сообщения: 426
|
Профиль | Отправить PM | Цитировать Может во время запуска исходного батника посмотреть какой процесс появляется на доли секунд. Его исчезновение и надо отслеживать по "TaskList"
(т.е. "неграмотность" исходного скрипта заключается в том, что нет точной инфы, сколько времени требуется панели инструментов на применение темы - от долей секунд - до нескольких секунд - такое тоже может случиться) |
------- Отправлено: 18:38, 01-11-2010 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 2756
|
Профиль | Отправить PM | Цитировать Цитата NiOl:
Цитата NiOl:
Цитата NiOl:
|
|||
------- Отправлено: 19:21, 01-11-2010 | #3 |
Старожил Сообщения: 426
|
Профиль | Отправить PM | Цитировать 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" - его кол-во в оперативке должно стать равным нулю. |
------- Отправлено: 19:39, 01-11-2010 | #4 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Pozia:
|
||
Отправлено: 19:42, 01-11-2010 | #5 |
Старожил Сообщения: 182
|
Профиль | Отправить PM | Цитировать |
------- Отправлено: 13:02, 02-11-2010 | #6 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать 2seriych: зя
![]() |
Отправлено: 15:15, 02-11-2010 | #7 |
Ветеран Сообщения: 2756
|
Профиль | Отправить PM | Цитировать 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" :Loop for /f "tokens=1" %%F in ('tasklist^|find /c "conhost.exe"') do if not "%%F"=="0" GotTo :Loop taskkill /im explorer.exe /F start explorer.exe exit Нашел другой метод (по сути тот же): Скрипт: rundll32.exe %SystemRoot%\system32\shell32.dll,Control_RunDLL %SystemRoot%\system32\desk.cpl desk,@Themes /Action:OpenTheme /file:"%SystemRoot%\Resources\themes\Spring WD.theme" Sleep.vbs taskkill /im explorer.exe /F start explorer.exe exit Set objService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\CIMV2") Set objRefresher = CreateObject("WbemScripting.SWbemRefresher") Set colItems = objRefresher.AddEnum(objService, "Win32_Process").objectSet Do Until False Wscript.Sleep 1000 objRefresher.Refresh Flag = True For Each objItem in colItems If InStr(objItem.ExecutablePath, "dllhost.exe") Then Flag = False End If Next If Flag = True Then Exit Do End If Loop Wscript.Sleep 5000 |
------- Отправлено: 19:27, 02-11-2010 | #8 |
Пользователь Сообщения: 106
|
Профиль | Отправить PM | Цитировать Pozia А принципиально в CMD? В AutoIt'е не подойдет?
$theme = "Aero" $title = "Свойства: Экран" If FileExists(@WindowsDir & "\Resources\Themes\" & $theme & ".theme") Then ShellExecute(@WindowsDir & "\Resources\Themes\" & $theme & ".theme") WinWait($title, "", 10) If WinExists($title) Then ControlClick($title, "", 1) Else MsgBox(16, 'Ошибка применения Темы', 'Тема "' & $theme & '" не обнаружена! ') EndIf |
Последний раз редактировалось Bodya.N, 02-11-2010 в 23:00. Отправлено: 20:45, 02-11-2010 | #9 |
Ветеран Сообщения: 2756
|
Профиль | Отправить PM | Цитировать Цитата Bodya.N:
|
|
------- Отправлено: 22:39, 02-11-2010 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Записать имя папки в которой лежит батник в переменную а потом эту же папку переим. | bobr95 | Скриптовые языки администрирования Windows | 8 | 10-04-2012 18:42 | |
Разное - [решено] Применение темы через BAT\CMD | Pozia | Оформление Windows 11/ 10 / 8 / 7 / Vista | 16 | 21-04-2011 22:03 | |
Прочее - [решено] нестандартное применение ADSL - модема --- помогите в решении | courageous | Сетевые технологии | 3 | 12-02-2010 20:43 | |
Прочее - Помогите грамотно построить-восстановить сеть | Vavcho | Сетевые технологии | 18 | 17-02-2009 13:04 | |
Помогите. Не работает батник!!! | MJR | Microsoft Windows 2000/XP | 6 | 01-02-2003 00:02 |
|