Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Пользователь


Сообщения: 56
Благодарности: 2

Профиль | Отправить PM | Цитировать


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

Глобальная трабла (на языке его Высочества 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]???

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

-------
И был сначала ZX-Spectrum, потом Pentium, а на 7-ой день появился AMD, но это - форзва!!!


Отправлено: 04:46, 12-01-2013 | #2