Главная страница
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.027 c
3-3770
andrey__
2003-09-11 17:16
2003.10.02
Одно из полей в сумме равно Null


14-4114
-=[SDA]=-
2003-09-12 07:07
2003.10.02
!!! Как вырубить звуковуху !


3-3714
saperxl
2003-09-12 00:53
2003.10.02
Настройка InterBase


9-3698
VEG
2003-03-29 19:23
2003.10.02
Direct 3D7: 2D рендеринг


1-3894
Goga
2003-09-18 13:46
2003.10.02
Дублирование объекта