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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите с реестром 
:(
    Опции темы
Stalin
  Дата 2.4.2003, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 2.4.2003
Где: Мурманская обл.

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



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

Напишите как делать! Пожалуйста.
exec('c:\windows\regedit.exe','/s c:\aaa.reg');
PM MAIL ICQ   Вверх
Unregistered
Дата 2.4.2003, 19:13 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











В тот что не получается, наверно прав нет.
  Вверх
Pakshin A. S.
Дата 2.4.2003, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Поработай с модулем Registry, там есть такие классы, как TRegistry, TRegFile и тому подобное, а exec('c:\windows\regedit.exe','/s c:\aaa.reg'); забрось подальше, работай с реестром прямо из программы без всяких файлов.
PM   Вверх
Vit
Дата 2.4.2003, 19:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

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



В некоторые разделы нужно иметь администраторские права чтобы писать инфу.


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Pakshin A. S.
Дата 2.4.2003, 19:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Всё-таки насчёт файла... Попробуй это:
Код

...
var
si:TStartUpInfo;
pi:TProcessInformation;
begin
ZeroMemory(@si, SizeOf(si));
si.cb:=SizeOf(si);
si.wShowWindow:=SW_HIDEl;
si.dwFlags:=STARTF_USESHOWWINDOW;
CreateProcess(nil, 'c:\windows\regedit.exe /s c:\aaa.reg', nil, nil, False, IDLE_PRIORITY_CLASS or DETACHED_PROCESS, nil , nil, si, pi);
...
end;

PM   Вверх
Stalin
Дата 3.4.2003, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 2.4.2003
Где: Мурманская обл.

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



Цитата(Pakshin @ 2.4.2003, 19:54)
Всё-таки насчёт файла... Попробуй это:
Код

...
var
si:TStartUpInfo;
pi:TProcessInformation;
begin
ZeroMemory(@si, SizeOf(si));
si.cb:=SizeOf(si);
si.wShowWindow:=SW_HIDEl;
si.dwFlags:=STARTF_USESHOWWINDOW;
CreateProcess(nil, 'c:\windows\regedit.exe /s c:\aaa.reg', nil, nil, False, IDLE_PRIORITY_CLASS or DETACHED_PROCESS, nil , nil, si, pi);
...
end;

Чего-то не фига не выходит. Индефикаторов Паскаль таких не знает (я впрочем тоже).
PM MAIL ICQ   Вверх
serious
Дата 3.4.2003, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А операционка какая?


--------------------
Я знаю то, что ничего не знаю, а некоторые не знают и этого.
PM MAIL   Вверх
SmaLL
Дата 3.4.2003, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ты чЁ на Паскале шпаришь ?? Или Дельфи??


--------------------
Что ни делается - всЁ к лучшему! SmallWeb
Мой адрес не дом и не улица, мой адрес родной пивзавод!
PM MAIL WWW ICQ   Вверх
serious
Дата 3.4.2003, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(SmaLL @ 3.4.2003, 08:50)
Ты чЁ на Паскале шпаришь ?? Или Дельфи??

А как на Паскале в реестр писать? smile.gif


--------------------
Я знаю то, что ничего не знаю, а некоторые не знают и этого.
PM MAIL   Вверх
Stalin
Дата 3.4.2003, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 2.4.2003
Где: Мурманская обл.

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



Я на Паскале вообшето пишу.
PM MAIL ICQ   Вверх
neutrino
Дата 3.4.2003, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Gothic soul
****


Профиль
Группа: Модератор
Сообщений: 3041
Регистрация: 25.3.2002
Где: Верхняя Галилея, Кармиэль

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



Товарищ Сталин, попробуйте считать с файла построчно и записать в реестр через класс TRegistry - так и возможные ошибки можно найти в файле реестра.


--------------------
The truth comes from within ...

Покойся с миром, Vit 
PM MAIL WWW ICQ Skype GTalk   Вверх
Borland_Delphi_6
Дата 3.4.2003, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


LoneLINEss
****


Профиль
Группа: Участник Клуба
Сообщений: 2509
Регистрация: 5.11.2002
Где: in fortune dreams ...

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



Насколько мне известно, на Паскале вообще нельзя писать через TRegistry. Там вообще нету такой фигни. На нем в реестр что-то прописать можно наверно тока из файла.


--------------------
Blind Guardian Fan :: BMSTU Student :: A polar bear is a rectangular bear after a coordinate transform.

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


Опытный
**


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

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



Ну да, реестр - это же в Windows.


--------------------
Я знаю то, что ничего не знаю, а некоторые не знают и этого.
PM MAIL   Вверх
SmaLL
Дата 4.4.2003, 08:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Вот поэтому он и пытается добавить запись через файл.


--------------------
Что ни делается - всЁ к лучшему! SmallWeb
Мой адрес не дом и не улица, мой адрес родной пивзавод!
PM MAIL WWW ICQ   Вверх
Pakshin A. S.
Дата 4.4.2003, 10:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Мой тебе совет: изучи Delphi и не мучай Pascal. А уж если тебе лень изучать Delphi, то попробуй раздобыть гди-нибудь фенкции WinApi по работе с реестром... Поcтой сейчас скину пару штук, только не знаю как их загрузить в Pascal и где они точно находятся, тем более не знаю, как подогнать типы под Pascal.
Код

RegCreateKey (Key:HKey; SubKey: PChar; var Result: HKey): Longint;
Создать подраздел в реестре. Key указывает на "корневой" раздел реестра, в Delphi1 доступен только один - HKEY_CLASSES_ROOT, в в Delphi3 - все. SubKey - имя раздела - строится по принципу пути к файлу в DOS (пример subkey1\subkey2\ ...). Если такой раздел уже существует, то он открывается (в любом случае при успешном вызове Result содержит Handle на раздел). Об успешности вызова судят по возвращаемому значению, если ERROR_SUCCESS, то успешно, если иное - ошибка.

RegOpenKey(Key: HKey; SubKey: PChar; var Result: HKey):Longint;
Открыть подраздел Key\SubKey и возвращает Handle на него в переменной Result. Если раздела с таким именем нет, то он не создается. Возврат - код ошибки или ERROR_SUCCESS, если успешно.

RegCloseKey(Key: HKey): Longint;
Закрывает раздел, на который ссылается Key. Возврат - код ошибки или ERROR_SUCCESS, если успешно.

RegDeleteKey(Key: HKey; SubKey: PChar): Longint;
Удалить подраздел Key\SubKey. Возврат - код ошибки или ERROR_SUCCESS, если нет ошибок.

RegEnumKey(Key:HKey; index: Longint; Buffer: PChar;cb: Longint):Longint;
Получить имена всех подразделов раздела Key, где Key - Handle на открытый или созданный раздел (см. RegCreateKey и RegOpenKey), Buffer - указатель на буфер, cb - размер буфера, index - индекс, должен быть равен 0 при первом вызове RegEnumKey. Типичное использование - в цикле While, где index увеличивается до тех пор, пока очередной вызов RegEnumKey не завершится ошибкой (см. пример).

RegQueryValue(Key: HKey; SubKey: PChar; Value: PChar; var cb: Longint): Longint;
Возвращает текстовую строку, связанную с ключом Key\SubKey.Value - буфер для строки; cb- размер, на входе - размер буфера, на выходе - длина возвращаемой строки. Возврат - код ошибки.

RegSetValue(Key: HKey; SubKey: PChar; ValType: Longint; Value: PChar; cb: Longint): Longint;
Задать новое значение ключу Key\SubKey, ValType - тип задаваемой переменной, Value - буфер для переменной, cb - размер буфера. В Windows 3.1 допустимо только Value=REG_SZ. Возврат - код ошибки или ERROR_SUCCESS, если нет ошибок.

RegDeleteValue(HKEY hKey, LPCTSTR lpValueName );
Удаляет значение lpValueName находящееся в ключе hKey.hKey должен был быть открыт с доступом KEY_SET_VALUE процедурой RegOpenKey.Возвращает ERROR_SUCCESS если успешно.

LONG RegEnumValue( HKEY hKey, DWORD dwIndex,LPTSTR lpValueName,LPDWORD lpcbValueName,LPDWORD lpReserved,LPDWORD lpType, LPBYTE lpData, LPDWORD lpcbData );
, Выдает список значений у ключа hKey, dwIndex-этот параметр должен быть 0 при первом вызове, а далее по анологии с RegEnumKey(т.е. можно использовать в цикле), lpValueName-буфер для названия значения, lpcbValueName-размер lpValueName, lpReserved должно быть всегда 0, lpType-буфер для названия типа (int), lpData- буфер для данных, lpcbData-размер для lpData.
Примечание: При каждой новом вызове функции после предыдущего нужно заново переназначить lpcbValueName. ( lpcbValueName=sizeof  lpValueName) Иногда параметр lpcbData -должно обязательно иметь значение

Примеры :


{  Создаем список всех подразделов указанного раздела }

procedure TForm1.Button1Click(Sender: TObject);

var

 MyKey : HKey; { Handle для работы с разделом }

 Buffer : array[0..1000] of char; { Буфер }

 Err, { Код ошибки }

index : longint; { Индекс подраздела }

begin

 Err:=RegOpenKey(HKEY_CLASSES_ROOT,'DelphiUnit',MyKey); { Открыли раздел }

 if Err<> ERROR_SUCCESS then

  begin

    MessageDlg('Нет такого раздела !!',mtError,[mbOk],0);

    exit;

  end;

 index:=0;

 {Определили имя первого подраздела }

 Err:=RegEnumKey(MyKey,index,Buffer,Sizeof(Buffer));

 while err=ERROR_SUCCESS do { Цикл, пока есть подразделы }

  begin

    memo1.lines.add(StrPas(Buffer)); { Добавим имя подраздела в список }

    inc(index); { Увеличим номер подраздела }

    Err:=RegEnumKey(MyKey,index,Buffer,Sizeof(Buffer)); { Запрос }

  end;

 RegCloseKey(MyKey); { Закрыли подраздел }

end;



P.S. Удачи!
PM   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

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

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

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

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

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


 




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


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

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