Сохранение и восстановление настроек System Tray
Цитата: Удаленный пользователь от 13.02.2022, 14:16Всем доброго дня!
Вступление
Начну с того, что я давно мучаюсь с одной проблемой и не один раз писал об этом на форуме, но решения всё как-то не было. Наконец-то я сам со всем справился и готов предложить форумчанам на суд своё решение проблемы бэкапа настроек
System Tray(System Notification Area).У меня на компьютере иногда происходит баг, который приводит к тому, что положение иконок в системном трее слетает и они все начинают скрываться в специальную область. Это очень раздражает, потому что я люблю порядок и когда настроено по моему вкусу, то есть что-то скрыто, а что-то отображается. Когда такое произошло пару раз, я начал искать решение данной проблемы. Это было очень сложно, так как в интернете нигде нет готового ответа, а Microsoft не даёт никакой документации по работе с этой областью ОС.
Постановка задачи
Создать решение, которое позволило бы запоминать (делать BackUp) положение иконок в системном трее и восстанавливать его при сбоях.
Решение
Первой проблемой было найти, где хранятся эти самые настройки. В интернете это есть, но очень неявно и без подробностей. Плюс, если использовать как есть, то ничего не выходит и начинает казаться, что метод ошибочен.Вторая проблема — это поиск той самой ошибки, которая не даёт получить нужный результат. Ошибка заключается в том, что перед применением настроек НЕОБХОДИМО убить процесс explorer.exe , иначе настройки просто не применяются.
Третья и последняя часть — это оформление всего в единый скрипт. Самая простая часть.
Вот результат:
[spoiler title="Исходный код скрипта"]@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[/spoiler]
Файл может делать три вещи:
- Бэкап ваших настроек.
- Восстановление из созданного бэкапа (внимание бэкап создаётся в той же папке, в которой лежит наш скрипт.
- Выход из скрипта.
Надеюсь, что моё решение кому-то поможет. В любом случае, делал для себя, просто решил поделиться.
Ссылка на файл
Всем доброго дня!
Вступление
Начну с того, что я давно мучаюсь с одной проблемой и не один раз писал об этом на форуме, но решения всё как-то не было. Наконец-то я сам со всем справился и готов предложить форумчанам на суд своё решение проблемы бэкапа настроек Скопировано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
Файл может делать три вещи:
- Бэкап ваших настроек.
- Восстановление из созданного бэкапа (внимание бэкап создаётся в той же папке, в которой лежит наш скрипт.
- Выход из скрипта.
Надеюсь, что моё решение кому-то поможет. В любом случае, делал для себя, просто решил поделиться.
Ссылка на файл
Цитата: Удаленный пользователь от 13.02.2022, 14:30Добрый🖐.
Спасибо👍, позже посмотрю что да как, тоже страдаю такой проблемой, но быстро на все забиваю и не стал копаться.)
Добрый🖐.
Спасибо👍, позже посмотрю что да как, тоже страдаю такой проблемой, но быстро на все забиваю и не стал копаться.)
Цитата: Удаленный пользователь от 29.05.2022, 12:50Цитата: Cronos от 13.02.2022, 14:16Всем доброго дня!
Вступление
Начну с того, что я давно мучаюсь с одной проблемой и не один раз писал об этом на форуме, но решения всё как-то не было. Наконец-то я сам со всем справился и готов предложить форумчанам на суд своё решение проблемы бэкапа настроек
System Tray(System Notification Area).У меня на компьютере иногда происходит баг, который приводит к тому, что положение иконок в системном трее слетает и они все начинают скрываться в специальную область. Это очень раздражает, потому что я люблю порядок и когда настроено по моему вкусу, то есть что-то скрыто, а что-то отображается. Когда такое произошло пару раз, я начал искать решение данной проблемы. Это было очень сложно, так как в интернете нигде нет готового ответа, а Microsoft не даёт никакой документации по работе с этой областью ОС.
Постановка задачи
Создать решение, которое позволило бы запоминать (делать BackUp) положение иконок в системном трее и восстанавливать его при сбоях.
Решение
Первой проблемой было найти, где хранятся эти самые настройки. В интернете это есть, но очень неявно и без подробностей. Плюс, если использовать как есть, то ничего не выходит и начинает казаться, что метод ошибочен.Вторая проблема — это поиск той самой ошибки, которая не даёт получить нужный результат. Ошибка заключается в том, что перед применением настроек НЕОБХОДИМО убить процесс explorer.exe , иначе настройки просто не применяются.
Третья и последняя часть — это оформление всего в единый скрипт. Самая простая часть.
Вот результат:
[spoiler title="Исходный код скрипта"]@ECHO offcolor 0Bmode con:cols=100 lines=15echo ##############################################echo ##################System Tray#################echo ##############################################Timeout /t 1:startECHO.ECHO 1. Back upECHO 2. RestoreECHO 3. Exitset /p choice=Введите номер, чтобы выполнить команду.if '%choice%'=='' ECHO "%choice%" не является допустимым вариантом, попробуйте сноваif '%choice%'=='1' goto Backupif '%choice%'=='2' goto Restoreif '%choice%'=='3' goto ExitECHO.goto start:BackupECHO Backupregedit.exe -ea "%CD%\TraySettings.reg" "HKEY_CURRENT_USER\SOFTWARE\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify"goto end:RestoreECHO RestoreTaskkill /f /im explorer.exeregedit /s "%CD%\TraySettings.reg"start explorer.exegoto end:ExitECHO EXITgoto end:endexit@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[/spoiler]
Файл может делать три вещи:
- Бэкап ваших настроек.
- Восстановление из созданного бэкапа (внимание бэкап создаётся в той же папке, в которой лежит наш скрипт.
- Выход из скрипта.
Надеюсь, что моё решение кому-то поможет. В любом случае, делал для себя, просто решил поделиться.
Ссылка на файлДобрый день
Ваш код конечно супер!!!
Но вы забыли добавить chcp 1251 >nul в начало файла чтобы отображались русские буквы.
И ещё, зачем вы добавили задержку на 1 секунду в начале скрипта?
Цитата: Cronos от 13.02.2022, 14:16Всем доброго дня!
Вступление
Начну с того, что я давно мучаюсь с одной проблемой и не один раз писал об этом на форуме, но решения всё как-то не было. Наконец-то я сам со всем справился и готов предложить форумчанам на суд своё решение проблемы бэкапа настроек
СкопированоSystem Tray(СкопированоSystem Notification Area).У меня на компьютере иногда происходит баг, который приводит к тому, что положение иконок в системном трее слетает и они все начинают скрываться в специальную область. Это очень раздражает, потому что я люблю порядок и когда настроено по моему вкусу, то есть что-то скрыто, а что-то отображается. Когда такое произошло пару раз, я начал искать решение данной проблемы. Это было очень сложно, так как в интернете нигде нет готового ответа, а Microsoft не даёт никакой документации по работе с этой областью ОС.
Постановка задачи
Создать решение, которое позволило бы запоминать (делать BackUp) положение иконок в системном трее и восстанавливать его при сбоях.
Решение
Первой проблемой было найти, где хранятся эти самые настройки. В интернете это есть, но очень неявно и без подробностей. Плюс, если использовать как есть, то ничего не выходит и начинает казаться, что метод ошибочен.Вторая проблема — это поиск той самой ошибки, которая не даёт получить нужный результат. Ошибка заключается в том, что перед применением настроек НЕОБХОДИМО убить процесс explorer.exe , иначе настройки просто не применяются.
Третья и последняя часть — это оформление всего в единый скрипт. Самая простая часть.
Вот результат:
Исходный код скрипта@ECHO offcolor 0Bmode con:cols=100 lines=15echo ##############################################echo ##################System Tray#################echo ##############################################Timeout /t 1:startECHO.ECHO 1. Back upECHO 2. RestoreECHO 3. Exitset /p choice=Введите номер, чтобы выполнить команду.if '%choice%'=='' ECHO "%choice%" не является допустимым вариантом, попробуйте сноваif '%choice%'=='1' goto Backupif '%choice%'=='2' goto Restoreif '%choice%'=='3' goto ExitECHO.goto start:BackupECHO Backupregedit.exe -ea "%CD%\TraySettings.reg" "HKEY_CURRENT_USER\SOFTWARE\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify"goto end:RestoreECHO RestoreTaskkill /f /im explorer.exeregedit /s "%CD%\TraySettings.reg"start explorer.exegoto end:ExitECHO EXITgoto end:endexit@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Файл может делать три вещи:
- Бэкап ваших настроек.
- Восстановление из созданного бэкапа (внимание бэкап создаётся в той же папке, в которой лежит наш скрипт.
- Выход из скрипта.
Надеюсь, что моё решение кому-то поможет. В любом случае, делал для себя, просто решил поделиться.
Ссылка на файл
Добрый день
Ваш код конечно супер!!!
Но вы забыли добавить chcp 1251 >nul в начало файла чтобы отображались русские буквы.
И ещё, зачем вы добавили задержку на 1 секунду в начале скрипта?
Цитата: Удаленный пользователь от 30.05.2022, 00:56Добрый день.
Вы, конечно, правы. Но у меня всегда какая-то ж... с этой функцией, то забуду добавить, то не так сработает. Щас попробовал вставить в начало батника и оно крокозябры рисует. Короче, я обычно, пишу в
Sublime Textи там выставляю нужную кодировку, поэтому у меня отображается как надо. Забыл упомянуть про это в изначальном посте.Ни за чем 🙂 это остаток от тестирования 🙂 По-сути, оно там не нужно. Все замечания валидны. Спасибо.
p.s. Потом переделал с
chcp 1251 >nulи в этот раз получилось. Всегда какие-то баги с этой кодировкой.
Добрый день.
Вы, конечно, правы. Но у меня всегда какая-то ж... с этой функцией, то забуду добавить, то не так сработает. Щас попробовал вставить в начало батника и оно крокозябры рисует. Короче, я обычно, пишу в СкопированоSublime Text и там выставляю нужную кодировку, поэтому у меня отображается как надо. Забыл упомянуть про это в изначальном посте.
Ни за чем 🙂 это остаток от тестирования 🙂 По-сути, оно там не нужно. Все замечания валидны. Спасибо.
p.s. Потом переделал с Скопированоchcp 1251 >nul и в этот раз получилось. Всегда какие-то баги с этой кодировкой.
Цитата: Удаленный пользователь от 01.06.2022, 16:25Cronos, Добрый день.
Код супер, но у меня крокозябры в окне. Куда добавить код, чтобы крокозябров не было?
Или в какой-то кодировке сохранить cmd? Ссылка в топике не рабочая кстати, поэтому ручками создавал файл.
Cronos, Добрый день.
Код супер, но у меня крокозябры в окне. Куда добавить код, чтобы крокозябров не было?
Или в какой-то кодировке сохранить cmd? Ссылка в топике не рабочая кстати, поэтому ручками создавал файл.
Цитата: Удаленный пользователь от 01.06.2022, 16:30Цитата: Андрей от 01.06.2022, 16:25Cronos, Добрый день.
Код супер, но у меня крокозябры в окне. Куда добавить код, чтобы крокозябров не было?
Или в какой-то кодировке сохранить cmd? Ссылка в топике не рабочая кстати, поэтому ручками создавал файл.Добрый день.
Ну или файл пересохранить в cp866 в любом нормальном текстовом редакторе поддерживаемом кодировки (VS Code, AkelPad, Notepad++ и т.д.) или в начало файла вписатьchcp 1251 >nulесли сохранять файл блокнотом.
Цитата: Андрей от 01.06.2022, 16:25Cronos, Добрый день.
Код супер, но у меня крокозябры в окне. Куда добавить код, чтобы крокозябров не было?
Или в какой-то кодировке сохранить cmd? Ссылка в топике не рабочая кстати, поэтому ручками создавал файл.
Добрый день.
Ну или файл пересохранить в cp866 в любом нормальном текстовом редакторе поддерживаемом кодировки (VS Code, AkelPad, Notepad++ и т.д.) или в начало файла вписать Скопированоchcp 1251 >nul если сохранять файл блокнотом.
Цитата: Удаленный пользователь от 01.06.2022, 16:30Привет.
В самую первую строкуchcp 65001
Привет.
В самую первую строку Скопированоchcp 65001
Цитата: Удаленный пользователь от 01.06.2022, 16:33День добрый, Андрей.
Или, как вариант, сохранить в кодировке OEM-866 (notepad++ это умеет).
День добрый, Андрей.
Или, как вариант, сохранить в кодировке OEM-866 (notepad++ это умеет).
Цитата: Удаленный пользователь от 01.06.2022, 16:34Спасибо, прописал в первую строку и нормально стало.
Спасибо, прописал в первую строку и нормально стало.
Цитата: Удаленный пользователь от 01.06.2022, 16:36Цитата: Яр от 01.06.2022, 16:33День добрый, Андрей.
Или, как вариант, сохранить в кодировке OEM-866 (notepad++ это умеет).А как?
Захожу в кодировки, выбираю любую, но сохранить это не дает, кнопка сохранения не активна, т.е. Notepad++ это за изменения не считает.
Это надо менять кодировку, что-то менять в самом тексте, хоть формально, а потом сохранять?
Просто который раз пытаюсь с этим разобраться, но пока не критично было.
Цитата: Яр от 01.06.2022, 16:33День добрый, Андрей.
Или, как вариант, сохранить в кодировке OEM-866 (notepad++ это умеет).
А как?
Захожу в кодировки, выбираю любую, но сохранить это не дает, кнопка сохранения не активна, т.е. Notepad++ это за изменения не считает.
Это надо менять кодировку, что-то менять в самом тексте, хоть формально, а потом сохранять?
Просто который раз пытаюсь с этим разобраться, но пока не критично было.