Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.10.02;
Скачать: CL | DM;

Вниз

Запись в реестр посредством API.   Найти похожие ветки 

 
Patrick ©   (2003-09-17 14:55) [0]

Подскажите кто-нибудь. После неудачной работы с реестром Windows через стандартные компоненты Delphi, решил попробовать функции API, но получился небольшой затык, а именно строковые переменные записываются великолепно,
ReportsPath := "C:\";
RegSetValueEx( Result, "ReportsPath", 0, REG_SZ, PAnsiChar(ReportsPath), StrLen(PAnsiChar(ReportsPath)));

а вот integer и real не желает
ReportMonth := 1;
RegSetValueEx( Result, "ReportMonth", 0, REG_DWORD, Pointer(ReportMonth), SizeOf(Pointer(ReportMonth))); (real наподобие)
уверен, что ошибка в 5 и 6 параметрах. Какие они должны быть
посоветуйте кто-нибудь,please.


 
Nikolay M. ©   (2003-09-17 14:59) [1]


> После неудачной работы с реестром Windows через стандартные
> компоненты Delphi

Уже хорошо :)


> уверен, что ошибка в 5 и 6 параметрах

Я, если честно, тоже не совсем понял, зачем Pointer(ReportMonth)?


 
Ihor Osov'yak ©   (2003-09-17 15:05) [2]

Гм. Сколько уже работаю с D, но никогда не возникало проблем с TRegistry

попробуй так:

RegSetValueEx( Result, "ReportMonth", 0, REG_DWORD, @ReportMonth, SizeOf(ReportMonth));

Зы - и Result, должен быть корректным, то есть хендл соотв. ветви, и вероятнее всего - SizeOf(ReportMonth) должно быть четыре байта - мне сейчас влом смотреть в документацию или делать тестирование..

Зы2 - а то, что у Вас написано
ReportMonth := 1;
..Pointer(ReportMonth) - то это свидетельствует о необходимости еще литературу почитать..


 
ZEE ©   (2003-09-17 15:10) [3]

>Patrick © (17.09.03 14:55)
>После неудачной работы с реестром Windows через стандартные компоненты Delphi
какие это из "стандартных компонентов" работают с реестром?
а меня (и как вижу еще и Ihor Osov"yak) TRegistry не подводит...


 
Dimka Maslov ©   (2003-09-17 15:24) [4]

http://delphibase.endimus.com/?action=viewtopic&topic=sysreg


 
Patrick ©   (2003-09-18 10:49) [5]

Попытался читать переменные реестра используя RegQueryValueEx, опять же со строками всё путем, а вот REG_DWORD и REG_BINARY как-то сложно и громозко получается, вы отвечали, что с классом TRegistry никаких проблем не было, тогда почему при записи в реестр
TRegistry.WriteInteger("MyInteger", 100);
и
TRegistry.WriteFloat("MyFloat", 10.00);
затем прочитать не удается
var a:integer;
b : real;
...
a:= TRegistry.ReadInteger("MyInteger");
b:= TRegistry.ReadFloat("MyFloat");


 
Erik   (2003-09-18 11:09) [6]

А ты возми RegEdit и перейди в ту ветку где делал запись. Ты разумеется пишеш в существующею ветку предварительно ее открыв. И подозрение, что ты делаеш сразу TRegistry.WriteFloat("MyFloat", 10.00) беспочвены?


 
Patrick ©   (2003-09-18 11:52) [7]

Я что-то не понял ответа.
Суть такова, я делаю так
RemaindersReg := TRegistry.Create;
RemaindersReg.RootKey := HKEY_LOCAL_MACHINE;
RemaindersReg.OpenKey("\SOFTWARE\Remainders", true);
а затем уже WriteFloat


 
Erik   (2003-09-18 13:36) [8]

Ты знаеш такую програму RegEdit если незнаеш то просто выбери в менушке RUN и там напиши RegEdit. Далее перейди на HKEY_LOCAL_MACHINE\SOFTWARE\Remainders и смотри. Возможно у тебя нету прав на запись в Register.


 
Patrick ©   (2003-09-18 13:51) [9]

Такую прогу, я конечно знаю и запустив ее вижу, что мои изменения имеют место и всё корректно, мой вопрос состоит в том, что сделав изменения, я потом не могу прочитать переменные, которые имеют тип REG_DWORD и REG_BINARY. из реестра по ходу работы моей программы.
читаю так
a := TRegistry.ReadInteger("MyInteger");

в реестре
MyInteger REG_DWORD 0x00000009 (9)
хранится число 9
так вот в программе выполняя
a := TRegistry.ReadInteger("MyInteger");
вылезает ошибка : Failed to get "MyInteger"....


 
ZEE ©   (2003-09-18 14:35) [10]

Только что проверил и WriteInteger и ReadInteger - все путем.
покажи точный код записи и чтения


 
Erik   (2003-09-18 14:43) [11]

Все понятно, делай так пиши и читай что хочеш.
procedure TForm1.Button2Click(Sender: TObject);
Var Reg: TRegistry;
Password: String;
Size: Integer;
Buf: PChar;
begin
Reg := TRegistry.Create(KEY_EXECUTE);
try
Reg.RootKey := HKEY_LOCAL_MACHINE;
Reg.OpenKey("\Software\Starman",False);
SetLength(Password,255);
Buf := PChar(Password);
Size := Reg.ReadBinaryData("appserver",Buf^,255);
SetLength(Password,Size);
finally
Reg.Free;
end;

Edit2.Text := Password;
end;


 
Patrick ©   (2003-09-18 15:50) [12]

Просто взял и переписал заново код, всё получилось WriteFloat ReadFloat, всё работает, то же и Integer, видно изначально допустил какую-то досадную оплошность.



Страницы: 1 вся ветка

Текущий архив: 2003.10.02;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.026 c
3-3726
dez
2003-09-12 18:01
2003.10.02
Сохранение данных


4-4173
Иван
2003-07-29 22:14
2003.10.02
Как отследить запуск процесса, приложения, службы? Hook.


1-3870
s_g
2003-09-19 00:40
2003.10.02
Как для консольного приложения поместить иконку в Tray?


3-3743
mip
2003-09-12 12:11
2003.10.02
Помогите пожалуйста с глюком в DbGrid


4-4171
Unknown user
2003-07-30 18:49
2003.10.02
Как создать DIB?