Показать полную графическую версию : [решено] Утилита для перехода в заданный раздел реестра
Страниц :
1
2
3
4
5
6
7
[
8]
9
Ещё обновил
Добавлено сохранение ширины окна
В избранном подерживается разделитель, строка вида: <---> с любым количеством тире
В меню пункт "Открыть другой файл избранного"
При запуске - обрезок, если окно переместить, нормальный размер возвращается »
Немного странно, обычно при изменении размера может сработать функция WM_GETMINMAXINFO. Добавил сдвиг 6 пикселей как на скрине. Возможно это несоответствие зависит от темы, незнаю.
А при возвращении RegScanner автоматически возвращаться его использование не должно? » Там может быть наличие другой из 3-х утилит. Автоматически при первом запуске, когда нет данных в реестре, то есть случай когда используем портабельно, принесли на другой комп запускаем и сразу включается нужный режим. Только для этой цели сделано. А после выбора уже автоматом нельзя менять, может у человека все три утилиты используются.
А вот в режим "без сторонних утилит" переключается в случае если человек использует RegScanner, а потом решал отказаться, то лезть в меню не обязательно, удалил и режим автоматом переключился.
В большинстве случаев я нацелил на RegScanner и "без сторонних утилит". Остальные варианты с другими утилитами вручную через меню. Я даже не стал их автоматически проверять наличие, так как путь не известен, nircmd может быть в системных папках или в каталоге программы.
Кстати команду
Run('regedit.exe')
сделал так
Run(@WindowsDir & '\regedit.exe')
Чтобы цеплялся только тот regedit.exe, который в правильном каталоге.
Morpheus
25-05-2012, 13:14
AZJIO, теперь нормальный размер, спасибо!
AZJIO, хотел бы попросить вас сделать так, чтобы можно было переходить в ветку реестра при вставке кода с скобками типа []:
Windows Registry Editor Version 5.00
;Настройка Total
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\*\Shell\Open in Total Commander]
@="Откроем в Total Commander"
так удобнее (быстрее) с файла реестра скопировать и вставить
Добавил, ссылка таже JumpReg (http://u.to/abSc)
Обновлено:
Если поле ввода пустое, то JumpReg ищет путь-раздел реестра в буфере обмена, причем игнорируя символы переноса строк, скобки и тире [- ]
Можно вертикально выделять строку из рег-файла.
AZJIO, а x64 версия будет?
JumpReg (http://u.to/abSc) - проверь, у меня нет возможности проверить. Добавил x64 в общий дистрибутив.
Morpheus
28-05-2012, 20:39
Pozia, спасибо за идею, давно не хватало.
AZJIO, спасибо за обе фишки! Здорово.
А почему когда я компилирую 64-битную версию, она получается килобайт на 80 больше? От версии AutoIT зависит что ли? У меня v3.
Morpheus, я компилирую на 3.3.6.1, вот эта сборка (http://azjio.ucoz.ru/load/vsjo_dlja_autoit3/kollekcii/komplekt_autoit3_v3_3_6_1/5-1-0-18). Файл x86 - 293 кб, а x64 - 779 кб. Может сжатие не сработало на x64, может надо компилировать в x64 системе.
Кстати проверил разделитель "|" в реестре, он ислоьзуется, например в только в разделе
HKEY_CLASSES_ROOT\Installer\Assemblies\C:|WINDOWS|Microsoft.NET|Framework|v3.5|MSBuild.exe
Исходя из ситуации желательно изменить разделитель в JumpReg. Я вынес разделитель в переменную, чтоб его можно было поменять, попробовать табуляцию. Желательно чтобы он был виден в JumpRegFav.ini, а не сливался с текстом как пробел. Пока случай редкий поэтому не тороплюсь менять разделитель на сомнительный вариант.
Может сжатие не сработало на x64 »
Его не бывает для x64 файлов, т.к., UPX не поддерживает x64 файлы.
Morpheus
29-05-2012, 10:36
Короче фиг знает. Даже в 32-битной XP и на этой сборке получается 851 кб.
За разделитель спасибо, но менять пока тоже не спешу, прецедентов ошибок из-за него пока не было.
Кстати проверил разделитель "|" в реестре, он ислоьзуется, например в только в разделе »
А зачем нужен этот разделитель?
Я вынес разделитель в переменную, чтоб его можно было поменять, попробовать табуляцию. »
Это что-то для гиков. Нужно быть проще :)
Может сжатие не сработало »
Я считаю, что надо обходиться без сжатия UPX во избежание ложных срабатываний антивирусов.
Предлагаю допилить текущий вариант, обновить посты по первым трем ссылкам в шапке и скомпилировать. После чего я соберу набор для софт-портала и обновлю там утилиту.
Morpheus
29-05-2012, 13:03
А зачем нужен этот разделитель? »
Для History в HKEY_CURRENT_USER\Software\JumpRegAzjio.
AZJIO
1 При первом запуске (с пустой историей) и нажатии выпадающего списка, наблюдаю артефакт справа:
http://gora.7zsfx.info/test/reg.png
2 Ни в шапке темы, ни в Readme_Ru.txt не ни слова о том, что утилита хранит настройки в реестре.
3 Утилита не имеет инсталлятора и деинсталлятора. Возможно он ей и не нужен, но кто-то же должен очистить реестр после удаления утилиты или хотя бы предупредить об этом пользователя.
4 Выпадающий список имеет фиксированную ширину. Лучше сделать его ширину подстраивающейся под максимальную длину пути в этом выпадающем списке, ограничив ее максимальное значение разумной величиной. Тогда и п.1 исчезнет.
А зачем нужен этот разделитель? »
При вставке в комбо нативная функция GUICtrlCreateCombo использует разделитель данных, который не должен встречаться в самих строках иначе он будет расцениваться как разделитель, а не как текст. Даже если использовать функции из UDF, пример ниже
#include <GuiComboBox.au3>
Global $hCombo, $sText
$hGUI = GUICreate("(UDF) ComboBox Create", 450, 396)
$hCombo = GUICtrlCreateCombo("", 5, 4, 440, 296)
; $hCombo = GUICtrlGetHandle($iCombo)
$iDummy = GUICtrlCreateDummy()
Dim $AccelKeys[1][2] = [["{Enter}", $iDummy]]
GUISetAccelerators($AccelKeys)
GUISetState()
_GUICtrlComboBox_BeginUpdate($hCombo)
For $i = 1 To 10
_GUICtrlComboBox_AddString($hCombo, $i & ' строка')
Next
_GUICtrlComboBox_EndUpdate($hCombo)
While 1
Switch GUIGetMsg()
Case $hCombo
$iIndex = _GUICtrlComboBox_GetCurSel($hCombo)
_GUICtrlComboBox_GetLBText($hCombo, $iIndex, $sText)
_GUICtrlComboBox_DeleteString($hCombo, $iIndex)
_GUICtrlComboBox_InsertString($hCombo, $sText, 0)
_GUICtrlComboBox_SetCurSel($hCombo, 0)
Case $iDummy
$sText = _GUICtrlComboBox_GetEditText($hCombo)
$iIndex = _GUICtrlComboBox_FindStringExact($hCombo, $sText)
If $iIndex = -1 Then
$iCount = _GUICtrlComboBox_GetCount($hCombo)
If $iCount > 12 Then _GUICtrlComboBox_DeleteString($hCombo, $iCount - 1)
_GUICtrlComboBox_InsertString($hCombo, $sText, 0)
Else
; _GUICtrlComboBox_GetLBText($hCombo, $iIndex, $sText)
_GUICtrlComboBox_DeleteString($hCombo, $iIndex)
_GUICtrlComboBox_InsertString($hCombo, $sText, 0)
EndIf
Case -3
Exit
EndSwitch
WEnd
то всё равно желательно использовать какой либо символ разделителя (не из бинарных), чтобы записывать историю в реестр одной строкой. Вообщем пока нет желания изменять, так как случай маловероятный, 1 на 10000
Это что-то для гиков. Нужно быть проще Нет, просто реестра допускает использование символа в названи раздела. Например в названии файлов запрещены символы ^/:*?"<>| значит я их могу использовать для разметки, делении строки на участки, символ можно удалить/заменить, при этом путь не пострадает. Просто редкий случай, а тестировать заново все функции нет желания, тем более в регулярных выражениях он используется закомментированным. То есть я уже сделал тестовый вариант и проверил, но как всегда утилитой нужно неделю пользоваться, чтоб быть уверенным.
Я считаю, что надо обходиться без сжатия UPX во избежание ложных срабатываний антивирусов. Эту версию UPX вроде ни кто не ругал, отрицательных отзывов не было. На одном копьютере правда зонтик сработал при мне.
Предлагаю допилить текущий вариант, обновить посты по первым трем ссылкам в шапке и скомпилировать. После чего я соберу набор для софт-портала и обновлю там утилиту.
Что именно допилить? Если есть предложения по текстам или ещё что, меня на данном этапе устраивает. На счёт компиляции в принципе исходник содержит всё необходимое, но если что могу скомпилировать без UPX, а у себя я пока буду выкладывать пожатым. Единственное желательно компилировать используя AutoIt3Wrapper + Obfuscator, потому что я в предыдущих версиях выкладывал обфуцированный вариант, а теперь если не обфуцировать то размер exe-файла может заметно возрасти за счёт #include.
#include <WindowsConstants.au3>
#include <ForJumpReg.au3>
#include <GUIConstantsEx.au3>
#include <File.au3>
#include <GuiComboBox.au3> Обфускатор удалит неиспользуемые функции из UDF перед компиляцией их в файл.
Morpheus
29-05-2012, 13:49
2 Ни в шапке темы, ни в Readme_Ru.txt не ни слова о том, что утилита хранит настройки в реестре. »
Вы много видели программ, в справке которых это расписано?
А много видели людей (ну кроме себя), которым это интересно?
Мне перпендикулярно, где чего хранит программа. Уверен, что и 99% пользователей тоже.
3 Утилита не имеет инсталлятора и деинсталлятора. Возможно он ей и не нужен, но кто-то же должен очистить реестр после удаления утилиты или хотя бы предупредить об этом пользователя. »
Ничего чистить точно не надо. Предупредить?А много видели людей (ну кроме себя), которым это интересно?
Мне перпендикулярно, где чего хранит программа. Уверен, что и 99% пользователей тоже. »
Если уж так интересно, то можно код почитать или тему, если чтение кода недоступно.
gora, 2 Ни в шапке темы, ни в Readme_Ru.txt не ни слова о том, что утилита хранит настройки в реестре »
Ни одна программа не предупреждает, будет ли она писать что-то в реестр или копировать в "Application Data", хотя само меню "Экспорт настроек реестра" даёт понять, что настройки всё же в реестре. Да и утилита для людей которые поймут это, и стоит ли лишние слова писать в Readme.
1 При первом запуске (с пустой историей) и нажатии выпадающего списка, наблюдаю артефакт справа: инициализатором ))) артефакта оказалась кнопка.
GUICreate('My Program', 250, 55)
$Jump = GUICtrlCreateButton(">", 233, 12, 22, 22)
$comboreg = GUICtrlCreateCombo("", 6, 5, 222)
GUISetState()
Do
Until GUIGetMsg() = -3 Если сделать кнопку после комбо, то артефакта нет.
3. Инсталятор наверно лишнее, можно reg-файл положить для очистки.
4. Я об этом думал, как можно вычислить ширину строки в комбо? Если примитивным методом, то проверять длинну каждой строки в комбо (все 20 или все 50) при каждом прыжке. будет ли это экономичным? Я хотел добавить ширину в настройки, но показалось это лишнее. Просто этот оптимальный минимум позволит сжать утилиту компактно по ширине, не потеряв при этом видимость строк раскрывающегося списка.
AZJIO,
С разделителем понятно.
Допилить - остановиться на каком-то наборе уже оттестированных новых функций и сделать релиз. Компиляцию я оставляю на ваше усмотрение, но все-таки лучше без UPX, размер утилиты не столь велик.
Когда будет готово, пинганите меня, я соберу набор для обновления на софт-портале.
P.S. Упоминание про хранение в реестре и деинсталлятор не нужны.
Я ещё решил добавить поддержку горячей клавиши и ком-строки. Горячая клавиша позволит не активируя окна сделать прыжок, а ком-строка позволит выделив текст послать его назначенной в редакторе горячей клавишей послать прыжок в реестр. Последнее конечно с учётом что редактор это умеет, например Notepad++, SciTE.
Вобщем то горячая клавиша уже работает, осталось запись/чтение в реестре сделать. Но используется не HotKeySet, у него проблемы с русской раскладкой, использую GuiHotKey.au3 от rasim (http://www.autoitscript.com/forum/topic/83224-guihotkey/page__p__595204#entry595204).
Готово JumpReg (http://u.to/abSc), но глубоко не тестил.
В Notepad++ в shortcuts.xml тестил с командой
<Command name="JumpReg" Ctrl="yes" Alt="no" Shift="no" Key="112">"$(NPP_DIRECTORY)\..\AutoIt3.exe" "$(NPP_DIRECTORY)\..\JumpReg.au3" "$(CURRENT_WORD)"</Command> Ctrl+F1 (удобные хоткеи заняты). Параметр обязательно в кавычках - "
кавычки не отображаются.. в общем &квот;
Перезалил, отключил попытку повторной регистрации той же горячей клавиши при применении настроек. Новые тексты перенёс в языковые файлы.
Хотел сделать копирование строки Send('^{INS}') при использовании горячей клавиши, но не пойму почему не работает, может потому что вызывается из процедуры WM_HOTKEY, которая сама обрабатывает текущий HOTKEY.
Перезалил добавив x64
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC