Forum

Пожалуйста or Регистрация для создания сообщений и тем.

Сохранение и восстановление настроек System Tray

Page 1 of 3Next

Всем доброго дня!

Вступление

Начну с того, что я давно мучаюсь с одной проблемой и не один раз писал об этом на форуме, но решения всё как-то не было. Наконец-то я сам со всем справился и готов предложить форумчанам на суд своё решение проблемы бэкапа настроек СкопированоSystem Tray (СкопированоSystem Notification Area).

У меня на компьютере иногда происходит баг, который приводит к тому, что положение иконок в системном трее слетает и они все начинают скрываться в специальную область. Это очень раздражает, потому что я люблю порядок и когда настроено по моему вкусу, то есть что-то скрыто, а что-то отображается. Когда такое произошло пару раз, я начал искать решение данной проблемы. Это было очень сложно, так как в интернете нигде нет готового ответа, а Microsoft не даёт никакой документации по работе с этой областью ОС.


Постановка задачи

Создать решение, которое позволило бы запоминать (делать BackUp) положение иконок в системном трее и восстанавливать его при сбоях.


Решение
Первой проблемой было найти, где хранятся эти самые настройки. В интернете это есть, но очень неявно и без подробностей. Плюс, если использовать как есть, то ничего не выходит и начинает казаться, что метод ошибочен.

Вторая проблема — это поиск той самой ошибки, которая не даёт получить нужный результат. Ошибка заключается в том, что перед применением настроек НЕОБХОДИМО убить процесс explorer.exe , иначе настройки просто не применяются.

Третья и последняя часть — это оформление всего в единый скрипт. Самая простая часть.

Вот результат:

Исходный код скрипта

@ECHO off
color 0B
mode con:cols=100 lines=15
echo ##############################################
echo ##################System Tray#################
echo ##############################################
Timeout /t 1
:start
ECHO.
ECHO 1. Back up
ECHO 2. Restore
ECHO 3. Exit
set /p choice=Введите номер, чтобы выполнить команду.
if '%choice%'=='' ECHO "%choice%"  не является допустимым вариантом, попробуйте снова
if '%choice%'=='1' goto Backup
if '%choice%'=='2' goto Restore
if '%choice%'=='3' goto Exit
ECHO.
goto start
:Backup
ECHO Backup
regedit.exe -ea "%CD%\TraySettings.reg" "HKEY_CURRENT_USER\SOFTWARE\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify"
goto end
:Restore
ECHO Restore
Taskkill /f /im explorer.exe
regedit /s "%CD%\TraySettings.reg"
start explorer.exe
goto end
:Exit
ECHO EXIT
goto end
:end
exit

Файл может делать три вещи:

  1. Бэкап ваших настроек.
  2. Восстановление из созданного бэкапа (внимание бэкап создаётся в той же папке, в которой лежит наш скрипт.
  3. Выход из скрипта.

Надеюсь, что моё решение кому-то поможет. В любом случае, делал для себя, просто решил поделиться.
Ссылка на файл

Удаленный пользователь, Удаленный пользователь и ещё 4 отреагировали на эту запись.
Удаленный пользовательУдаленный пользовательУдаленный пользовательУдаленный пользовательУдаленный пользовательУдаленный пользователь

Добрый🖐.
Спасибо👍, позже посмотрю что да как, тоже страдаю такой проблемой, но быстро на все забиваю и не стал копаться.)

Цитата: Cronos от 13.02.2022, 14:16

Всем доброго дня!

Вступление

Начну с того, что я давно мучаюсь с одной проблемой и не один раз писал об этом на форуме, но решения всё как-то не было. Наконец-то я сам со всем справился и готов предложить форумчанам на суд своё решение проблемы бэкапа настроек СкопированоSystem Tray (СкопированоSystem Notification Area).

У меня на компьютере иногда происходит баг, который приводит к тому, что положение иконок в системном трее слетает и они все начинают скрываться в специальную область. Это очень раздражает, потому что я люблю порядок и когда настроено по моему вкусу, то есть что-то скрыто, а что-то отображается. Когда такое произошло пару раз, я начал искать решение данной проблемы. Это было очень сложно, так как в интернете нигде нет готового ответа, а Microsoft не даёт никакой документации по работе с этой областью ОС.


Постановка задачи

Создать решение, которое позволило бы запоминать (делать BackUp) положение иконок в системном трее и восстанавливать его при сбоях.


Решение
Первой проблемой было найти, где хранятся эти самые настройки. В интернете это есть, но очень неявно и без подробностей. Плюс, если использовать как есть, то ничего не выходит и начинает казаться, что метод ошибочен.

Вторая проблема — это поиск той самой ошибки, которая не даёт получить нужный результат. Ошибка заключается в том, что перед применением настроек НЕОБХОДИМО убить процесс explorer.exe , иначе настройки просто не применяются.

Третья и последняя часть — это оформление всего в единый скрипт. Самая простая часть.

Вот результат:

Исходный код скрипта

 
 
 
 
@ECHO off
color 0B
mode con:cols=100 lines=15
echo ##############################################
echo ##################System Tray#################
echo ##############################################
Timeout /t 1
:start
ECHO.
ECHO 1. Back up
ECHO 2. Restore
ECHO 3. Exit
set /p choice=Введите номер, чтобы выполнить команду.
if '%choice%'=='' ECHO "%choice%" не является допустимым вариантом, попробуйте снова
if '%choice%'=='1' goto Backup
if '%choice%'=='2' goto Restore
if '%choice%'=='3' goto Exit
ECHO.
goto start
:Backup
ECHO Backup
regedit.exe -ea "%CD%\TraySettings.reg" "HKEY_CURRENT_USER\SOFTWARE\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify"
goto end
:Restore
ECHO Restore
Taskkill /f /im explorer.exe
regedit /s "%CD%\TraySettings.reg"
start explorer.exe
goto end
:Exit
ECHO EXIT
goto end
:end
exit
@ECHO off color 0B mode con:cols=100 lines=15 echo ############################################## echo ##################System Tray################# echo ############################################## Timeout /t 1 :start ECHO. ECHO 1. Back up ECHO 2. Restore ECHO 3. Exit set /p choice=Введите номер, чтобы выполнить команду. if '%choice%'=='' ECHO "%choice%" не является допустимым вариантом, попробуйте снова if '%choice%'=='1' goto Backup if '%choice%'=='2' goto Restore if '%choice%'=='3' goto Exit ECHO. goto start :Backup ECHO Backup regedit.exe -ea "%CD%\TraySettings.reg" "HKEY_CURRENT_USER\SOFTWARE\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify" goto end :Restore ECHO Restore Taskkill /f /im explorer.exe regedit /s "%CD%\TraySettings.reg" start explorer.exe goto end :Exit ECHO EXIT goto end :end exit
 
@ECHO off
color 0B
mode con:cols=100 lines=15
echo ##############################################
echo ##################System Tray#################
echo ##############################################
Timeout /t 1
:start
ECHO.
ECHO 1. Back up
ECHO 2. Restore
ECHO 3. Exit
set /p choice=Введите номер, чтобы выполнить команду.
if '%choice%'=='' ECHO "%choice%"  не является допустимым вариантом, попробуйте снова
if '%choice%'=='1' goto Backup
if '%choice%'=='2' goto Restore
if '%choice%'=='3' goto Exit
ECHO.
goto start
:Backup
ECHO Backup
regedit.exe -ea "%CD%\TraySettings.reg" "HKEY_CURRENT_USER\SOFTWARE\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify"
goto end
:Restore
ECHO Restore
Taskkill /f /im explorer.exe
regedit /s "%CD%\TraySettings.reg"
start explorer.exe
goto end
:Exit
ECHO EXIT
goto end
:end
exit

Файл может делать три вещи:

  1. Бэкап ваших настроек.
  2. Восстановление из созданного бэкапа (внимание бэкап создаётся в той же папке, в которой лежит наш скрипт.
  3. Выход из скрипта.

Надеюсь, что моё решение кому-то поможет. В любом случае, делал для себя, просто решил поделиться.
Ссылка на файл

Добрый день
Ваш код конечно супер!!!
Но вы забыли добавить chcp 1251 >nul в начало файла чтобы отображались русские буквы.
И ещё, зачем вы добавили задержку на 1 секунду в начале скрипта?

Добрый день. 

Вы, конечно, правы. Но у меня всегда какая-то ж... с этой функцией, то забуду добавить, то не так сработает. Щас попробовал вставить в начало батника и оно крокозябры рисует. Короче, я обычно, пишу в СкопированоSublime Text и там выставляю нужную кодировку, поэтому у меня отображается как надо. Забыл упомянуть про это в изначальном посте. 

Ни за чем 🙂 это остаток от тестирования 🙂 По-сути, оно там не нужно. Все замечания валидны. Спасибо. 

p.s. Потом переделал с Скопированоchcp 1251 >nul и в этот раз получилось. Всегда какие-то баги с этой кодировкой.

Cronos, Добрый день.

Код супер, но у меня крокозябры в окне. Куда добавить код, чтобы крокозябров не было?
Или в какой-то кодировке сохранить cmd? Ссылка в топике не рабочая кстати, поэтому ручками создавал файл. 

Цитата: Андрей от 01.06.2022, 16:25

Cronos, Добрый день.

Код супер, но у меня крокозябры в окне. Куда добавить код, чтобы крокозябров не было?
Или в какой-то кодировке сохранить cmd? Ссылка в топике не рабочая кстати, поэтому ручками создавал файл. 

Добрый день.
Ну или файл пересохранить в cp866 в любом нормальном текстовом редакторе поддерживаемом кодировки (VS Code, AkelPad, Notepad++ и т.д.) или в начало файла вписать Скопированоchcp 1251 >nul если сохранять файл блокнотом.

Привет.
В самую первую строку Скопированоchcp 65001

День добрый, Андрей.
Или, как вариант, сохранить в кодировке OEM-866 (notepad++ это умеет).

Спасибо, прописал в первую строку и нормально стало.

Цитата: Яр от 01.06.2022, 16:33

День добрый, Андрей.
Или, как вариант, сохранить в кодировке OEM-866 (notepad++ это умеет).

А как?
Захожу в кодировки, выбираю любую, но сохранить это не дает, кнопка сохранения не активна, т.е. Notepad++ это за изменения не считает. 
Это надо менять кодировку, что-то менять в самом тексте, хоть формально, а потом сохранять? 
Просто который раз пытаюсь с этим разобраться, но пока не критично было. 

Page 1 of 3Next