![]() |
[решено] Утилита для перехода в заданный раздел реестра
Исходники версии 0.6 входят в комплект с программой. Текущий скрипт для компиляции утилиты Текущий скрипт для тех, кто желает выбрать способ перехода в реестр Текущий английский языковой файл (образец для перевода) Разработка: AZJIO Промежуточные решения Оболочка для regjump Без сторонних утилит Без сторонних утилит (с запоминанием ввода путей) |
До ввода раздела реестра кнопка неактивна?
|
LexaSF, сначала фокус на поле ведь - туда вводится путь.
В принципе, мне все равно, будет переводиться фокус или нет. Главное - выполнение команды при нажатии Enter. |
Vadikan,
Может так?Только, наверное, надо еще проверку сделать на существование введенного раздела. Еще здесь посмотрите: Открытие редактора реестра в заданной ветке. По-моему, не хуже, чем у M.Russinovich.:) |
madmasles, так если у меня другие окна открыты и в них нажимаю Enter, хоткей перехватывается и скрипт отрабатывает. Как ограничить его действие только активным окном скрипта?
Проверка необязательна, в принципе... regjump пойдет по пути вплоть до последнего существующего подраздела. |
Цитата:
|
madmasles, а собственными средствами AutoIt нельзя это сделать? Потому что регистрироваться на форуме, качать какие-то файлы, разбираться в навороченных функциях... время нужно :) А программка-то совсем простая.
|
Vadikan,
Проверил у себя, правда на Windows XP, из 10 раз - 10 правильных срабатываний при куче открытых окон: Код:
;... |
madmasles, а куда конкретно вы помещаете
Код:
HotKeySet('{ENTER}', 'OKButton') |
Vadikan,
В Windows XP так у меня работает: Код:
#include <GUIConstantsEx.au3> Цитата:
|
Цитата:
Видимо, нужно более тонкое решение. |
Код:
; Simple GUI wrapper for regjump http://technet.microsoft.com/en-us/sysinternals/bb963880 |
Добавить стиль кнопки «Default» ($BS_DEFPUSHBUTTON):
Код:
; Simple GUI wrapper for regjump http://technet.microsoft.com/en-us/sysinternals/bb963880 Код:
Run("regjump.exe """ & GUICtrlRead($path) & """", "", @SW_HIDE) |
Здесь вообще regjump.exe не нужен. За все отвечает параметр Lastkey в разделе HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Applets\Regedit.
Код:
#Include <GUIConstantsEx.au3> |
SyDr, большое спасибо, так работает, только функцию закрыть осталось в конце. За повышение отдельное спасибо :)
По ходу возникла такая мысль еще... Можно ли как-то записывать введенные пути (историю) текущей сессии и выводить ее? Например, вместо inputbox использовать combo со списком введенных путей. Чувствую, нужен массив :) P.S. Тему переименую. Iska, да, нужно @SW_SHOW, но тогда видна консоль... Yashied, спасибо, так тоже работает. Но как видите, я пошел по самому простому пути, поскольку не владею вопросом в нужной степени :) |
Vadikan, Вы не могли бы проверить, вот эта утилита работает под «Windows 7»?
|
Iska, проверял, работает... но только пару запусков, после чего запускается свернутой и не хочет вылезать из панели задач :) Пробовал в режимах совместимости на двух разных машинах, потратил время и забил. Собственно после этого и возникла мысль сделать самому и с помощью коллег.
В принципе, избранное - удобная вещь, но оно и в редакторе есть в конце концов. А вот во время текущей сессии часто бывают переходы в одни и те же разделы реестра, когда ковыряешься. |
Цитата:
:) Код:
#Include <GUIComboBox.au3> Правда для запуска этого скрипта понадобится библиотека WinAPIEx UDF. Но если не интересует сохранение в реестре последних открываемых разделов для последующей их загрузки в список, то WinAPIEx UDF не нужен. Так же нужно будет удалить из кода две функции: _LoadMRUList() и _SaveMRUList(). Константа $MRU_MAX_SIZE в самом начале кода задает максимальное количество записей в списке (по умолчанию 26). P.S При жедании можно еще добавить Autocomplete. |
Цитата:
|
Yashied, супер, спасибо! Только сохранение путей я перевел в JumpReg вместо Vadikan.
Я уверен, что утилита сэкономит немало времени тем, кто лучшие годы своей жизни проводит в реестре :) На самом деле, во время написания статей про кнопки на панели проводника я вдруг осознал, что помню наизусть начальные символы некоторых GUID'ов О_о |
Vadikan, для себя когда то делал jumpreg, сегодня обновил немного. Кнопкам можно назначить хоткей функцией GUISetAccelerators, которая назначает выполнение хоткея только в текущем окне и только для элементов текущего окна. Разделы реестра (ветки) хранятся в ini, так мне проще пользоваться в чужой системе или в LiveCD. Или импортировать ini в избранное regedit.
+ активность инпута после прыжка. + переход уровнем выше, если раздела не существует (проверка до корневого). + Избранное + Старт вверху экрана в виде компактной панели без заголовка, с перетаскиванием за окно, не редактируемый комбобокс |
AZJIO, да, потребность в утилите есть :) Идея с избранным, интересна, конечно, если на флэшке таскать.
Но у меня не работает этот скрипт в 7. Он просто открывает редактор реестра, полностью разворачивая окно (что не гуд). И при этом никуда не переходит. Запуск от имени админа ничего не меняет. |
Vadikan, проверил в Win7, поправил скрипт в предыдущем моём посте. Всего лишь имя компа убрал в сохраняемой ветке последнего доступа. Ну и ещё поправки незначительные, убрал вкладки, добавил ресайз по ширине.
Цитата:
|
AZJIO, Так работает скрипт, конечно. Но есть несколько замечаний/пожеланий, если есть желание довести до ума и выпустить "в люди".
По поводу последних двух пунктов. Вообще, добавление избранного реализовано в regedit, незачем дублировать функции. Вместо этого лучше реализовать избранное утилиты в INI файле! А историю хранить в реестре, методом Yashied. Если честно, я сначала подумал, что Избранное - это избранное утилиты... И я уверен, что не я один такой буду :) Конечно, нужно будет продумать запись в избранное (собственное имя для раздела реестра) и выбор из Избранного (какой-то список, комбо-кнопка и т.д). Что думаете? |
Vadikan,
Первые два пункта выполнил. Прыжок сейчас осуществляется за счёт того, что при закрытии реестра он сохраняет последний открытый раздел и открывает в том же месте. То есть приходится закрывать regedit, вставить полный путь раздела реестра и снова открыть уже в эом месте. Посмотрел старую утилиту regjump.exe, она открывает без перезапуска regedit, можно ей передать путь в ком-строке. Как в Win7 не смотрел, но в WinXP вроде не видел команд перехода в ком-строке без сторонних утилит. Цитата:
На счёт истории: хотелось бы избранное иметь и отдельно историю. То есть сделать нередактируемый комбобокс, при выборе в котором происходит вставка раздела в инпут и открытие по Enter. А для истории второй такой же комбобокс. Получается и раздельное наполнение. На счёт хранения в реестре истории - можно галочку сделать "Хранить в реестре (иначе в ini)". Нередактируемый комбобокс не такой красивый как кнопка, но те же свойства, раскрывается по клику в поле, а не только на стрелке. Неассоциированность ini уже есть функция... откроется в том редакторе, в котором ассоциирован txt (хотя можно и блокнот жёстко указать). Для Избранного диалог сделаю. Может сделать главное меню, чтоб туда кнопки убрать, кроме "прыжок". Мне приходится настраивать компы, и там обычно меню "Избранное" со 100% гарантией отсутствует, поэтому я добавляю утилитой, чтоб потом без перезапуска смотреть некоторые необходимые мне ветки. А в утилите первый раздел ini как бы и есть избранное. Только я не вижу разницы, что в утилите делать кнопочки добавления в избранное ( по сути редактирование ini), что открыть в блокноте и редактировать, там же как то наглядней. Обновил скрипт, ограничение на 26 пунктов комбобокса добавил. |
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
|
Vadikan, переделал, обновил предыдущий пост... Утилита при старте вверху экрана, инпут для ввода и история-комбобокс. А избранное в "главном меню". Кнопка прыжок мелкая
С regjump.exe не вышло, он тоже моргает дос окном, а скрыть не получается, только вместе с regedit. Можно попытаться управлять деревом regedit'а. |
Цитата:
Заголовок окна лучше оставить, так будет больше похоже на обычную программу :) Ждем-с :) |
После проверки в Win7 обновил ещё раз.
Всё-таки как лучше, текущий вариант без заголовка, но перемещать можно за само окно (сворачивание не работает, не критично) или вернуть заголовок с учётом увеличения ширина на 20-30 пикселей. Удобство дополнительного комбобокса только в том что можно кликать по всей его площади. Либо сделать один комбобок и постоянно метится в стрелку раскрытия. |
AZJIO,
Уже ближе к финалу :) 1. Я бы все-таки вернул заголовок окна со всеми атрибутами - это понятнее, и не нужно будет делать "Выход" в "Меню" (см. #5 ниже). Не вижу особого смысла прикреплять окно вверху экрана, лучше по центру, как обычно. 2. Непонятно, почему нельзя было совместить поле ввода с раскрывающимся списком истории. Лишний элемент сейчас. 3. При установке курсора в поле он начинает дрожать, превращаясь то в стрелку, то в I. 4. Фон окна неудачно смотрится, особенно с учетом белого квадрата вокруг зеленой кнопки на черном фоне :) Лучше нейтральный фон. 5. "Меню" можно упразднить. Открыть JumpRegFav.ini - непонятный пункт. Его надо переместить в Избранное, над всем избранным, и отделить визуально разделителем. Справка - можно заменить на отдельный пункт "?". Порядок меню тогда такой: Избранное, Regedit, ? Что касается JumpRegFav.ini, то не очень понятно, для чего нужно имя после разделителя. Видимо, это работает только при добавлении в избранное реестра, что неочевидно. |
Vadikan, вот сделал поправки, это уже было не сложно. Предыдущий вариант тоже оставил в предыдущем посте, чтоб выбор был. Смысл прекреплять сверху в том, что regedit откроется чуть ниже, ведь при каждом старте сдвигать утилиту приходится вверх.
3. У меня не моргал курсор, хотя подозреваю срабатывание функции из WinAPI.au3 - _SendMessage, которая предназначена для перетаскивания окна за само окно, но теперь это убрал. Видимо изменялся курсор для перетаскивания. Цитата:
* Убрал сообщение создания JumpRegFav.ini при первом старте. + опция установки размера истории. У меня история укладывается в 600 пиксель (высота экрана нетбука), т.е. в 2 раза можно увеличить для моего монитора. + при клике на заголовке развёртывание в ширину на 800 пиксель и перемещение к верху экрана. + Выбор метода, требуются указанные утилиты regjump.exe, regscanner.exe, nircmd.exe. С выбором утилиты. |
AZJIO, отличная работа! Мы почти у цели :) Есть несколько пожеланий.
1. При выборе пункта из Избранного нужно автоматически переходить в раздел. Просто сейчас раздел просто добавляется в историю, но его нужно вручную выбирать из конца списка. Делать его активным в поле ввода, пожалуй, не нужно. 2. Предлагаю снова перегруппировать меню: Избранное, История, Regedit, ?. История - Экспорт, Восстановить, Размер. 3. Восстановить историю должно выводить ошибку, если не найден файл: Файл JumpRegSet.reg не найден. Он создается командой 'Экспорт'. 4. Из справки, пожалуй, можно убрать упоминание про менеджер реестра. А вот ссылки можно сделать гипер. Я тут нашел скрипт, почему-то в справке не обнаружил. OSzone тоже можно указать, наверное :) Добавлю еще кое-что. Мы пообщались с Morpheus и консенсус таков, что мигание регедита напрягает :) Т.е. нужно встраивать консольный regjump.exe, чтобы этого избежать. Правильная строка запуска Код:
Run(@ComSpec & " /c " & 'regjump.exe '&$comboreg0, "", @SW_HIDE) Мы также протестировали 64-разрядную версию (в обоих вариантах). В принципе, все работает, но история не отображается в списке (хотя в реестр пишется). Мне кажется, что имеет смысл использовать вариант с MRU, который предлагал Yashied тут. В итоге получится интересный вариант от всех инициативных лиц :) |
Vadikan, поправил по всем пунктам. Пункты из избранного в историю не попадают и открываются сразу. Справку (в кавычках) убрал, добавил "О программе" и ссылку на ресурс...
Цитата:
И сделал при выборе пункта в истории автоматический переход без Enter. И regjump.exe конечно же... |
Vadikan, вместо тулы Марка, предлагаю использовать regscanner.exe /regedit, она есть 64. Кстати ключ /clipregedit тоже очень интересный :)
З.Ы. Скомпилил #31 в чистом виде в 64 - история работает. AZJIO и все-все-все, спасибо! Отличная штука получается! Ещё бы её в regedit встроить :) |
Morpheus, попробовал в строке 241 изменил строку на
Код:
Run('regscanner.exe /regedit "'&$comboreg0&'"', "", @SW_HIDE) Код:
Run('nircmd.exe regedit "'&$comboreg0&'"', "", @SW_HIDE) Добавил опцию выбора метода: а) без сторонних утилит б) используя regjump.exe в) используя regscanner.exe г) используя nircmd.exe Цитата:
|
Цитата:
Цитата:
Новый вариант тоже работает. Цитата:
|
Цитата:
Что касается выбора, это здорово, но есть два момента. 1. Выбор слишком велик. Сейчас разница фактически сводится к выделению раздела. Достаточно выбора между regscanner и "без утилит", потому что regjump не имеет 64-разрядной версии. Логичнее использовать regscanner, потому что он "ближе к теме". 2. Если выпускать утилиту в виде EXE, выбор вообще не нужен. Берем regscanner и усе :) Тем более, что выбор придется разъяснять как-то юзерам, лишняя морока. Т.е. можно финализировать скрипт на каком-то этапе и сделать вилку. Одна версия упрощенная для EXE, ее можно развивать дальше. Вторая - для трех-пяти энтузиастов, которым нужен мега-выбор. Они сами разберутся со скриптом, скорее всего. Кстати, диалог выбора лучше перенести в "?". P.S. О программе - выдает ошибку и закрывает утилиту (последняя редакция скрипта). |
Vadikan, версию с выбором утилит оставляю, теперь вариант для компиляции.
1. Вернул параметр реестра не бинарный, лишняя конвертация никчему (нужно подчистить бинарный параметр в реестре). 2. Убрал выбор утилит, теперь только RegScanner.exe 3. 4. В Win7 проверил... Цитата:
|
AZJIO, спасибо!
Прилепление к регедиту не работает, но оно далеко не всем понадобится. Я поправил все сообщения в интерфейсе, чтобы они понятнее были (и короче). Код не трогал, разве что размер окна Истории. И убрал C:\ из путей к файлам regscanner, пусть они лежат в папке с программой :) Morpheus, потестит х64 :) Код |
Vadikan, ну и я тогда поправил тексты на ваш вариант. Ещё заменил "начиная со второй строки" на "начиная с третьей строки". И в вашем посте код с примагничиванием, в своём посте убрал. Вроде можно считать окончательным вариантом.
|
AZJIO, сейчас главное не запутаться, где какой код :) Просто у меня в посте 39 интерфейс был уже вычищен и сокращен.
Цитата:
Код:
If $GP=-11 Then Sleep(300) |
Vadikan, извиняюсь, сохранить забыл в утилите сравнения и кинул частично подправленный текст.
Заменил в последнем посте (последний пост содержащий код утилиты) окончательную версию. Да, этот блок убрать и в строке 20, где Global $aRecords, $kol_item, $list='' убрать лишние $GP=-11 и $GPtmp=12 |
AZJIO, ок, все понял. Я обновил шапку: 31 пост с выбором метода, 38 пост - текущая утилита.
Morpheus, потести, плиз, на х64. P.S. Я вот подумал, что по правилам распространения нужно с regscanner также распространять его CHM и readme, чтобы не обижать автора. Я при компиляции добавлю их. |
Из 38 в 64 работает.
Избранное и история сбивают, хто есть хто? Ответ нашел только в теме. У меня браузером по умолчанию там оказалась опера, жмакнул ссылку и вот: ![]() хотя страница открывается. Воспроизводится только при незапущенной опере. С ие проблем нет. Цитата:
|
AZJIO, у меня код поста 38 при запуске выдает след - аттач
|
saavaage, ага, тоже такую ерунду выдал при первом запуске, но при забивке путей переходит нормально и историю сохраняет. Ерунда уехала вниз.
|
Цитата:
Цитата:
Цитата:
Цитата:
|
Цитата:
CHM дописал Цитата:
Обновил пост, в котором код с выбором утилиты. Теперь совместимы с последним вариантом. А бинарная строка в комбобоксе - можно удалить в реестре или дождаться когда уйдёт в небытиё истории. |
Цитата:
Цитата:
Цитата:
Код:
HKCU\Software\JumpRegAzjio |
Vadikan, сделал иконку и откомпилировал ссылка (исходники с иконкой в комплекте). Для компактности использовал версию AutoIt3_v3.2.12.1 (296кб против 336кб). Опять же требуется проверить на Win7 x64.
+ Сохранение позиции окна |
|
|
Morpheus, понял... я сделал функцию проверки существования методом наличия либо подраздела либо параметра, а если ни того ни другого, то выдаёт "не сществует". Стандартой проверки существования раздела реестра в AutoIt нет. Чуть позже попробую выполнить эту функцию через ком-строку, например:
Код:
REG QUERY "HKEY_CURRENT_USER\Keyboard Layout\Substitutes" |
Поправил ссылку. Но проблему не могу воспроизвести.
|
Цитата:
|
Цитата:
Код:
RegRead('HKEY_CURRENT_USER\Keyboard Layout\Substitutes', '') |
Morpheus, поравил
Код:
; MerkurAlex (mod AZJIO) Ссылки обновил, посты подправил. |
AZJIO, теперь ок, спасибо!
|
На Win7 x86 - 7600, вообще никуда не прыгает, даже regedit не открывает.
|
FlatX007, у всех она, всё прыгает :)
Win+Pause ---> Дополнительные параметры системы ---> Переменные среды ---> Path выглядит так? Код:
%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\ |
Win+R ---> regedit - открывает!
а - Path половина нет из этого. |
AZJIO, зарегистрируйтесь на софт-портале, плиз, и сообщите мне ID/E-mail в ПМ. Релиз будет находиться там, но скорее всего уже после нового года я этим займусь.
|
Vadikan, на офсайте AutoIt3 посоветовали Registry Jumper.
|
AZJIO, Vadikan выше давал комментарий:
|
Vadikan, вот ещё мелочь: после строки GUISetState() добавить строку Send('^+{HOME}') для того чтобы выделить строку при старте утилиты. Это позволяет сразу выполнить Ctrl+v и Enter.
Или можно инпут при старте делать пустой... |
AZJIO, пожалуй, стоит это сделать :) Релизить будем после НГ уже... :)
|
Vadikan, Обновил, посты поправил. Инпут пустой при старте. Так как выкладывал на офсайте, то соответственно добавил англ. яз. - в зависимости от локализации Windows.
|
AZJIO, спасибо. Перевод нужно править... я сделаю, но уже через неделю :)
|
AZJIO, спасибо, активно пользуюсь. Всё ок.
А можно ли сделать, чтобы утилита стартовала поверх остальных окон, а то не удобно её каждый раз из фона вытаскивать. |
Morpheus, опция добавлена, обновил ссылки и посты.
|
Вложений: 1
AZJIO, я прикрепил перевод с исправлениями (сорри, но там интерфейс по состоянию на конец прошлого года :))
|
AZJIO, спасибо, "поверх всех окон" очень удобная функция.
После переустановки x86, программа перестала запускаться в фоне даже на старом коде. А вот на чистой x64 - по-прежнему в фоне, спасает только "поверх всех окон". Если это можно как-нибудь полечить, было бы хорошо, а если нет, "поверх всех окон" будет достаточно. |
Morpheus, нужно запустить исходник и наверно должна какая то ошибка вылетать в сообщении перед вылетом утилиты.
Я вчера справку переводил и там такой текст: Цитата:
И ещё: в той системе, где вылетает раздел реестра, куда программа сохраняет корректный? На всякий случай тестовая версия с HKCU64. Если заработает, то обновлю посты и ссылку на EXE. добавил код проверки разрядности OS и соответственно правильный корневой раздел реестра. Код:
Switch @OSArch |
AZJIO, утилита не вылетает, в том и проблема :) Просто окно при запуске утилиты скрывается за другими открытыми.
UPD: Гоняю полдня на 64-ке, запускается как хочет. Т.е. может и под окнами, а может и поверх. Ничего уже не понимаю, зависимости абсолютно никакой... Видимо, какие-то приколы 7-ки. AZJIO, в утилите нельзя указать положение относительно других окон при старте? |
Morpheus, Попробуйте после строки GUISetState() (строка 210 в текущей) добавить строку
If Not WinActive($GUI) Then WinActivate($GUI) Смысл команды: Если окно утилиты неактивно, тогда сделать его активным. |
|
AZJIO, а как определяется язык программы? У меня английская ос с русским пакетом, и текущий язык интерфейса - русский. Мне-то все равно, конечно, и так даже больше нравится :) Но логичнее выводить русский интерфейс, а не английский. Т.е. определять по текущему языку пользователя, если это возможно, конечно.
У меня появилась идея добавить в меню Regedit запуск RegScanner. Тогда оно должно принять такой вид: Цитата:
Topmost -> Always on top Удобно, кстати, спасибо! |
Вложений: 1
Цитата:
У меня раньше был вариант получить язык из ветки "HKCU\Keyboard Layout\Preload", первый параметр, но на многих рускоязычных сборках умолчальный английский. Тогда я сделал цикл проверки наличия русского языка в раскладках. Код:
For $i = 1 to 5 Поэтому текущий вариант: Код:
If @OSLang = 0419 Then Остальное учёл, ссылки обновлены, посты поправлены. Цитата:
|
AZJIO, я пока не проверял другие варианты, но для программных методов есть функция GetUserDefaultUILanguage Function (Windows). Пример скрипта http://www.autoitscript.com/forum/to...-os-installed/
|
Vadikan, в архиве положил функции отсюда:
http://www.autoitscript.com/forum/to...ost__p__763922 от ProgAndy (GetUserDefaultLocaleName) и KaFu (GetUserDefaultLangID), в готовом виде выдающие результат... |
Цитата:
|
Вот переделал скрипт с офсайта с GetUserDefaultUILanguage, если у вас выдаст 0419, то используем этот вариант.
Код:
$Lang_dll = DllOpen("kernel32.dll") |
Цитата:
Я еще вспомнил, что хотел исправить в английской локализации: Цитата:
Да, и давайте на этом сделаем отсечку для релиза, после чего можно дальше ковыряться по мелочи, а впоследствии делать следующий релиз по мере накопления изменений. |
Vadikan, как то сомневался в необходимости многоязыковой поддержки, но всё-таки добавил. Языки En и Ru встроены и определяются автоматически. При открытии файла из папки Lang произойдёт запись в реестр имени файла и перезапуск утилиты с указанным языком. Чтобы вернуть встроенный язык нужно удалить/переименовать файл, который использовался прежде.
Поправка: теперь в историю не попадают не существующие разделы, пустая строка и отказные при несуществовании. Версия 0.6 |
AZJIO, а какой формат ini файла?
|
|
Цитата:
Если бы поведение не менялось от запуска к запуску, было бы проще. Воспроизводится и в 32-битной версии в 32-битной системе, и в 64 в 64, и в 32-версии в 64-битной Windows. Проще и быстрее воспроизвести последнее, практически стабильно возникает после ребута. Итак, эффект не достигнут в версиях 3-5-6-7 (для повышения прав ставил флажок на вкладке "совместимость"), начиная с 8 воспроизводится. |
Morpheus, сравнил скрипты, разница только в #RequireAdmin и в добавлении главного меню программы. Остальные мелочи не влияют, так как наличие новых переменных к уже существующим эффекта не даст и цикл опроса кнопок, которые не работают пока не нажать.
Проверте последнюю версию, удалив #RequireAdmin (строка 14), если нормальзуется, то добавлю опцию включения в меню программы. Ну а без главного меню уже не обойтись. |
Цитата:
С флажком в совместимости работает нормально. |
Утилита должна запускаться с полными правами, иначе переходы в регедит не будут работать, начиная со второго. Первый вызывает регедит, который запускается с полными правами. Но последующие должны переходить из ограниченного процесса в полноправный - это не будет работать. Точно так же не работает переход из ограниченного RegScanner в открытый регедит.
Флажок совместимости обеспечивает запуск с полными правами другим способом, прописывая в реестре в разделе AppCompat путь к программе. Но как-то неправильно делать совместимую с 7 утилиту за счет режима совместимости :) |
AZJIO, была похожая ситуация. После закрытия дочернего окна, окно-родитель прячется за всеми остальными окнами. Сначала решал проблему в лоб, а потом нашёл решение "покрасивее":
Попробуйте после строки Код:
GUISetState() Код:
GUISetState(@SW_RESTORE) Код:
Sleep(1) |
|
Хм... Тогда можно попробывать решить проблему "в лоб". Там же:
Код:
WinActivate($GUI) Код:
Sleep(1) |
AZJIO, я тут подумал, что для релиза утилиты было бы удобнее не включать необходимые файлы и распаковывать их при первом запуске, а просто разместить их в папках параллельно утилите. Например,
\Regscanner - все файлы regscanner \Lang - образец языкового файла (англ.) \Source - исходники Тогда в корневой папке останутся только утилита и ее файлы - избранное и история. Поаккуратнее будет. А в коде фактически нужно будет только поправить вызов regscanner и убрать включение доп. файлов. |
Цитата:
SyDr, что в лоб, что полбу, всё едино. 4 раза за 5 минут. |
Vadikan, ссылку обновил, посты поправил. Языковой файл поправил, удалив у параметров начальные Lng, чтобы исключить подмены существующих переменных в скрипте путём вставки в ini одноимённых параметров.
Morpheus, оказалось директивы #RequireAdmin и т.д. нельзя вставлять внутрь условий. Поэтому невозможно добавить пункт в меню, который бы возможно было отключить (с перезапуском). |
AZJIO, в любом случае спасибо! Для себя решение теперь знаю.
|
AZJIO
http://autoit-script.ru/index.php/topic,2446.0.html Код:
If Not IsAdmin() Then Morpheus, там же , 9 часов назад: Цитата:
|
SyDr, дело в том, что 64-ка у меня на VirtualBox.
Пробовал ещё это, но нифига. |
SyDr, интересно, если права не будут получены, то фактически будет перезапуск в цикле. Нужно ещё предусмотреть подсчёт количества запусков через реестр за промежуток времени. Чтоб дать возможность отключить перезапуск более 3 раз. Или вставить в условие "Диалог с возможностью не перезапускать".
Morpheus, проверь этот код вместо #RequireAdmin Код:
If Not IsAdmin() Then |
AZJIO
Цитата:
ИМХО, тут идеально такое поведение: Вывести запрос UAC Если разрешение получено - продолжить работу, как обычно. Если не получено - продолжить работу и вывести запрос с предложением отключить автоматический запрос на повышение прав. Только тут проблема с бесконечным перезапуском, если запускать с ограниченными правами и отключённым UAC. То есть надо проверять ещё и включён/отключён ли UAC. Morpheus, даже не знаю. Будем продолжать мучаться? Можно попробывать активировать окно (оно ведь активно после запуска? В панели задач.), затем установить атрибут поверх всех окон, и через минмальный промежуток времени снять. Код:
GUISetState() |
AZJIO, права выдаются, но прятки продолжаются.
Цитата:
|
AZJIO, спасибо. Протестировал язык и последние изменения в структуре - все работает!
Я поправил языковой файл, добавив в него коммент в начале (пост обновлен). Я также поправил в коде Код:
$LngAdF='Import Favorites to Regedit Ctrl+Up' В общем, все готово к релизу, только мне непонятно, мешает ли ему эта дискуссия с окном в фоне, тянущаяся последние несколько дней :) |
SyDr, аха, скрывается при старте (когда глюк проявляется) и тут же появляется.
Думаю, такое решение можно считать приемлемым. Спасибо! P.S. Пробовал в связке с #RequireAdmin. |
Morpheus, ещё не всё :)
По идее, чтобы было правильно, надо удалить вот эту часть: Код:
$TrTop=RegRead('HKCU\Software\JumpRegAzjio', 'Topmost') Код:
GUISetState() |
Сделайте без всяких WinSetOnTop(), просто
Код:
$TrTop = RegRead($HKCU & '\Software\JumpRegAzjio', 'Topmost') |
SyDr, вобщем чтоб не заморачиваться, оставить как было, ведь WinSetOnTop работает через реестр и автовключать его не всем понравится. А через реестр есть выбор, у кого проблема, включит и забудет.
Vadikan, да, пора отсечку. |
Думаю, правильно будет активировать на короткое время при запуске, а "поверх всех окон" - выбор оставить.
Код будет такой? Код:
GUICtrlSetState($comboreg, 256) |
Morpheus, ок, обновил посты, ссылки
|
Вложений: 1
Цитата:
Цитата:
AZJIO, скомпилируйте, пожалуйста, х86 и х64 версии и залейте к себе. Если хотите, можете сразу сформировать ZIP архивы со всем необходимым. Пожалуй, русский языковой файл для regscanner не стоит включать, иначе придется делать отдельные архивы для языковых версий... А вот readme от regscanner - обязательно, короче все, что идет в его комплекте (требования лицензии nirsoft). Smarty сделал значок 48х48 (включает меньшие размеры). На мой взгляд, он посимпатичнее (см. шапку), хотя и потяжелее. Можете использовать его, если нравится (прикреплен). Я потом перекину на софт-портал, сделаю описание там на двух языках и пропиарим немного :) |
Цитата:
|
Жми F5
|
Vadikan, теперь верю :)
|
Vadikan, выкладываю zip, проверте х64, а то я не могу проверить и терзают сомнения. Иконку всё же свою вставил, добавил 24, 32, 48, констраст по ярче, резкость поболее и цвет бирюзовый больше нравится.
|
AZJIO, спасибо! х64 я снова попросил глянуть Morpheus. Если все ок, на выходных все сделаю. Архив из поста можете удалить, чтобы не тратить место. Я уже перекинул на ФТП.
С вашего позволения я для англоязычных пользователей внесу некоторые изменения в пакет (ридми и т.п.). |
Vadikan, добавил "regedit -m" по вашему совету и исправил размеры окна и координаты кнопки для Win7. Не понимаю, почему при точном указании (5) кнопка в Win7 на 1 пиксел ниже, а в WinXP нормально...
При нескольких окнах regedit команда передаётся на последнее активное окно. Исходник с выбором утилит придётся оставить, с перезапуском regedit такой фокус не получается. |
AZJIO, спасибо! Понятно, что невозможно совместить перезапуск и открытие второго экземпляра regedit :)
Сейчас посмотрим, как она пойдет в массы, выявятся ли баги и какие хотелки объявятся. Потом выпустим обновление. |
AZJIO
1 Скачал х64 версию, запустил - интерфейс русский. Сменил язык на английский, посмотрел, а вот назад на русский язык поменять не удалось - нет русского языкового файла. Пришлось лезть в реестр (благо есть исходники) и удалять ключ языка. 2 Не увидел ни в шапке, ни в readme описание отличий версий х86\х64. В исходниках видел переключение по @OSArch или я что-то не понял? 3 Утилита RegScanner с английским интерфейсом хотя на оф. сайте есть русский языковой файл (всего 4кБ). Может стоит его добавить в Вашу утилиту и переключать язык синхронно (JumpReg и RegScanner)? 4 Стоит ли утилите хранить свои настройки и прочее в реестре, может будет достаточно ini файла, дабы не засорять реестр? Тестировал на Win7 x64. |
gora
1. здесь есть русский языковой файл (и немецкий). Можно не лезть в реестр, а удалить англ. файл и в реестре сбросится при отсутствии файла. 2. Разницы никакой, только в поддержке системы. 3. Опять же пункт 1, там всё есть. 4. Реестр создан, чтоб его засорять. Он в памяти, и скорость работы с ним быстрее чем с ini. |
AZJIO
1 Почему же в шапке старая версия!? 2 Будут запускаться разные regedit.exe (x86\x64) и\или я не смогу добраться до х64 разделов реестра, если буду использовать JumpReg x86 на х64 системе? По Вашей ссылке только один вариант лежил. 3 При смене языка в JumpReg в RegScanner всегда русский, а я писал про синхронное переключение. 4 Позиция понятна, хотя я не уверен, что она верная. :) |
Цитата:
Цитата:
Цитата:
В разных версиях JumpReg разный RegScanner лежит. |
gora, язык определяется автоматически (рус/анг), и языковой английский файл там представлен в качестве образца, а не для импорта. Утилита настолько проста, что во всех остальных случаях переключение языка в интерфейсе не требуется - один раз поставил и забыл.
RegScanner - вспомогательная утилита. Размещение русского языкового файла потребовало бы два разных комплекта распространения JumpReg только по этой причине. Кому нужен RegScanner - пользуется, кому не нужен - не пользуется. Кому нужен русский - качает языковой файл. Да и без русского там все примитивно. Синхронное переключение языка усложняет JumpReg, не давая ей самой никакого дополнительного функционала, посему не нужно. В шапке находится текущая версия. Все остальное - бета для тестирования следующего официального релиза. Реестр - нормальный способ считывания данных. Вас же не смущает, что ОС считывает оттуда вместо файловой системы. |
Vadikan, я написал свое мнение в свете Вашей фразы:
Цитата:
Цитата:
2 Цитата:
Цитата:
|
Цитата:
Цитата:
Цитата:
P.S. Если автор захочет, он внедрит эти хотелки, я просто излагаю свое видение вопроса. |
AZJIO, а можно ли в 64-битной версии предусмотреть возможность запуска 32-редактора реестра (галкой в настройках где-нибудь, например)? Нужно не часто, но вот сейчас понадобилось и пришлось запускать отдельно 32-битную утилиту.
|
Morpheus, Для теста придётся попробовать конструктором собрать x64, уже к этому склоняюсь судя по тому, что многим нужна версия для x64.
Тогда придётся сделать отдельную версию скрипта x64 и добавить там пункт "Использовать x86" и две версии regscanner... так? Галочка на пункте просто подменит путь к regscanner другой версии... так? |
Цитата:
Цитата:
|
Есть аналогичного назначения надстройка для Regedit'а - RegeditX.
Или назначение вашей программы отличается? |
Цитата:
Хотя такая интеграция очень интересна. |
Morpheus, RegeditX не коммерческий, а RegCrawler - да. Когда-то переводил вторую бета-версию, работает вроде без глюков даже в Win7 32x. Ограничения по времени нет.
Если кому нужно - http://rghost.ru/4292959 |
Morpheus, сделал, несложно, времени не было и настроя. Если что, строка 124 указан путь основной и в строке 366 пеерключение. Можно указать другие пути, сейчас RegScanner и RegScanner_x86.
|
murder, спасибо, но не пойдёт. В 64-битке запускает 32-битный regedit.
AZJIO, спасибо! Всё супер! |
AZJIO, я только сейчас обратил внимание, что 64-разрядная версия утилиты запускает 32-разрядный редактор реестра (Windows 7 x64). Я думаю, что это неправильно. Потому что если запускать regedit обычным путем, система вызывает 64-разрядный редактор.
|
Vadikan, Разве не от RegScanner зависит?
|
AZJIO, да, все верно, видно у меня со сборкой напутано что-то... Перекачал.
|
Vadikan, можно сделать без RegScanner, вот пример
Код:
; Запуск редактора реестра |
AZJIO, спасибо! Мы вроде проходили такой вариант, но отказались от него https://www.outsidethebox.ms/11147/#whyregscanner
|
Vadikan, Так это же не такой вариант. Перезапуска нет, это видно из скрипта. Выполняется функция _Jump, далее через секунду выполняется ещё раз. Это для примера, что перезапуска нет. Функция "ControlTreeView" позволяет сделать выбор в текущем дереве, но при условии что дерево развёрнуто. Поэтому параметр "Expand" разворачивает дерево в цикле, углубляясь до последнего, а параметр "Select" делает выбор.
В принципе плюс только в неиспользовании сторонних утилит. Но при условии что у RegScanner ещё и удобный поиск, то можно оставить как есть. |
Vadikan, JumpReg обновил до версии 0.8
Исходник с выбором сторонних утилит стал основным, так как переход к разделу без сторонних утилит не требует перезапуска regedit. Выпадающий список теперь имеет размер не менее 600 В меню пункт "Добавить в избранное" (добавляет и в меню и в файл) Все диалоговые окна теперь дочерние И другие незначительные исправления: При наличии RegScanner автоматически используется он. При его удалении автоматически включается "без сторонних утилит" При запуске второго окна RegEdit убрал ошибку: если поле пустое, то не пытается автоматически перейти в раздел. Пункт меню: "Поиск с помошью RegScanner" не появляется если его нет. Функцию _SetCoor обновил (диалог не окажется за экраном). На Win7 не тестил, но сменил стиль, который потребовал на 30 уменьшить высоту окна. А также стиль $WS_CLIPCHILDREN для уменшения мерцания. В планах можно ещё добавить сохранение ширины окна. |
AZJIO, спасибо, всё отлично!
Цитата:
![]() Цитата:
Цитата:
Хотя я RegScanner уже выпилил и мне собстно пофиг :) Просто показалось, что это было бы логично. |
Ещё обновил
Добавлено сохранение ширины окна В избранном подерживается разделитель, строка вида: <---> с любым количеством тире В меню пункт "Открыть другой файл избранного" Цитата:
Цитата:
А вот в режим "без сторонних утилит" переключается в случае если человек использует RegScanner, а потом решал отказаться, то лезть в меню не обязательно, удалил и режим автоматом переключился. В большинстве случаев я нацелил на RegScanner и "без сторонних утилит". Остальные варианты с другими утилитами вручную через меню. Я даже не стал их автоматически проверять наличие, так как путь не известен, nircmd может быть в системных папках или в каталоге программы. Кстати команду Run('regedit.exe') сделал так Run(@WindowsDir & '\regedit.exe') Чтобы цеплялся только тот regedit.exe, который в правильном каталоге. |
AZJIO, теперь нормальный размер, спасибо!
|
AZJIO, хотел бы попросить вас сделать так, чтобы можно было переходить в ветку реестра при вставке кода с скобками типа []:
Windows Registry Editor Version 5.00 ;Настройка Total [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\*\Shell\Open in Total Commander] @="Откроем в Total Commander" так удобнее (быстрее) с файла реестра скопировать и вставить |
Добавил, ссылка таже JumpReg
|
Обновлено:
Если поле ввода пустое, то JumpReg ищет путь-раздел реестра в буфере обмена, причем игнорируя символы переноса строк, скобки и тире [- ] Можно вертикально выделять строку из рег-файла. |
AZJIO, а x64 версия будет?
|
JumpReg - проверь, у меня нет возможности проверить. Добавил x64 в общий дистрибутив.
|
Pozia, спасибо за идею, давно не хватало.
AZJIO, спасибо за обе фишки! Здорово. А почему когда я компилирую 64-битную версию, она получается килобайт на 80 больше? От версии AutoIT зависит что ли? У меня v3. |
Morpheus, я компилирую на 3.3.6.1, вот эта сборка. Файл x86 - 293 кб, а x64 - 779 кб. Может сжатие не сработало на x64, может надо компилировать в x64 системе.
Кстати проверил разделитель "|" в реестре, он ислоьзуется, например в только в разделе HKEY_CLASSES_ROOT\Installer\Assemblies\C:|WINDOWS|Microsoft.NET|Framework|v3.5|MSBuild.exe Исходя из ситуации желательно изменить разделитель в JumpReg. Я вынес разделитель в переменную, чтоб его можно было поменять, попробовать табуляцию. Желательно чтобы он был виден в JumpRegFav.ini, а не сливался с текстом как пробел. Пока случай редкий поэтому не тороплюсь менять разделитель на сомнительный вариант. |
Цитата:
|
Короче фиг знает. Даже в 32-битной XP и на этой сборке получается 851 кб.
За разделитель спасибо, но менять пока тоже не спешу, прецедентов ошибок из-за него пока не было. |
Цитата:
Цитата:
Цитата:
Предлагаю допилить текущий вариант, обновить посты по первым трем ссылкам в шапке и скомпилировать. После чего я соберу набор для софт-портала и обновлю там утилиту. |
Цитата:
|
AZJIO
1 При первом запуске (с пустой историей) и нажатии выпадающего списка, наблюдаю артефакт справа: ![]() 2 Ни в шапке темы, ни в Readme_Ru.txt не ни слова о том, что утилита хранит настройки в реестре. 3 Утилита не имеет инсталлятора и деинсталлятора. Возможно он ей и не нужен, но кто-то же должен очистить реестр после удаления утилиты или хотя бы предупредить об этом пользователя. 4 Выпадающий список имеет фиксированную ширину. Лучше сделать его ширину подстраивающейся под максимальную длину пути в этом выпадающем списке, ограничив ее максимальное значение разумной величиной. Тогда и п.1 исчезнет. |
Цитата:
то всё равно желательно использовать какой либо символ разделителя (не из бинарных), чтобы записывать историю в реестр одной строкой. Вообщем пока нет желания изменять, так как случай маловероятный, 1 на 10000 Цитата:
Цитата:
Цитата:
Обфускатор удалит неиспользуемые функции из UDF перед компиляцией их в файл. |
Цитата:
А много видели людей (ну кроме себя), которым это интересно? Мне перпендикулярно, где чего хранит программа. Уверен, что и 99% пользователей тоже. Цитата:
Цитата:
|
gora,
Цитата:
Цитата:
Если сделать кнопку после комбо, то артефакта нет. 3. Инсталятор наверно лишнее, можно reg-файл положить для очистки. 4. Я об этом думал, как можно вычислить ширину строки в комбо? Если примитивным методом, то проверять длинну каждой строки в комбо (все 20 или все 50) при каждом прыжке. будет ли это экономичным? Я хотел добавить ширину в настройки, но показалось это лишнее. Просто этот оптимальный минимум позволит сжать утилиту компактно по ширине, не потеряв при этом видимость строк раскрывающегося списка. |
AZJIO,
С разделителем понятно. Допилить - остановиться на каком-то наборе уже оттестированных новых функций и сделать релиз. Компиляцию я оставляю на ваше усмотрение, но все-таки лучше без UPX, размер утилиты не столь велик. Когда будет готово, пинганите меня, я соберу набор для обновления на софт-портале. P.S. Упоминание про хранение в реестре и деинсталлятор не нужны. |
Я ещё решил добавить поддержку горячей клавиши и ком-строки. Горячая клавиша позволит не активируя окна сделать прыжок, а ком-строка позволит выделив текст послать его назначенной в редакторе горячей клавишей послать прыжок в реестр. Последнее конечно с учётом что редактор это умеет, например Notepad++, SciTE.
Вобщем то горячая клавиша уже работает, осталось запись/чтение в реестре сделать. Но используется не HotKeySet, у него проблемы с русской раскладкой, использую GuiHotKey.au3 от rasim. |
Готово JumpReg, но глубоко не тестил.
В 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> кавычки не отображаются.. в общем &квот; Перезалил, отключил попытку повторной регистрации той же горячей клавиши при применении настроек. Новые тексты перенёс в языковые файлы. Хотел сделать копирование строки Send('^{INS}') при использовании горячей клавиши, но не пойму почему не работает, может потому что вызывается из процедуры WM_HOTKEY, которая сама обрабатывает текущий HOTKEY. Перезалил добавив x64 |
AZJIO, спасибо!
Цитата:
|
Morpheus, всем известно что передаваемые в ком-строку параметры разделяются пробелами, если не обрамлены кавычками, соотвественно при выделении раздела в котором есть пробел у меня сразу же выдало ошибку, что раздела нет, так как часть его пути до пробела передалась. Для горячей клавиши это отношения не имеет.
перезалил добавив x64 |
AZJIO, а, тогда ок. Думал, что кавычки относятся к хоткеям.
Цитата:
|
Цитата:
|
Обновил JumpReg
1. Задейсвовал всё-таки Send('^{INS}'), видимо не работал из-за горячей клавиши Alt, с Ctrl+1 без проблем. То есть достаточно выделить строку в редакторе / браузере и вызвать горячую клавишу. 2. Иногда в браузере захватывает лишний пробел, чтоб не напрягаться точным выделение текста добавил в игнор все пробельные символы начала и конца. 3. Добавил разворачивание последнего раздела, чтобы в дереве видеть существование вложенных разделов. 4. Теперь возможно выделить весь reg-файл или всю страницу браузера и горячей клавишей вызвать извлечение всех строк разделов реестра с предложением открыть первую или импортировать строки в раскрывающийся список. Перезалил, оптимизировал импорт, при импорте из reg-файлов размером мегабайт отсутствует торможение поиска, так как ищутся только количество, которое может поместиться в раскрывающийся список. И исключение дублирующих из списка импорта. Исправил ошибку переменной при обфускации. |
Поправки:
1. При увеличении количества элементов в раскрывающемся списке отсутсвовало обновление списка при импорте строк из буфера, теперь работает. 2. Усложнил регулярное выражение. Не отлавливало пути содержащие пробел в последнем элементе пути Суть регулярного выражения захватить строку начинающуюся с известных корневых разделов, например HKCU, далее набор повторяющихся групп заканчивающихся символом "\" чтобы не захватывать лишнее внутри группы допускаются не более 4 слов, то есть 4 группы заканчивающиеся пробелом. В каждой группе запрещены символы переноса строк. Последнее слово может либо содержать пробелы но оканчиваться концом строки, либо не содержать пробелов и обрываться при первом пробеле, то есть если нет конца строки, то обрывается по пробелу. |
JumpReg - тестовый вариант, который при первом запуске спрашивает где хранить настройки, в реестре или в ini-файле. Если ini-файл рядом с JumpReg.exe, то приоритет ini-файл, даже если настройки есть в реестре.
Кстати, раздел настроек в реестре поменялся. Список в комбобоксе теперь сохраняется только при выходе из программы. |
AZJIO, заметил только сейчас, что на Seven x64 JumpReg запускает regedit 32bit и при физическом отсутствии искомой ветки не спрашивает перейти ли в ближайшую похожую а ломится куда попало.
|
Pozia, проверь, что версия последняя "0.8.1 2012.08.22", проверь в каком режиме прыжок "без сторонних утилит"?
И проверь отдельно работу функции Код:
MsgBox(0, '', _RegExists('HKEY_CURRENT_USER\Software\Microsoft\Windows\ShellNoRoam\MUICache')) Пока предположений нет... И у меня нет Win7 x64. |
AZJIO, перекачал из 167 сообщения - у меня была версия 0.8.0, хотя оттуда качал вроде. Тихо обновили что ли? ) На версии 0.8.1 все нормально.
Если еще что нужно проверить то не понял, что значит Цитата:
И как проверить отдельно функцию приведенную? |
Pozia, Если теперь работает, то проверять нет смысла. Вставить несущестующий раздел реестра и проверить правильность результата, 0 - не существует, 1 - существует. В предыдущей версии эта функция была другая. То есть была оптимизация кода, но функциональность не изменялась, поэтому я и не отписывал (об ошибках в предыдущей версии ведь никто не сообщал ). В плане функционала добавилась поддержка сохранения в ini, но так как она была нужна только одному пользователю этой программы, то я и не афишировал для всех, просто потестировал пару недель и в виду стабильности UDF _Setting.au3 окончательно оставил.
Выбор "без сторонних утилит": "Главное меню программы > ? > Настройки", но уже не важно. |
Время: 07:46. |
Время: 07:46.
© OSzone.net 2001-