Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.014 c
14-4069
Skywalker
2003-09-15 10:56
2003.10.02
Outlook


14-4130
clickmaker
2003-09-12 16:37
2003.10.02
Hедавно проходила конференция по борьбе со спамом, приглашения


3-3731
erw
2003-09-12 16:06
2003.10.02
Как уменшить I/O cost у большой таблицы?


14-4132
саша2
2003-09-12 12:52
2003.10.02
udaf


1-3854
JS
2003-09-18 18:00
2003.10.02
отладка DLL





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский