Форум: "Основная";
Текущий архив: 2003.10.02;
Скачать: [xml.tar.bz2];
ВнизЗапись в реестр посредством 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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.009 c