Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с записью в реестр 
:(
    Опции темы
hug
Дата 1.10.2008, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 27.7.2007

Репутация: нет
Всего: нет



мне надо по ветке:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Enum\FTDIBUS\VID_0403+PID_6001ХХХХХХ\0000\Device Parameters
поменять значение параметра PortName
Код

 Err:=RegOpenKey(HKEY_LOCAL_MACHINE, 'System\CurrentControlSet\Enum\FTDIBUS', MyKey);
  index := 0;
  while err = ERROR_SUCCESS do
  begin 
    Err := RegEnumKey(MyKey,index, Buffer, Sizeof(Buffer));
    SubKey:=StrPas(Buffer); 
    inc(index);
    if StrPos(PChar(SubKey),PChar('VID_0403+PID_6001'))<>nil then
    begin
      RegOpenKey(MyKey, PChar(SubKey+'\0000\Device Parameters'), MyKey1); 
      RegQueryValue(MyKey1,'PortName',Buffer2,Err);
      PortName:=StrPas(Buffer2); 
    end;
end;

Имя порта какая-то кракозябра, хотя д.б. COM4
MyKey - правильный ключ
Код

RegOpenKey(MyKey, PChar(SubKey+'\0000'), MyKey1); 
RegEnumKey(MyKey1,0, Buffer2, Sizeof(Buffer2));

в Buffer2 лежит "Device Parameters", т.е. ошибка где-то вконце

Господа , помогите разобраться


PM MAIL   Вверх
morpheyushka
Дата 2.10.2008, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зеленый человек
**


Профиль
Группа: Участник
Сообщений: 563
Регистрация: 26.2.2008
Где: Киев

Репутация: 3
Всего: 8



Пошагово  не пробовал? Так можно точно узнать на какой строчке вылетает ошибка


--------------------
user posted image
Спасибо делается вот так!!!
PM MAIL WWW   Вверх
hug
Дата 2.10.2008, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 27.7.2007

Репутация: нет
Всего: нет



Цитата(morpheyushka @ 2.10.2008,  13:11)
Пошагово  не пробовал? Так можно точно узнать на какой строчке вылетает ошибка

ошибки нет
рабоатет неправильно
Код

RegQueryValue(MyKey1,'PortName',Buffer2,Err);
PortName:=StrPas(Buffer2); 

PM MAIL   Вверх
Riply
Дата 2.10.2008, 13:56 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Комодератор
Сообщений: 572
Регистрация: 27.3.2007
Где: St. Petersburg

Репутация: 3
Всего: 32



Цитата(hug @  1.10.2008,  21:54 Найти цитируемый пост)
Господа , помогите разобраться


Тяжеловато это сделать "навскидку", ибо
1. Не помятно что такое Buffer и какой у него Sizeof(Buffer))
2. Ты получаешь Err := RegEnumKey в пятой строчке. Почему идешь дальше не проверив его ?
3. RegOpenKey и  RegQueryValue - функции (Уж не говоря о том, что устаревшие. Используй Ex).
    Где проверка их результата ?
4. В строке RegQueryValue(MyKey1,'PortName',Buffer2,Err) в последнем параметре что ты записываешь и главное (!) куда  ?
    (Кстати, проверяя его потом на err = ERROR_SUCCESS)
5. Ну а что такое Buffer2 и почему у него размер равен Err  не догадается даже Штирлиц smile

    

PM MAIL   Вверх
hug
Дата 2.10.2008, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 27.7.2007

Репутация: нет
Всего: нет



Цитата(Riply @ 2.10.2008,  13:56)
Цитата(hug @  1.10.2008,  21:54 Найти цитируемый пост)
Господа , помогите разобраться


Тяжеловато это сделать "навскидку", ибо
1. Не помятно что такое Buffer и какой у него Sizeof(Buffer))
2. Ты получаешь Err := RegEnumKey в пятой строчке. Почему идешь дальше не проверив его ?
3. RegOpenKey и  RegQueryValue - функции (Уж не говоря о том, что устаревшие. Используй Ex).
    Где проверка их результата ?
4. В строке RegQueryValue(MyKey1,'PortName',Buffer2,Err) в последнем параметре что ты записываешь и главное (!) куда  ?
    (Кстати, проверяя его потом на err = ERROR_SUCCESS)
5. Ну а что такое Buffer2 и почему у него размер равен Err  не догадается даже Штирлиц smile

1)Buffer,Buffer2: array[0 .. 1000] of char; 
2)Пока не до доведения чистоты. Все нормально функция возвращает 0(ERROR_SUCCESS)
3)делал тоже возвращали 0
4+5) извиняюсь там код ужасный. в муках ДНЕВНОГО дебага Err там стало равно sizeof(Buffer2)

Добавлено через 8 минут и 27 секунд
Цитата(hug @ 2.10.2008,  19:19)
Цитата(Riply @ 2.10.2008,  13:56)
Цитата(hug @  1.10.2008,  21:54 Найти цитируемый пост)
Господа , помогите разобраться


Тяжеловато это сделать "навскидку", ибо
1. Не помятно что такое Buffer и какой у него Sizeof(Buffer))
2. Ты получаешь Err := RegEnumKey в пятой строчке. Почему идешь дальше не проверив его ?
3. RegOpenKey и  RegQueryValue - функции (Уж не говоря о том, что устаревшие. Используй Ex).
    Где проверка их результата ?
4. В строке RegQueryValue(MyKey1,'PortName',Buffer2,Err) в последнем параметре что ты записываешь и главное (!) куда  ?
    (Кстати, проверяя его потом на err = ERROR_SUCCESS)
5. Ну а что такое Buffer2 и почему у него размер равен Err  не догадается даже Штирлиц smile

1)Buffer,Buffer2: array[0 .. 1000] of char; 
2)Пока не до доведения чистоты. Все нормально функция возвращает 0(ERROR_SUCCESS)
3)делал тоже возвращали 0
4+5) извиняюсь там код ужасный. в муках ДНЕВНОГО дебага Err там стало равно sizeof(Buffer2)

Err:=RegQueryValue(MyKey1,'PortName',Buffer2, sizeof(Buffer2));
Вот здесь Err<>ERROR_SUCCESS
Хотя имя параметра PortName в MyKey1 есть!
PM MAIL   Вверх
Riply
Дата 2.10.2008, 20:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Комодератор
Сообщений: 572
Регистрация: 27.3.2007
Где: St. Petersburg

Репутация: 3
Всего: 32



Цитата(hug @  2.10.2008,  19:19 Найти цитируемый пост)
извиняюсь там код ужасный


Дык надо его переделать, пусть станет прекраснымsmile
Уж не говоря о том, что после этого и ошибки исчезнут сами-собой smile

Цитата(hug @  2.10.2008,  19:19 Найти цитируемый пост)
Вот здесь Err<>ERROR_SUCCESS


Я тоже люблю детективы, но не до такой же степени smile
Ну и чему же равен Err, который не равен ERROR_SUCCESS ?  smile
(Есть отличные функция SysErrorMessage)

P.S.
 И приведи тот код, с которым ты сейчас работаешь (сложно угадывать, что ты там меняешь)

PM MAIL   Вверх
hug
Дата 2.10.2008, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 27.7.2007

Репутация: нет
Всего: нет



Цитата(Riply @ 2.10.2008,  20:04)
Цитата(hug @  2.10.2008,  19:19 Найти цитируемый пост)
извиняюсь там код ужасный


Дык надо его переделать, пусть станет прекраснымsmile
Уж не говоря о том, что после этого и ошибки исчезнут сами-собой smile

Цитата(hug @  2.10.2008,  19:19 Найти цитируемый пост)
Вот здесь Err<>ERROR_SUCCESS


Я тоже люблю детективы, но не до такой же степени smile
Ну и чему же равен Err, который не равен ERROR_SUCCESS ?  smile
(Есть отличные функция SysErrorMessage)

P.S.
 И приведи тот код, с которым ты сейчас работаешь (сложно угадывать, что ты там меняешь)

Код




procedure SetRegKey();
var
  reg : TRegistry;
  ts : TStrings;
  Err,index,b : integer;
  MyKey,MyKey1,MyKey2: HKey; 
  Buffer,Buffer2: array[0 .. 1000] of char; 
  SubKey,a : string;

begin
  Err:=RegOpenKey(HKEY_LOCAL_MACHINE, 'System\CurrentControlSet\Enum\FTDIBUS', MyKey); 
  index := 0;
  while err = ERROR_SUCCESS do
  begin 
    Err := RegEnumKey(MyKey,index, Buffer, Sizeof(Buffer));
    SubKey:=StrPas(Buffer);
    inc(index);
    if StrPos(PChar(SubKey),PChar('VID_0403+PID_6001'))<>nil then
    begin
     Err:=RegOpenKey(MyKey, PChar(SubKey+'\0000\Device Parameters'), MyKey1); 
     Err:=RegQueryValue(MyKey1,'PortName',Buffer2, Sizeof(Buffer2));
     if Err<>ERROR_SUCCESS then
        proc_SysErr(GetLastError(Err));  //ERROR_FILE_NOT_FOUND
       SubKey:=StrPas(Buffer2); 

    end;
  end;  
end;

PM MAIL   Вверх
Riply
Дата 2.10.2008, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Комодератор
Сообщений: 572
Регистрация: 27.3.2007
Где: St. Petersburg

Репутация: 3
Всего: 32



hug, 

Я не вижу, что ты исправил и как проверяешь ошибки. Это раз.

Второе: ты хочешь сказать, что работаешь с этим кодом ?
Не верю (он даже не скомпилируется).

Если мы пытаемся решить задачу, то ее надо решать,
а не создавать видимость бурной деятельности (в программировании это не "прокатит").

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

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0480 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.