Показать полную графическую версию : копирование значения ключа реестра в .reg файле
Возможно ли с помощью .reg файла присвоить значение одного ключа реестра другому?
Т.е. если есть 2 ключа (в .reg файле это выглядит как):
[HKEY_LOCAL_MACHINE\SOFTWARE\New_Prog]
"Install" = "C:\\Program Files\\New_Prog\\"
и
[HKEY_CLASSES_ROOT\*\shell\proba\command]
хочется сделать:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\*\shell\proba\command]
@ = "cmd /c \"start \"New_Prog\" \"C:\\Program Files\\New_Prog\\Prog.exe\" %1\""
где путь: C:\Program Files\New_Prog\ нужно получать из [HKEY_LOCAL_MACHINE\SOFTWARE\New_Prog]
такое возможно?
Возможно ли с помощью .reg файла присвоить значение одного ключа реестра другому? »
С помощью .reg-файла? Нет.
такое возможно? »
Да.
Зачем так:
"cmd /c \"start \"New_Prog\" \"C:\\Program Files\\New_Prog\\Prog.exe\" %1\"" »
сложно? Что за приложение? Какова глобальная цель?
по поводу того, что сложно: мб, но другого варианта я не искал. Это работает и под Win XP, и под Win 7, что и требуется.
глобальная цель такая: нужно встроить свое приложение в контекстное меню Windows.
прикол в том, что:
1) в функцию при вызове должны передаваться имя файлика, по которому был сделан клик, и параметры (а как их передавать иначе без лишних кавычек я недопонял).
2) путь до утилиты записан в реестре и на разных компах может быть разным (его определяет пользователь при установке приложения). это нужно как-то учесть.
Вот.
Запуск приложения и параметр — это понятно. Зачем эта часть:
cmd /c \"start \"New_Prog\" »
?
Запуск приложения и параметр — это понятно. Зачем эта часть:
Цитата paerpo:
cmd /c \"start \"New_Prog\" »
? »
а как еще запускать прогу с параметрами? что здесь не так?
Да. »
и как же?
меня сейчас больше этот вопрос волнует.
а как еще запускать прогу с параметрами? что здесь не так? »
Почему не просто — «путь\имя.exe %1»? Зачем ещё и через «cmd.exe /c start»?
и как же? »
Я хочу отчётливо прояснить предыдущий вопрос.
Почему не просто — «путь\имя.exe %1»? Зачем ещё и через «cmd.exe /c start»? »
так оно не запускается >_<
можно делать «start путь\имя.exe %1» но тогда у меня не получалось передать 2-й и следующие параметры.
можно делать еще как-то так:
start путь\имя.exe "%1 <еще параметры>"
но тоже не айс, так как влом переписывать прогу и удалять лишние кавычки
вот и всё
собственно, проблему сам уже решил. сделал, как здесь (http://forum.oszone.net/thread-145974.html), взяв за основу пример скрипта.
хотелось просто сделать все при помощи .reg файла, но, видно, не судьба
Foreigner
19-02-2013, 18:52
но тогда у меня не получалось передать 2-й и следующие параметры. »
А ты пробовал? Откроет хоть двадцать файлов через ПКМ. На примере с блокнотом:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\*\shell\proba]
[HKEY_CLASSES_ROOT\*\shell\proba\command]
@="\"C:\\Windows\\system32\\notepad.exe\" %1"
Откроет хоть двадцать файлов через ПКМ »
К сожалению, так не получится передать несколько "файлов" одной программе (одному экземпляру) в виде цепочки параметров.
Для теста сделал AutoIt скриптMsgBox(0, '', $CmdLineRaw)
Exit
Скомпилировал в exe файл и прописал к нему путь в Вашем коде.
Выделил 4 файла и запустил через ПКМ - открылось 4 окна скрипта и в каждом по одному параметру (имя одного из выделенных файлов)
Foreigner
19-02-2013, 20:54
К сожалению, так не получится передать несколько "файлов" одной программе (одному экземпляру) в виде цепочки параметров. »
Это уже надо разбираться конкретно, ТС поставил общую задачу. Firefox, например, открыл сразу несколько файлов, в одном экземпляре приложения.
хотелось просто сделать все при помощи .reg файла, но, видно, не судьба »
Теоретически — можно, практически — нецелесообразно.
Теоретически — можно, практически — нецелесообразно. »
Кому-как. Просто есть ещё требование: нужно, чтобы при установке приложения "мелькало как можно меньше черных окошек" (запись в реестр идет во время установки приложения). Поэтому и хотелось бы писать в реестр значения при помощи .reg файла, а не скрипта.
Буду признателен, если всё же кто-нибудь подскажет, как это можно попробовать сделать хотя бы теоретически, а то ничего полезного на просторах интернета найти не получилось.
paerpo, используйте WSH — мелькать не будет.
Например:
Option Explicit
Const HKEY_CLASSES_ROOT = &H80000000
Const HKEY_LOCAL_MACHINE = &H80000002
Dim strValue
With WScript.CreateObject("WbemScripting.SWbemLocator").ConnectServer(".", "root\default").Get("StdRegProv")
If .GetStringValue(HKEY_LOCAL_MACHINE, "SOFTWARE\New_Prog", "Install", strValue) = 0 Then
If .SetStringValue(HKEY_CLASSES_ROOT, "*\shell\proba\command", "", "cmd.exe /c ""start ""New_Prog"" """ & strValue & "Prog.exe"" %1""") = 0 Then
WScript.Echo "[cmd.exe /c ""start ""New_Prog"" """ & strValue & "Prog.exe"" %1""]"
Else
WScript.Echo "Can't find registy path [HKEY_CLASSES_ROOT\*\shell\proba\command]."
End If
Else
WScript.Echo "Can't find registy path [HKEY_LOCAL_MACHINE\SOFTWARE\New_Prog\Install]."
End If
End With
WScript.Quit 0
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.