Потърсете ключ в системния регистър

Tovarischi, моля, помогнете ми с един проблем, в Delphi трябва да намерите определен ключ в системния регистър. Това е случая -
Тук HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Enum \ USB \ Vid_12d1 & Pid_1003 & MI_03 "Имам много ключове с различни имена като" 6 & 14ed3005 & 1 & 0003 "и различните машини могат да имат различни имена и различни номера на тези ключове. Така че, не знам предварително, някои от тях съдържат клавиша “Control” (и той се появява там, ако е свързано устройство). Как да определите в кой от клавишите се намира? Дори не мога да си представя как да организирам това, надявам се на вашата помощ!

reg.OpenKey (". /./ .", false) - отваря ключа на системния регистър, предаден като първи аргумент.
reg.GetKeyNames () - Връща списък с всички под-клонове на текущия клон на системния регистър.
reg.ValueExists ("Контрол") - ще върне вярно, ако стойността ви е в текущия ключ на системния регистър.

Преминете през всички клонове, които GetKeyNames връща и потърсете Control (ValueExists ("Control")). Е, останалото е въпрос на технологии:)

reg.OpenKey (". /./ .", false) - ще се отвори, само ако даде разрешение за пълен достъп за този клон на системния регистър. reg.OpenKeyReadOnly - Отваря се.

reg.ValueExists ("Контрол") - не се връща по пътя по същата причина поради липсата на пълен достъп до този клон на системния регистър.

> код - ще съм благодарен, защото не напразно пиша в раздела "начинаещи"
> и моля за помощ, а не за коментари.

> - Ще съм благодарен, защото не напразно пиша в раздела "начинаещи"
> и попитайте за помощ, а не за коментари и пожелания.

Блажен търсещият съпруг, защото е загубил драхмата и е запалил лампата
той ще го намери.

Има логика с тази RO, ако погледнете кода.
След разговора той си спомня някакъв флаг и след това го използва, но не би трябвало, не помня подробностите, няма околна среда под ръка. Трябва или да погледнете кода на TRegistry и да се опитате да разберете как да го напишете, за да работи правилно, или да използвате API.
Кой API да използвате отново ще стане ясно от кода на TRegistry

Кодът е в помощ, добре, не го копирайте тук. И какъв код е смешен

стана

Простете, но това е деградация като програмист, защото с такова ниво
не можете дори да позволите пода да бъде пометен близо до програмиста.

Ето кода. Устройството е свързано, наличен е бутонът "Control". Където не е наред?
процедура TForm1.Button1Click (Изпращач: TObject);
вар
reg: TRegistry;
s: TStringList;
i: Цяло число;
започнете
s: = TStringList.Create;
reg: = TRegistry.Create;
reg.RootKey: = HKEY_LOCAL_MACHINE;
reg.OpenKeyReadOnly ("SYSTEM \ CurrentControlSet \ Enum \ USB \ Vid_12d1 & Pid_1003 & MI_01");
reg.GetKeyNames (s);
reg.CloseKey;
за i: = 0 до s.Count-1 do ListBox2.Items.Add (s [i]);

за i: = 0 до s.Count-1 do
започнете
reg.OpenKeyReadOnly ("SYSTEM \ CurrentControlSet \ Enum \ USB \ Vid_12d1 & Pid_1003 & MI_01 \" + s [i]);
Ако reg.ValueExists ("Контрол") тогава
ListBox1.Items.Add (s [i]);
reg.CloseKey;
край;
рег. Безплатно;
край;

> ключ „Контрол“ е налице. Където не е наред?
> Ако рег.ValueExists("Контрол") тогава
гледайки ключа, но търсейки смисъла?

reg: = TRegistry.Create (KEY_READ);
Въпреки че вероятно ще е необходимо да добавите KEY_ENUMERATE_SUB_KEYS и т.н.

Ето помощ:


> Използвайте Access, за да посочите нивото на достъп до защита, което да използвате
> при отваряне на клавиши. Методът OpenKey използва стойността на
> Достъп при отваряне на ключ на системния регистър. Достъпът е инициализиран
> от конструктора TRegistry, но може да бъде променен и преди
> извикване на OpenKey.
>
> .
>
> KEY_ALL_ACCESS комбинация от KEY_READ, KEY_WRITE и KEY_CREATE_LINK.
>
> KEY_READ комбинация от KEY_QUERY_VALUE, KEY_ENUMERATE_SUB_KEYS,
> и KEY_NOTIFY.
> KEY_WRITE комбинация от KEY_SET_VALUE и KEY_CREATE_SUB_KEY.
>
> KEY_QUERY_VALUE дава разрешение за заявки за данни на подключ.
> KEY_ENUMERATE_SUB_KEYS дава разрешение за изброяване на подключове.
>
> KEY_NOTIFY дава възможност за получаване на известия за промени.
>
>
> KEY_SET_VALUE дава разрешение за задаване на данни на подключ.
> KEY_CREATE_SUB_KEY дава разрешение за създаване на подключове.
> KEY_CREATE_LINK дава разрешение за създаване на символни връзки.
>
> KEY_EXECUTE ограничава разрешението само за четене.
>
> Забележка: Достъпът се игнорира от метода CreateKey, който винаги
> използва KEY_ALL_ACCESS


> _Yuri (04.12.10 01:18) [7]

Съдейки по кода, reg.OpenKeyReadOnly произволно променя свойството Access. И какво ще го промени зависи от правата на потребителя.

IMHO е по-добре първо да зададете правата сами и изрично и след това да се обадите на reg.OpenKey.

МНОГО БЛАГОДАРЯ НА ВСИЧКИ.

МНОГО МНОГО БЛАГОДАРЯ. ЖИВОТЪТ ОТНОВО ОЦВЯТВА.;)

И не ви беше срам да напрягате преподобния LT (S) с намеци за стълба ?
След [10] какво?)