PDA

Показать полную графическую версию : [решено] Утилита для перехода в заданный раздел реестра


Страниц : 1 2 3 4 5 [6] 7 8 9

SyDr
11-01-2011, 12:53
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)
Как ведёт себя окно?

Morpheus
11-01-2011, 13:00
AZJIO, права выдаются, но прятки продолжаются.

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

Vadikan
11-01-2011, 13:08
AZJIO, спасибо. Протестировал язык и последние изменения в структуре - все работает!

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

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

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

SyDr
11-01-2011, 14:01
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

При этом окно будет поверх всех окон, если в реестре не указано противоположное.

Yashied
11-01-2011, 14:51
Сделайте без всяких 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

AZJIO
11-01-2011, 14:59
SyDr, вобщем чтоб не заморачиваться, оставить как было, ведь WinSetOnTop работает через реестр и автовключать его не всем понравится. А через реестр есть выбор, у кого проблема, включит и забудет.

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

Morpheus
11-01-2011, 16:02
Думаю, правильно будет активировать на короткое время при запуске, а "поверх всех окон" - выбор оставить.
Код будет такой?
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: Немного подкорректировал первоначальный вариант и потестил. Пока проблем нет.

AZJIO
11-01-2011, 19:36
Morpheus, ок, обновил посты, ссылки

Vadikan
12-01-2011, 00:59
ок, обновил посты, ссылки »
да, пора отсечку »
Ок, code freeze! :) Скрипты и EN.ini для версии 0.6 прикреплены в шапке.

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

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

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

Morpheus
12-01-2011, 01:19
Smarty сделал значок 48х48 (включает меньшие размеры). На мой взгляд, он посимпатичнее (см. шапку), хотя и потяжелее. Можете использовать его, если нравится (прикреплен). »
Меня глючит? Что-то не наблюдаю.

Vadikan
12-01-2011, 01:22
Жми F5

Morpheus
12-01-2011, 01:29
Vadikan, теперь верю :)

AZJIO
13-01-2011, 02:41
Vadikan, выкладываю zip, проверте х64, а то я не могу проверить и терзают сомнения. Иконку всё же свою вставил, добавил 24, 32, 48, констраст по ярче, резкость поболее и цвет бирюзовый больше нравится.

Vadikan
14-01-2011, 00:01
AZJIO, спасибо! х64 я снова попросил глянуть Morpheus. Если все ок, на выходных все сделаю. Архив из поста можете удалить, чтобы не тратить место. Я уже перекинул на ФТП.

С вашего позволения я для англоязычных пользователей внесу некоторые изменения в пакет (ридми и т.п.).

AZJIO
23-01-2011, 05:57
Vadikan, добавил "regedit -m" по вашему совету и исправил размеры окна и координаты кнопки для Win7. Не понимаю, почему при точном указании (5) кнопка в Win7 на 1 пиксел ниже, а в WinXP нормально...
При нескольких окнах regedit команда передаётся на последнее активное окно.
Исходник с выбором утилит придётся оставить, с перезапуском regedit такой фокус не получается.

Vadikan
23-01-2011, 15:11
AZJIO, спасибо! Понятно, что невозможно совместить перезапуск и открытие второго экземпляра regedit :)

Сейчас посмотрим, как она пойдет в массы, выявятся ли баги и какие хотелки объявятся. Потом выпустим обновление.

gora
04-02-2011, 19:56
AZJIO
1 Скачал х64 версию, запустил - интерфейс русский. Сменил язык на английский, посмотрел, а вот назад на русский язык поменять не удалось - нет русского языкового файла. Пришлось лезть в реестр (благо есть исходники) и удалять ключ языка.
2 Не увидел ни в шапке, ни в readme описание отличий версий х86\х64. В исходниках видел переключение по @OSArch или я что-то не понял?
3 Утилита RegScanner с английским интерфейсом хотя на оф. сайте есть русский языковой файл (всего 4кБ). Может стоит его добавить в Вашу утилиту и переключать язык синхронно (JumpReg и RegScanner)?
4 Стоит ли утилите хранить свои настройки и прочее в реестре, может будет достаточно ini файла, дабы не засорять реестр?

Тестировал на Win7 x64.

AZJIO
04-02-2011, 20:18
gora
1. здесь (http://azjio.ucoz.ru/load/vsjo_dlja_autoit3/skompilirovannye_skripty/jumpreg/4-1-0-36) есть русский языковой файл (и немецкий). Можно не лезть в реестр, а удалить англ. файл и в реестре сбросится при отсутствии файла.
2. Разницы никакой, только в поддержке системы.
3. Опять же пункт 1, там всё есть.
4. Реестр создан, чтоб его засорять. Он в памяти, и скорость работы с ним быстрее чем с ini.

gora
04-02-2011, 21:04
AZJIO
1 Почему же в шапке старая версия!?
2 Будут запускаться разные regedit.exe (x86\x64) и\или я не смогу добраться до х64 разделов реестра, если буду использовать JumpReg x86 на х64 системе? По Вашей ссылке только один вариант лежил.
3 При смене языка в JumpReg в RegScanner всегда русский, а я писал про синхронное переключение.
4 Позиция понятна, хотя я не уверен, что она верная. :)




© OSzone.net 2001-2012