Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   копирование значения ключа реестра в .reg файле (http://forum.oszone.net/showthread.php?t=254328)

paerpo 18-02-2013 15:13 2093382

копирование значения ключа реестра в .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]

такое возможно?

Iska 18-02-2013 15:58 2093418

Цитата:

Цитата paerpo
Возможно ли с помощью .reg файла присвоить значение одного ключа реестра другому? »

С помощью .reg-файла? Нет.

Цитата:

Цитата paerpo
такое возможно? »

Да.

Зачем так:
Цитата:

Цитата paerpo
"cmd /c \"start \"New_Prog\" \"C:\\Program Files\\New_Prog\\Prog.exe\" %1\"" »

сложно? Что за приложение? Какова глобальная цель?

paerpo 18-02-2013 19:55 2093640

по поводу того, что сложно: мб, но другого варианта я не искал. Это работает и под Win XP, и под Win 7, что и требуется.

глобальная цель такая: нужно встроить свое приложение в контекстное меню Windows.
прикол в том, что:
1) в функцию при вызове должны передаваться имя файлика, по которому был сделан клик, и параметры (а как их передавать иначе без лишних кавычек я недопонял).
2) путь до утилиты записан в реестре и на разных компах может быть разным (его определяет пользователь при установке приложения). это нужно как-то учесть.

Вот.

Iska 18-02-2013 21:11 2093705

Запуск приложения и параметр — это понятно. Зачем эта часть:
Цитата:

Цитата paerpo
cmd /c \"start \"New_Prog\" »

?

paerpo 19-02-2013 14:48 2094264

Цитата:

Цитата Iska
Запуск приложения и параметр — это понятно. Зачем эта часть:
Цитата paerpo:
cmd /c \"start \"New_Prog\" »
? »

а как еще запускать прогу с параметрами? что здесь не так?

Цитата:

Цитата Iska
Да. »

и как же?
меня сейчас больше этот вопрос волнует.

Iska 19-02-2013 16:07 2094346

Цитата:

Цитата paerpo
а как еще запускать прогу с параметрами? что здесь не так? »

Почему не просто — «путь\имя.exe %1»? Зачем ещё и через «cmd.exe /c start»?

Цитата:

Цитата paerpo
и как же? »

Я хочу отчётливо прояснить предыдущий вопрос.

paerpo 19-02-2013 16:33 2094371

Цитата:

Цитата Iska
Почему не просто — «путь\имя.exe %1»? Зачем ещё и через «cmd.exe /c start»? »

так оно не запускается >_<
можно делать «start путь\имя.exe %1» но тогда у меня не получалось передать 2-й и следующие параметры.
можно делать еще как-то так:
start путь\имя.exe "%1 <еще параметры>"
но тоже не айс, так как влом переписывать прогу и удалять лишние кавычки
вот и всё

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

Foreigner 19-02-2013 18:52 2094477

Цитата:

Цитата paerpo
но тогда у меня не получалось передать 2-й и следующие параметры. »

А ты пробовал? Откроет хоть двадцать файлов через ПКМ. На примере с блокнотом:
Код:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\shell\proba]

[HKEY_CLASSES_ROOT\*\shell\proba\command]
@="\"C:\\Windows\\system32\\notepad.exe\" %1"


gora 19-02-2013 19:55 2094521

Цитата:

Цитата Foreigner
Откроет хоть двадцать файлов через ПКМ »

К сожалению, так не получится передать несколько "файлов" одной программе (одному экземпляру) в виде цепочки параметров.
Для теста сделал AutoIt скрипт
Код:

MsgBox(0, '', $CmdLineRaw)
Exit

Скомпилировал в exe файл и прописал к нему путь в Вашем коде.
Выделил 4 файла и запустил через ПКМ - открылось 4 окна скрипта и в каждом по одному параметру (имя одного из выделенных файлов)

Foreigner 19-02-2013 20:54 2094575

Цитата:

Цитата gora
К сожалению, так не получится передать несколько "файлов" одной программе (одному экземпляру) в виде цепочки параметров. »

Это уже надо разбираться конкретно, ТС поставил общую задачу. Firefox, например, открыл сразу несколько файлов, в одном экземпляре приложения.

Iska 20-02-2013 07:43 2094859

Цитата:

Цитата paerpo
хотелось просто сделать все при помощи .reg файла, но, видно, не судьба »

Теоретически — можно, практически — нецелесообразно.

paerpo 20-02-2013 16:20 2095148

Цитата:

Цитата Iska
Теоретически — можно, практически — нецелесообразно. »

Кому-как. Просто есть ещё требование: нужно, чтобы при установке приложения "мелькало как можно меньше черных окошек" (запись в реестр идет во время установки приложения). Поэтому и хотелось бы писать в реестр значения при помощи .reg файла, а не скрипта.

Буду признателен, если всё же кто-нибудь подскажет, как это можно попробовать сделать хотя бы теоретически, а то ничего полезного на просторах интернета найти не получилось.

Iska 20-02-2013 19:10 2095286

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



Время: 21:13.

Время: 21:13.
© OSzone.net 2001-