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

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Microsoft Windows 2000/XP (http://forum.oszone.net/forumdisplay.php?f=6)
-   -   [решено] Реестр(х32) и WOW6432Node (http://forum.oszone.net/showthread.php?t=250703)

UFO 007 05-01-2013 22:53 2059904

Реестр(х32) и WOW6432Node
 
Доброго всем времени суток!!!
Проблема я бы сказал глобальна не с легка (боюсь и на этом форуме 15 Кб текста в одно сообщение не влезут).
Поэтому - если Вас не не затруднит - ознакомьтесь с ней здесь .

Заранее благодарен

UFO 007 12-01-2013 04:46 2064811

Привет всем Ышо раз!!!

Глобальная трабла (на языке его Высочества Pascal [что подданный её Величества Delphi]) разрешилась "самостийно" (без вмешательства Delphi-программеров), но небольшой вопросец - остался (потому как он ближе к "Виндовцам", чем к "Дэлфийцам - позволю себе процетировать оного):

//====предисловия ради: ОСь ХРюша Х64

Выкопал как-то на бескрайних просторах то-ли Гугла, то-ли Тындекса *.reg_файл приблизительно следующего содержания:
......
;Добавление в контекстное меню "Мой компьютер" пункта "Диспетчер Устройств"
[HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Диспетчер Устройств\command]
@="%SystemRoot%\system32\mmc.exe /s %SystemRoot%\system32\devmgmt.msc"
......
{и тд тп (итого 5 пунктов, но остальные вродь как не интересуют - моя прога отрабатывает их досконально)}

и прочитав славяноязычные REMарки... - ХОЧУ!!! -> дубльклик по нему -> Добавить данные в реестр...-> Данные успешно внесены...-> и ... - т и ш и н а... Ну то что пункты не появились в меню - коню понятно: РегЕдит показал, что не то чтобы значения не прописались, а даже вышеуказанные ключи НЕ создались...
Нууу!!! - думаю: я его Щааа

(а тут, я извиняюсь - его Высочество Pascal - цитата (меня же самого - "плагиат") с исходного форума [но попытаюсь "перевести"]):

Код:1 Reg:= TRegistry.Create;...создаём переменную класса TRegistry, обладающую методами и свойствами(откр/закр, читать/писать, "добыть" данные, тип и тд и тп

Reg.RootKey:= HKEY_CLASSES_ROOT;... тут небольшое отличие от *.reg и *.cmd

If Form1.DevMan.Checked Then... если "птичка" Диспетчер Оборудования юзверем установлена, то
begin
Reg.OpenKey('CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Диспетчер Оборудования\command\', True);
...открываем ключ(CLSID\....) - (, True - если не сущ - создаём, False - просто читаем [создать - не можем])
Reg.WriteExpandString('', '%SystemRoot%\system32\mmc.exe /s %SystemRoot%\system32\devmgmt.msc');
... пишем значение КЛЮЧА (НЕ параметра)
Reg.CloseKey; ... Закрываем ключ - больше не нужен;
end;

и... Как ни парадоксально, но опять тишина... Тады эксперименту ради "заслал" (опять-таки на Pascalе) в тот же ключ значение:= UFO 007+999, а РегЕдит выудил это значение там куда его система отрефлектила: в той же ветке(HKCR) и почти том же ключе, но с небольшой вставочкой "WOW6432Node" в районе CLSID - щас уже точно не помню потому что благодаря нагугленному
Код:2 Reg64:= TRegistry.Create(KEY_ALL_ACCESS OR $0100); //(разница с Код:1 - ощущается?)
И вот тут Reg64 сделал (своё дело) то, что мне было нужно... (для остальных 4-х опций)
,но DevMan
Один Х...н - не работает ... И детальный "разбор полётов" (тот же РегЭдит) показал, что мы писали:
Reg.WriteExpandString('', '%SystemRoot%\system32\mmc.exe /s %SystemRoot%\system32\devmgmt.msc');
, а читаем: ...stemRoot%\ S Y S W O W 6432\mmc.exe!!!... хотя в вышеобматюканной папке одноимённый файл и проживает, но НЕ РАБОТАЕТ - пока не поправишь ручками на \system32\...
Вот тут и вызревает САМ ВОПРОС (вернее 2): что происходит (в этот момент - и почему) и само главно - как эту хрень победить (чтоб работало автоматом - типа из под RunOnceEx [или без Ех - хоть из под Start\Programs\Autorun]???

Заранее - благодарен.

yurfed 12-01-2013 04:56 2064813

Цитата:

Цитата UFO 007
[HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Диспетчер Устройств\command] »

а чего вы в ROOT полезли. Это виртуальная ветка. Её нет физически.

UFO 007 12-01-2013 05:02 2064815

СтопАнце - ток ща доглядел - мож не WriteExpandString, а просто WriteString??? - Ща проверю...

yurfed, Сорри - цитировать (по ходу движок форума не умеет) окромя как копипастить - не получается, но...
============================================================
а чего вы в ROOT полезли. Это виртуальная ветка. Её нет физически.
==========================================================
- эт не я полез - вот исходник целиком: (с того же дельфийского форума)

Код:
извиняюсь что это не есть код от Его Величества Pascalя - но чтоб Админ про тэги не ругался:
;Добавление в контекстное меню "Мой компьютер" пункта "Диспетчер Устройств"
[HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Диспетчер Устройств\command]
@="%SystemRoot%\system32\mmc.exe /s %SystemRoot%\system32\devmgmt.msc"

;Добавление в контекстное меню "Мой компьютер" пункта "Редактор Реестра"
[HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Редактор Реестра\command]
@="Regedit.exe"

;Добавление в контекстное меню "Мой компьютер" пункта "Диспетчер задач"
[HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Диспетчер Задач\command]
@="taskmgr"

;Добавление в контекстное меню "Мой компьютер" пункта "Установка и удаление программ"
[HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Установка и Удаление программ\command]
@="control appwiz.cpl"

Код:/end
при чём должен я Вам заметить для 3-х последних пунктов Мену - виртуальная ветка очень даже рельно прописывается (тут надо заметить - не из *.reg(что Вы видите выше), а из моего *.exe (повторюсь - собака ПОрыЛАСЬ в х64 - под х32 мож и *.рег работает: не на ком проверить)

Petya V4sechkin 12-01-2013 07:30 2064841

Цитата:

Цитата UFO 007
что происходит (в этот момент - и почему)

  1. Если импортируете REG-файл, находясь в 32-битной оболочке, например Total Commander,
  2. или вносите изменения в реестр из своей 32-битной программы:

UFO 007 12-01-2014 13:08 2287459

Цитата:

Цитата Petya V4sechkin
из своей 32-битной программы »

Огромное спасибо - действительно: если в диспетчере задач после delphi7.exe идёт постфикс *32, то и свои продукты она "генерит" с ним же. Делфийцы подсоветовали нужную версию - теперь всё пучком и я бы выложил результат, но меня добивает форумовская политика вложений - больше 1МБ выложить не могу (а .rar весит 2,9 МБ) и вопрос знатокам - если я удаляю вложение, то ссылка на него из любой темы/поста становится нерабочей?

UFO 007 16-04-2014 22:23 2339136

Цитата:

Цитата Petya V4sechkin
например Total Commander »

--- ЗвЫняйте, уважаемый, но ВИНДОВСКОММАНДЕР (начиная с вер. 5.00) - пусть он будет даже ХРЮкомандёр - для меня бессмертен:= wincmd - форева

Цитата:

Цитата UFO 007
действительно: если в диспетчере задач после delphi7.exe идёт постфикс *32, »

... сорри, сорри, сорри... - D7, D8, ,,, DXE - оказалось они все НЕ умеют компилить х64 - это подвластно только начиная с Delphi XE2


Огромное всем СПАСИБО!!!!

UFO 007 17-04-2014 02:08 2339204

Цитата:

Цитата yurfed
Её нет физически »

... "и всё-таки она" пишется (хоть и виртульная, а засланые значения "помнит" даже после перезагрузки)


Время: 08:22.

Время: 08:22.
© OSzone.net 2001-