PDA

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


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

Vadikan
09-01-2011, 12:48
(GetUserDefaultLocaleName) и KaFu (GetUserDefaultLangID) »
Это UserLocale - Формат в региональных настройках. Это тоже можно использовать, но если можно определить язык интерфейса ОС у текущего пользователя, то мне кажется - это самый точный выбор для языка интерфейса программы.

AZJIO
09-01-2011, 12:58
Вот переделал скрипт с офсайта с GetUserDefaultUILanguage, если у вас выдаст 0419, то используем этот вариант.
$Lang_dll = DllOpen("kernel32.dll")
$UserIntLang=DllCall ( $Lang_dll, "int", "GetUserDefaultUILanguage" )
If @error Then
$UserIntLang="UNKNOWN"
Else
$UserIntLang=Hex($UserIntLang[0],4);conversion en HEX
EndIf
DllClose($Lang_dll)
MsgBox(0, 'Message', $UserIntLang)

А я предыдущий пост правил )))), а нового не видел...

Vadikan
09-01-2011, 13:44
если у вас выдаст 0419 »
Выдал :)

Я еще вспомнил, что хотел исправить в английской локализации:
$LngMs7='Error: invalid name for the root registry key'
$LngMs8='The key does not exist. The nearest key is:'

И надо как-то предусмотреть в скрипте возможность перевода на другие языки. Как я понимаю, сейчас будет выбор: если 0419 - русский, если другой - английский. Перебирать все возможные langid нет смысла, но, например, можно дать юзеру возможность прописать свой langID и соответственно добавить собственный набор строк на родном языке.

Да, и давайте на этом сделаем отсечку для релиза, после чего можно дальше ковыряться по мелочи, а впоследствии делать следующий релиз по мере накопления изменений.

AZJIO
09-01-2011, 17:32
Vadikan, как то сомневался в необходимости многоязыковой поддержки, но всё-таки добавил. Языки En и Ru встроены и определяются автоматически. При открытии файла из папки Lang произойдёт запись в реестр имени файла и перезапуск утилиты с указанным языком. Чтобы вернуть встроенный язык нужно удалить/переименовать файл, который использовался прежде.
Поправка: теперь в историю не попадают не существующие разделы, пустая строка и отказные при несуществовании.
Версия 0.6

Vadikan
09-01-2011, 18:08
AZJIO, а какой формат ini файла?

AZJIO
09-01-2011, 18:37
Vadikan, так то я постоянную ссылку (http://azjio.ucoz.ru/load/vsjo_dlja_autoit3/skompilirovannye_skripty/jumpreg/4-1-0-36) обновляю.
Lang\En.ini
; This is a sample file for translating JumpReg interface to other languages
; Translate all strings and save the file with a new name, for example, FR.ini for French.
; In JumpReg, open ? -> Language and choose the language file.
[lng]
Title=JumpReg
About=About
Ver=Version
Site=Site
FIT=Define Favorites starting from the next line. After a separator | you can specify a name that has meaning only when importing favorites to Regedit; otherwise, the name is the last subkey.
FIT1=Folders user
FIT2=Environment Variables
FIT3=Environment variables, current
Fav=&Favorites
EdF=Edit Favorites
His=History
Exp=Export Ctrl+Down
Imp=Import
SzH=Size
AdF=Import Favorites to Regedit Ctrl+Up
ClF=Clear Favorites Ctrl+Del
TpE="Jump to the registry key in Regedit.\r\nEnter"
SWR=Search with RegScanner Alt+\
Top=Always on top
HsIB1=History
HsIB2=The number of records in the history:
Ms1=Message
Ms2=Clear Favorites in Regedit?
Ms3=Add JumpRegFav.ini entries\r\nto Regedit Favorites?
Ms4=Exported successfully to JumpRegSet.reg\r\nin the program folder.
Ms5=Error
Ms6=JumpRegSet.reg file not found.\r\nYou can create it with the Export command.
Ms7=Error: invalid name for the root registry key
Ms8=The key does not exist. The nearest key is:
Ms9=Do you want to jump to it?
SLng=Language
NRE=Regedit in a new window Ctrl+Enter

Morpheus
09-01-2011, 22:19
выложил промежуточные версии, чтоб отдетектить в какой момент появился этот глюк. »
Я хоть и достаточно терпеливый человек, но уже подташнивает... Тема на answers: windows 7 (x64 pro) window focus issues:when i open a program/window, sometimes it opens in the background instead of the foreground (http://social.answers.microsoft.com/Forums/en-US/w7files/thread/a55aec2b-ee7e-40f2-bc8b-8f4728671ca4)
Если бы поведение не менялось от запуска к запуску, было бы проще.
Воспроизводится и в 32-битной версии в 32-битной системе, и в 64 в 64, и в 32-версии в 64-битной Windows. Проще и быстрее воспроизвести последнее, практически стабильно возникает после ребута.

Итак, эффект не достигнут в версиях 3-5-6-7 (для повышения прав ставил флажок на вкладке "совместимость"), начиная с 8 воспроизводится.

AZJIO
10-01-2011, 00:03
Morpheus, сравнил скрипты, разница только в #RequireAdmin и в добавлении главного меню программы. Остальные мелочи не влияют, так как наличие новых переменных к уже существующим эффекта не даст и цикл опроса кнопок, которые не работают пока не нажать.
Проверте последнюю версию, удалив #RequireAdmin (строка 14), если нормальзуется, то добавлю опцию включения в меню программы. Ну а без главного меню уже не обойтись.

Morpheus
10-01-2011, 01:29
Проверте последнюю версию, удалив #RequireAdmin (строка 14) »
Блин, блин, блин... оно... Удалил - всё пока ок. Добавил строчку в версию под №7 - стало скрываться.
С флажком в совместимости работает нормально.

Vadikan
10-01-2011, 03:51
Утилита должна запускаться с полными правами, иначе переходы в регедит не будут работать, начиная со второго. Первый вызывает регедит, который запускается с полными правами. Но последующие должны переходить из ограниченного процесса в полноправный - это не будет работать. Точно так же не работает переход из ограниченного RegScanner в открытый регедит.

Флажок совместимости обеспечивает запуск с полными правами другим способом, прописывая в реестре в разделе AppCompat путь к программе. Но как-то неправильно делать совместимую с 7 утилиту за счет режима совместимости :)

SyDr
10-01-2011, 10:14
AZJIO, была похожая ситуация. После закрытия дочернего окна, окно-родитель прячется за всеми остальными окнами. Сначала решал проблему в лоб, а потом нашёл решение "покрасивее":
Попробуйте после строкиGUISetState()добавить строкуGUISetState(@SW_RESTORE)или строкиSleep(1)
GUISetState(@SW_RESTORE)Если первый вариант не сработает

Morpheus
10-01-2011, 12:15
добавить строку »
или строки »
Увы, прячется.

SyDr
10-01-2011, 15:11
Хм... Тогда можно попробывать решить проблему "в лоб". Там же:
WinActivate($GUI)
Или, опять таки:
Sleep(1)
WinActivate($GUI)

Vadikan
10-01-2011, 23:04
AZJIO, я тут подумал, что для релиза утилиты было бы удобнее не включать необходимые файлы и распаковывать их при первом запуске, а просто разместить их в папках параллельно утилите. Например,
\Regscanner - все файлы regscanner
\Lang - образец языкового файла (англ.)
\Source - исходники

Тогда в корневой папке останутся только утилита и ее файлы - избранное и история. Поаккуратнее будет. А в коде фактически нужно будет только поправить вызов regscanner и убрать включение доп. файлов.

Morpheus
11-01-2011, 02:09
Но как-то неправильно делать совместимую с 7 утилиту за счет режима совместимости »
Ага, согласен. Но лучше пусть едет с такими шашечками, чем не едет совсем :)
SyDr, что в лоб, что полбу, всё едино. 4 раза за 5 минут.

AZJIO
11-01-2011, 03:44
Vadikan, ссылку обновил, посты поправил. Языковой файл поправил, удалив у параметров начальные Lng, чтобы исключить подмены существующих переменных в скрипте путём вставки в ini одноимённых параметров.

Morpheus, оказалось директивы #RequireAdmin и т.д. нельзя вставлять внутрь условий. Поэтому невозможно добавить пункт в меню, который бы возможно было отключить (с перезапуском).

Morpheus
11-01-2011, 03:59
AZJIO, в любом случае спасибо! Для себя решение теперь знаю.

SyDr
11-01-2011, 09:53
AZJIO
http://autoit-script.ru/index.php/topic,2446.0.html

If Not IsAdmin() Then
ShellExecute(@AutoItExe, $CMDLineRaw, @WorkingDir, "runas", @SW_SHOWNORMAL)
Exit
EndIf

Собственно, скрипт с этими тремя строчками повторяет в своём поведении скрипт с #RequireAdmin, однако может быть легко модифицирован :)


Morpheus, там же (http://social.answers.microsoft.com/Forums/en-US/w7files/thread/a55aec2b-ee7e-40f2-bc8b-8f4728671ca4) , 9 часов назад:
JD Turner
I believe I have found the cause of this problem and possibly a cure.

I dual boot XP, Vista and Win7 and experienced this problem on all these versions of Windows. As a programmer, I decided to try to figure out what was going on and discovered that WM_KeyDown and WM_KeyUp messages were being sent (with scan code 0xFF) to the focused window/control, roughly once per second.

I considered the possibility of a bootsector-level virus and decided to swap out the disk so I needed to find out if I had SATA or a PATA drive. To do this safely, I had to disconnect the power and the battery (Dell laptop). When I reconnected the hard disk and started it up again it was fixed. (I later checked the bootsector - that was ok.)

My system was plagued by this problem for months but now it is fine. I am certain it is fine since all symptoms are now cured and the program I used to test the problem also definitively tells my system is ok. I am not absolutely certain that it was completely powering down the system that cured the problem but I definitely recommend you try it. If you have a desktop computer, consider swapping the keyboard - I figure that's where the problem was rooted.

Hope this helps.

Morpheus
11-01-2011, 12:14
SyDr, дело в том, что 64-ка у меня на VirtualBox.
Пробовал ещё это (http://www.sevenforums.com/general-discussion/45305-window-focus-issues-windows-7-pro-x64-2.html#post518351), но нифига.

AZJIO
11-01-2011, 12:17
SyDr, интересно, если права не будут получены, то фактически будет перезапуск в цикле. Нужно ещё предусмотреть подсчёт количества запусков через реестр за промежуток времени. Чтоб дать возможность отключить перезапуск более 3 раз. Или вставить в условие "Диалог с возможностью не перезапускать".

Morpheus, проверь этот код вместо #RequireAdmin
If Not IsAdmin() Then
MsgBox(0, 'Message', 'Нет прав, перезапускаем... с правами')
ShellExecute(@AutoItExe, $CMDLineRaw, @WorkingDir, "runas", @SW_SHOWNORMAL)
Exit
EndIf
Если будет получены права, то используем его. И может сворачивание пропадёт?




© OSzone.net 2001-2012