Технический форум

Технический форум (http://www.tehnari.ru/)
-   Форум программистов (http://www.tehnari.ru/f22/)
-   -   Casemods Registry Tweaker (http://www.tehnari.ru/f22/t9634/)

VipeR 05.03.2008 08:48

задуман проект программы - твикера реестра, потребность в расширенных способностях коего возникла в силу отсутствия необходимых возможностей у аналогичных программ. Сделан предварительный набросок алгоритма работы и основных требований:
- подключение к реестру через WMI и WScript (в зависимости от необходимого уровня сложности доступа);
- различные разделы конфигурационных настроек - от простой настройки проводника до административных настроек типа "ваааааау";
- в будущем планируется осуществить поддержку файлов собственного формата для хранения настроек и сохранения их в шаблоны (по мере набора опыта, думаю, это будет не так уж трудно реализуемо);
- в распрекрасном варианте - сетевая работа утилиты.

Хотяяяяя в ходе долгих размышлений об удобстве работы с реестром WScript решено похоронить ввиду крайней простоты (невозможно применение в именах элементов специальных символов навроде слэшэй и ряда других и прочее), WMI хорош, но поиски наиболее рационального способа в конце концов привели к библиотеке advapi.dll. Она дает программе скилл разговаривать с виндами на родном языке - через специализированный API. Это дает возможность при занесении кода работы с API в дискретный модуль использовать функции быстрого доступа к ключам и значениям в бесконечных ветках реестра. Воть частичное описание и объявление функций (может, пригодятся кому):

Код:

Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String) As Long
Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long
Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long
Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal Reserved As Long, ByVal samDesired As Long, phkResult As Long) As Long
Declare Function RegDeleteKey Lib "advapi32.dll" Alias "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String) As Long
Declare Function RegEnumKeyEx Lib "advapi32.dll" Alias "RegEnumKeyExA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpName As String, lpcbName As Long, ByVal lpReserved As Long, ByVal lpClass As String, lpcbClass As Long, lpftLastWriteTime As Any) As Long
Declare Function RegEnumValue Lib "advapi32.dll" Alias "RegEnumValueA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpValueName As String, lpcbValueName As Long, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long
Declare Function RegSetValueExA Lib "advapi32.dll" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, ByRef lpData As Long, ByVal cbData As Long) As Long
Declare Function RegQueryValueExA Lib "advapi32.dll" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, ByRef lpData As Long, lpcbData As Long) As Long
Declare Function RegQueryInfoKey Lib "advapi32.dll" Alias "RegQueryInfoKeyA" (ByVal hKey&, ByVal lpClass$, lpcbClass&, ByVal lpReserved&, lpcSubKeys&, lpcbMaxSubKeyLen&, lpcbMaxClassLen&, lpcValues&, lpcbMaxValueNameLen&, lpcbMaxValueLen&, lpcbSecurityDescriptor&, lpftLastWriteTime As Any) As Long
Declare Function RegNotifyChangeKeyValue Lib "advapi32" (ByVal hKey As Long, ByVal bWatchSubTree As Boolean, ByVal dwNotifyFilter As Long, ByVal hEvent As Long, ByVal fAsynchronous As Boolean) As Long

скоро начну выкладывать скрины и сырцы

На данный момент начата реализация пользовательского гуя и ядра - основы. Потому как с дизайном и художественным оформлением я не особо дружу, то дизайн софтины аскетичен до безобразия.

Отсюда вопрос к форумчанам - какие универсальные средства для оформления гуя можете посоветовать? И что еще конкретно можете предложить к проекту реализации? :/
Было бы приятно послушать советы профессионалов реестра Windows ;)
Спасибо за внимание

AlexZir 05.03.2008 18:14

Цитата:

Сообщение от VipeR
Потому как с дизайном и художественным оформлением я не особо дружу, то дизайн софтины аскетичен до безобразия.

Слишком большие навороты в дизайне тоже утилиту украшать не будут.

Предложение от непрофессионала реестра ;): расширенные возможности по умолчанию не включать, хотя подсказка о их наличии обязательно должна быть.

VipeR 05.03.2008 20:41

благодарю-с за совет, AlexZir :)
хотя сама идея проекта - работать с софтиной будут сисадмины, которые отдают себе отчет в том, что и где нажать :)

воть один из первых скринов. Конечно, ничего о программе он толком сказать не может. На форме активен раздел настроек рабочего стола. Я создал крепкую (надеюсь :) ) программную основу для остальных разделов. Начал с рабочего стола из-за возможности быстрой проверки изменения настроек - щелкнул и уже увидел результат, в отличие от большинства административных прибабах. Да и для рабочего стола это лишь первая группа элементов. Сегодня полдня был бета-тестером, баги пофиксил ........ уже замечаю симптомы специфической болезни - программазма (глаза рыбьи, все мысли - в алгоритме работы программы даже во сне. Воздушные зАмки, тяжелые вздохи от того, СКОЛЬКО тысяч строк кода еще ждут, некоторая невменяемость состояния, хихиканье над фразой
антипаттерн "Паблик Морозов". Класс-потомок, созданный в соответствии с этим антипаттерном, выдает по запросу все данные класса-предка, независимо от степени их сокрытия" :D )

http://i036.radikal.ru/0803/03/30c600b43293t.jpg

насчет расширенных возможностей - создам простой лейбл при переходе в более или менее опасные разделы настроек. Если система определит, что за компом юзверь, то автоматом пошлет 220В на левую и правую кнопки мыши
пока печатал, пришла в голову мысль о краткой системе хелпа - простейшие всплывающие подсказки на каждый элемент настройки + строка состояния снизу, она будет отражать изменяемый ключ и значение реестра текущей настройки
насчет гуя - да, согласен, гуем заниматься практически не буду. Красявость на скрине - это виндовая альенваровская тема, не более того
если вы сочтете интерфейс нижеприведенного прошлого проекта приемлемым - изгаляться и прикручивать розовых зайчиков не буду

http://i043.radikal.ru/0803/f8/bb5e835f478dt.jpg

VipeR 06.03.2008 08:25

отлаживаю обработчик событий при откате сделанных изменений, даже работает :)

для разнообразия кое-где использовал WMI (для создания ключа, например):

Код:

        StrComputer = "."
        Set oReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
        StrComputer & "\root\default:StdRegProv")
        StrKeyPath = "Software\Microsoft\Windows\CurrentVersion\Policies\System"
        oReg.CreateKey HKEY_LOCAL_MACHINE, StrKeyPath

переменные из кода необходимо объявить

осознана глупость с ToggleButton'ами. Приделаны нормальные человеческие вкладки :D

VipeR 06.03.2008 18:46

создан откатчик последних сделанных изменений ....... скажем прямо - не каждый твикер таким похвастаться может :) стоила фишка 2 часа беспрерывной и глубокой Мысли

VipeR 07.03.2008 09:13

системным администраторам и просто интересующимся реестром советую эту книгу

http://i003.radikal.ru/0803/75/0dbd14e69edbt.jpg

качественный и грамотный текст

VipeR 07.03.2008 14:44

свершилось! совершенно случайно узнал о работе с командной строкой с помощью Visual Basic!
это, это ....... просто слов нет, какие открываются перспективы! эмоции уже часа три льют через край, все не дождусь момента быстрее сесть и кодить дальше :)
появится возможность автоматизированной отправки письма автору с открытием аутлука и заданным почтовым адресом в строке, открытие любой административной оснастки, работа с GPO, настройка брандмауэра Windows. Да даже тупо трейсрутить адрес с записью лога в заданный файл! и это лишь приятные мелочи и побрякушки на фоне поистине гигантских перспектив. С некоторым сожалением смотрю на образцы вырезок кода из прошлых проектов - а ведь все можно было сделать гораздо проще ....... не прибегая к методикам проктолога

Hacker 07.03.2008 14:59

VipeR
такое ощущение, что ты открыл для себя исходный код винды.. :D

VipeR 07.03.2008 16:32

да я вообще прыгаю от радости и буду еще дня три ходить с немного потерянным и загадочно улыбающимся видом!
можно писать целые скрипты любой сложности с преобразованием в код VB, а это - золотая кладезь! на контроллере домена можно целые политики в сети распространять с помощью простого сбитого своими же руками гуя! управлять процессами. Винды можно поставить в любую позу, кроме как раком. Раком она и сама встает
чувствую себя 10-летним ребенком, которому подарили хоть и игрушечный, но все же летающий вертолет .......

Hacker 07.03.2008 16:46

я так же прыгал, когда начинал писать первые игры.. теперь уже не тот.. пыл пропал.. остались заботы..


Часовой пояс GMT +4, время: 13:18.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.