Панели инструментов

Автор Харлампий Дымба, 22 января 2025, 13:57

« назад - далее »

Харлампий Дымба

Неловкие движения приводят к исчезновениям и ненужным перемещениям панелей инструментов у пользователей.
Есть какой-нибудь неручной способ восстанавливать им первоначальные настройки панелей при входе (перед входом, при выходе)?

Arbuz

Настройки панелей хранятся в разделе реестра
HKEY_CURRENT_USER\Software\1C\1Cv7\7.7\<НАЗВАНИЕ_БАЗЫ>\V7\<ИМЯ_ПОЛЬЗОВАТЕЛЯ>\ToolbarSystem
Можно (перед входом, при выходе) туда их (им/экс)портировать

Харлампий Дымба

Цитата: Arbuz от 22 января 2025, 14:43Можно (перед входом, при выходе) туда их (им/экс)портировать
Может быть есть рабочий пример?
Я держу в уме, что так можно. Но надо экспериментировать - если из 1с в реестр писать, то возможно при входе она уже успеет считать старые состояния. И аналогично при выходе - затрёт правильные устанавливаемые состояния своими неправильными.
Тогда возможно придётся писать какой-то vbs-скрипт под запуск 1с.

Я подумал, может кто уже делал подобное и есть ещё более изящное решение. Может formex умеет, а я как обычно, не знаю.



Arbuz

Можно ещё установить разрешения на этот раздел реестра запрещающие его изменения (задание значения и удаление) и тогда они будут неизменны.

Харлампий Дымба

Цитата: Arbuz от 22 января 2025, 16:14Можно ещё установить разрешения на раздел реестра
Тоже буду иметь в виду. Но с учетом куска "<НАЗВАНИЕ_БАЗЫ>\V7\<ИМЯ_ПОЛЬЗОВАТЕЛЯ>" получается сложновато. Да и на какой-нибудь Windows 2000 Server вряд ли это можно легко сделать.

Харлампий Дымба

Работать не хотелось, поэтому наконец-то дошли руки.
Поизучал класс РаботаСРегистромWin, поковырял экспорт-импорт Regedit. Даже что-то наваял.
Но облом - некоторые ключи (и среди них ToolbarSystem) считываются до "ПриНачалеРаботыСистемы", а записываются после "ПриЗавершенииРаботыСистемы". Так что из 1С менять их не получалось.

Ладно, решил запускать скрипт при логине пользователя к RPD-серверу, переделал всё на WScript Shell. Работает, если знаешь конкретное имя пользователя и имя базы. То есть, неуниверсально. Решил поиграться - имя базы, открытой последней, брать из параметра Defаults\LastTitle. Тогда, зная имя базы, можно узнать последнее имя пользователя через параметр <Имя базы>\StartUp\UserName. Переписал, всё отлично. Начал внедрять потихоньку - оказалось, что параметр Defаults\LastTitle записывается только в момент закрытия окошка меню запуска 1с. Соответственно, если у пользователя прописан пакетный вызов конкретной базы 1cv7.exe /DПутьКБазе, то окошко не появляется и LastTitle не записывается.

Психанул, сел за WMI StdRegProv (так как WScript Shell бедноват для нормальной работы с реестром)  - вдохновлялся здесь: https://www.script-coding.com/WMI.html
Решил просто при логине перебирать все имена пользователей, под которыми был вход в из-под текущей учетной записи пользователя, и для всех баз из меню запуска очищать настройки Панелей инструментов. Потом вошел во вкус и заодно решил чистить историю поиска, список отрытых файлов, настройки окон. А заодно убрал светомузыку, которую Formex может устраивать в строке состояния (проблема описана здесь: https://1cpp.ru/forum/YaBB.pl?num=1210673051).
С удивлением обнаружил, что некоторые настройки (в частности шрифты) базонезависимы - изменения в одной базе становятся общими для всех баз и всех пользователей в текущей учётке. Просто никогда не обращал внимания.
Ну и вообще интересно было в ключиках поразбираться: любопытно, у кого-нибудь в ключе Settings что-нибудь есть?

Пример моего скрипта: https://disk.yandex.ru/d/noXoE6Bw44kcBQ (текстом сюда не решился - наверное, не комильфо простыню эту постить)
Запускаю через "wscript.exe script.vbs", при редактировании и сохранении возможно придется поиграться с кодировкой.