Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Утилита для перехода в заданный раздел реестра

Ответить
Настройки темы
[решено] Утилита для перехода в заданный раздел реестра

(*.*)


Сообщения: 36570
Благодарности: 6700


Конфигурация

Профиль | Сайт | Отправить PM | Цитировать




Исходники версии 0.6 входят в комплект с программой.

Текущий скрипт для компиляции утилиты
Текущий скрипт для тех, кто желает выбрать способ перехода в реестр
Текущий английский языковой файл (образец для перевода)

Разработка: AZJIO



Промежуточные решения
Оболочка для regjump
Без сторонних утилит
Без сторонних утилит (с запоминанием ввода путей)

С чего все начиналось
Я сделал простенькую оболочку для утилиты regjump, поскольку так и не смог найти корректно работающий аналог под 7.




Код: Выделить весь код
; Simple GUI wrapper for regjump http://technet.microsoft.com/en-us/sysinternals/bb963880
; regjump must reside in %path%
; Run the script elevated when UAC is on

#include <GUIConstantsEx.au3>

Opt("GUIOnEventMode", 1)  ; Change to OnEvent mode 
$mainwindow = GUICreate("JumpReg", 400, 100)
GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")
GUICtrlCreateLabel ("Путь к разделу реестра:", 20, 10)
$path = GUICtrlCreateInput("", 20, 30, 360, 20)
$jumpbtn = GUICtrlCreateButton("Jump", 170, 60, 60) ;Registry path input field
GUICtrlSetOnEvent($jumpbtn, "OKButton")
GUISetState(@SW_SHOW)
$exe = "regjump.exe "

While 1
  Sleep(1000)  ; Idle around
WEnd

Func OKButton()
  $jump = $exe & GUICtrlRead($path)
  Run(@ComSpec & " /c " & $jump, "", @SW_HIDE)
 ;Run("regjump.exe" & " " & GUICtrlRead($path), "", @SW_SHOW) ;works, but shows cmd window

EndFunc

Func CLOSEClicked()
  Exit
EndFunc
На большее моих знаний AutoIt и программирования в целом не хватает Но все-таки хотелось бы сделать так, чтобы после ввода раздела реестра в поле активной становилась кнопка. Это позволит просто нажимать Enter, вместо TAB+Enter.

Подскажете, как это сделать?

Спасибо.

P.S. Скрипт нужно запускать с полными правами.

-------
Канал Windows 11, etc | Чат @winsiders

Это сообщение посчитали полезным следующие участники:

Отправлено: 16:09, 19-12-2010

 

Аватара для SyDr

Старожил


Сообщения: 215
Благодарности: 62

Профиль | Отправить PM | Цитировать


AZJIO
Цитата AZJIO:
SyDr, интересно, если права не будут получены, то фактически будет перезапуск в цикле. »
Если права не получены, функция ShellExecute устанвливает значение флага @error не равным 0.

ИМХО, тут идеально такое поведение:
Вывести запрос UAC
Если разрешение получено - продолжить работу, как обычно.
Если не получено - продолжить работу и вывести запрос с предложением отключить автоматический запрос на повышение прав.
Только тут проблема с бесконечным перезапуском, если запускать с ограниченными правами и отключённым UAC. То есть надо проверять ещё и включён/отключён ли UAC.

Morpheus, даже не знаю. Будем продолжать мучаться? Можно попробывать активировать окно (оно ведь активно после запуска? В панели задач.), затем установить атрибут поверх всех окон, и через минмальный промежуток времени снять.
Код: Выделить весь код
GUISetState()
GUISetState(@SW_RESTORE)
Sleep(300)
WinSetOnTop($GUI, '', 1)
Sleep(300)
WinSetOnTop($GUI, '', 0)
Sleep(300)
Как ведёт себя окно?

-------

"Что мы думаем, знаем или во что верим в конце концов не так уж и важно.
Важно лишь то, что мы делаем."
Джон Раскин

Это сообщение посчитали полезным следующие участники:

Отправлено: 12:53, 11-01-2011 | #101



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Morpheus

Ветеран


Сообщения: 12426
Благодарности: 2328

Профиль | Отправить PM | Цитировать


AZJIO, права выдаются, но прятки продолжаются.

Цитата SyDr:
Можно попробывать активировать окно (оно ведь активно после запуска? В панели задач.), затем установить атрибут поверх всех окон, и через минмальный промежуток времени снять. »
Была идея это предложить. Сейчас опробую.

Отправлено: 13:00, 11-01-2011 | #102


(*.*)


Сообщения: 36570
Благодарности: 6700

Профиль | Сайт | Отправить PM | Цитировать


AZJIO, спасибо. Протестировал язык и последние изменения в структуре - все работает!

Я поправил языковой файл, добавив в него коммент в начале (пост обновлен). Я также поправил в коде
Код: Выделить весь код
$LngAdF='Import Favorites to Regedit	Ctrl+Up'
(пост обновлен). Это мой косяк в переводе

В общем, все готово к релизу, только мне непонятно, мешает ли ему эта дискуссия с окном в фоне, тянущаяся последние несколько дней

-------
Канал Windows 11, etc | Чат @winsiders


Отправлено: 13:08, 11-01-2011 | #103


Аватара для Morpheus

Ветеран


Сообщения: 12426
Благодарности: 2328

Профиль | Отправить PM | Цитировать


SyDr, аха, скрывается при старте (когда глюк проявляется) и тут же появляется.
Думаю, такое решение можно считать приемлемым. Спасибо!
P.S. Пробовал в связке с #RequireAdmin.

Отправлено: 13:25, 11-01-2011 | #104


Аватара для SyDr

Старожил


Сообщения: 215
Благодарности: 62

Профиль | Отправить PM | Цитировать


Morpheus, ещё не всё

По идее, чтобы было правильно, надо удалить вот эту часть:
Код: Выделить весь код
$TrTop=RegRead('HKCU\Software\JumpRegAzjio', 'Topmost')
If Not @error And $TrTop=1 Then
	WinSetOnTop($GUI, '', 1)
	GUICtrlSetState($Topmost, 1)
EndIf
И всё в том же месте, где и всегда:
Код: Выделить весь код
GUISetState()
GUISetState(@SW_RESTORE)
WinSetOnTop($GUI, '', 1)
$TrTop=RegRead('HKCU\Software\JumpRegAzjio', 'Topmost')
If Not @error And $TrTop=0 Then
	WinSetOnTop($GUI, '', 0)
	GUICtrlSetState($Topmost, 0)
EndIf
При этом окно будет поверх всех окон, если в реестре не указано противоположное.

-------

"Что мы думаем, знаем или во что верим в конце концов не так уж и важно.
Важно лишь то, что мы делаем."
Джон Раскин


Отправлено: 14:01, 11-01-2011 | #105


Аватара для Yashied

Старожил


Сообщения: 206
Благодарности: 88

Профиль | Отправить PM | Цитировать


Сделайте без всяких WinSetOnTop(), просто

Код: Выделить весь код
$TrTop = RegRead($HKCU & '\Software\JumpRegAzjio', 'Topmost')
$GUI = GUICreate($LngTitle, 548, 84, $aPos[1], $aPos[2], 0x00040000 + 0x00020000 + 0x00010000, 8 * $TrTop) ; WS_EX_TOPMOST = 0x00000008

Отправлено: 14:51, 11-01-2011 | #106


Аватара для AZJIO

Старожил


Сообщения: 265
Благодарности: 126

Профиль | Отправить PM | Цитировать


SyDr, вобщем чтоб не заморачиваться, оставить как было, ведь WinSetOnTop работает через реестр и автовключать его не всем понравится. А через реестр есть выбор, у кого проблема, включит и забудет.

Vadikan, да, пора отсечку.

Отправлено: 14:59, 11-01-2011 | #107


Аватара для Morpheus

Ветеран


Сообщения: 12426
Благодарности: 2328

Профиль | Отправить PM | Цитировать


Думаю, правильно будет активировать на короткое время при запуске, а "поверх всех окон" - выбор оставить.
Код будет такой?
Код: Выделить весь код
GUICtrlSetState($comboreg, 256)
GUISetState()
GUISetState(@SW_RESTORE)
Sleep(200)
WinSetOnTop($GUI, '', 1)
WinSetOnTop($GUI, '', 0)

$TrTop=RegRead('HKCU\Software\JumpRegAzjio', 'Topmost')
If Not @error And $TrTop=1 Then
	WinSetOnTop($GUI, '', 1)
	GUICtrlSetState($Topmost, 1)
EndIf
UPD: Немного подкорректировал первоначальный вариант и потестил. Пока проблем нет.

Последний раз редактировалось Morpheus, 11-01-2011 в 16:56.


Отправлено: 16:02, 11-01-2011 | #108


Аватара для AZJIO

Старожил


Сообщения: 265
Благодарности: 126

Профиль | Отправить PM | Цитировать


Morpheus, ок, обновил посты, ссылки

Отправлено: 19:36, 11-01-2011 | #109


(*.*)


Сообщения: 36570
Благодарности: 6700

Профиль | Сайт | Отправить PM | Цитировать


Вложения
Тип файла: zip jumpreg_ico.zip
(29.0 Kb, 7 просмотров)

Цитата AZJIO:
ок, обновил посты, ссылки »
Цитата AZJIO:
да, пора отсечку »
Ок, code freeze! Скрипты и EN.ini для версии 0.6 прикреплены в шапке.

AZJIO, скомпилируйте, пожалуйста, х86 и х64 версии и залейте к себе. Если хотите, можете сразу сформировать ZIP архивы со всем необходимым. Пожалуй, русский языковой файл для regscanner не стоит включать, иначе придется делать отдельные архивы для языковых версий... А вот readme от regscanner - обязательно, короче все, что идет в его комплекте (требования лицензии nirsoft).

Smarty сделал значок 48х48 (включает меньшие размеры). На мой взгляд, он посимпатичнее (см. шапку), хотя и потяжелее. Можете использовать его, если нравится (прикреплен).

Я потом перекину на софт-портал, сделаю описание там на двух языках и пропиарим немного

-------
Канал Windows 11, etc | Чат @winsiders


Отправлено: 00:59, 12-01-2011 | #110



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Утилита для перехода в заданный раздел реестра

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Доступ - [решено] Почему параметры реестра импортируются в раздел WOW6432Node loveaboveall Microsoft Windows 7 17 17-01-2011 12:13
CMD/BAT - [решено] Смена прав на раздел реестра и его удаление primewar Скриптовые языки администрирования Windows 20 30-11-2010 22:17
Утилиты - [addon] ERUNT - утилита для бэкапа реестра. Boa Soft Наборы обновлений для Windows XP/2003/Windows 7 18 03-10-2010 18:24
Интерфейс - [решено] Ярлык для перехода в режимы сна в Vista x64 SP2 BBeard Microsoft Windows Vista 5 29-06-2009 11:42
[решено] Невозможно удалить раздел реестра alexandri Microsoft Windows 2000/XP 5 18-01-2007 09:09




 
Переход