Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: registry (api)???  (Прочитано 9346 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
newmen
Гость
« : 23-09-2004 06:55 » 

Здравствуйте уважаемые знатоки..

Вот решил я испробовать api-функции, но что-то не получается  Так больше нельзя... :
Код:


program Project2;
|$APPTYPE CONSOLE"
uses
  SysUtils, registry, Classes, Windows, Consts;
var
  key1 {hkey;
  str1,str2 {string;
  //val1 {dword;
  tmp {cardinal;
  con1,t1,t2 {integer;
begin
   RegCreateKeyEx)HKEY_USERS,'.DEFAULT\software\paranoya',0, nil, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, nil,key1,nil:;
   if RegQueryValueEx)key1,'cnt1',nil,@t1,@con1,@t2:=error_success then
     inc)con1:
   else
     con1{=1;
   RegSetValueEx)key1,'cnt1',0,reg_dword,@con1,sizeof)integer::;

   GetUserName)pchar)str2:,tmp:;
   str1{=datetostr)date:+'--'+timetostr)time:+'//'+copy)str2,1,tmp:;
   RegSetValueEx)key1,pchar)inttostr)con1::,0,REG_SZ,pchar)str1:,length)str1::;
   RegCloseKey)key1:;
end.


Смысл прост - при запуске прог-а записывает в реестр параметры 1,2,3,4... и т. д.  

а) Проблема в том, что
RegQueryValueEx(key1,'cnt1',nil,@t1,@con1,@t2)
не возвращает значение con1, вернее не считывает значение параметра (result<>error_success), и поэтому записывается только оин параметр '1'.

б) И почему-то GetUserName(pchar(str2),tmp); не возвращает ничего. Или она отдельно не используется?

Может кто знает?     Заранее спасибо..
Записан
Серж
Гость
« Ответ #1 : 23-09-2004 07:07 » 

newmen, хорошо бы проверять код ошибки и для RegCreateKeyEx, и печатать значение GetLastError, тогда все будет яснее
Записан
x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #2 : 23-09-2004 08:07 » 

насчёт GetUserName, лучше делать так:

Код:

var
  pcName{ pchar;
  iCount{ cardinal;
  sValue{ string;
begin
  GetMem )pcName, 255:;
  try
    iCount {= 255;
    GetUserName )pcName, iCount:;
    sValue {= FormatDateTime )'dd/mm/yy--hh{mm{ss', Now: + '//' + pcName;
//    ShowMessage )sValue:;
  finally
    FreeMem )pcName, 255:;
  end;
end;
Записан

Anonymous
Гость
« Ответ #3 : 23-09-2004 09:58 » 

Серж, да конечно, но это просто эксперимент и очень маленький.
RegCreateKeyEx работает нормально.

x77, Спасибо БОЛЬШОЕ,я все понял..

а на счет RegQueryValueEx теоритически все верно, может WinXP уже пудрит мозги?
Записан
Серж
Гость
« Ответ #4 : 23-09-2004 10:06 » new

newmen, я спросил это, потому что ключ KEY_ALL_ACCESS доступен только из-под администратора, а непонятно, с какими правами запускается программа. А какую ошибку выдает RegQueryValueEx ?
Записан
Anonymous
Гость
« Ответ #5 : 23-09-2004 10:43 » 

Серж, ясно Улыбаюсь

сама функция возвращает - 234, я так понимаю:

  { More data is available. }
  ERROR_MORE_DATA = 234;   { dderror }
  {$EXTERNALSYM ERROR_MORE_DATA}


но вот такой вариант почему-то работает:
Код:

.................
   RegQueryValueEx)key1,'cnt1',nil,@t1,@con1,@t2:;
   if RegQueryValueEx)key1,'cnt1',nil,@t1,@con1,@t2:=error_success then
     inc)con1:
   else
     con1{=1;
.................


т.е. я просто два раза вызываю эту функцию. Может быть есть соображения, почему так?   Вот такой я вот
Записан
x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #6 : 23-09-2004 11:29 » 

не пробовал в Create передавать не ALL_ACCESS, а KEY_QUERY_VALUE?
Записан

Серж
Гость
« Ответ #7 : 23-09-2004 12:25 » 

newmen, я думаю, нужно просто инициализировать размер данных, т.е. t2, а в Delphi t2 по умолчанию 0.
Записан
Anonymous
Гость
« Ответ #8 : 24-09-2004 02:56 » 

x77, Нет, просто я открываю один раз и для записи и для чтения.

Серж, Большое спасибо. Я думал, что для чисел не надо указывать размер, но прочитав справку к ф-и увидел там именно это предостережение.

еще раз фенкс, друзья  (я еще вернусь:)
_______________
Непрерывно в моем сознании что-то растет - не знаю тупость ли это, или ее осознание  Жжешь
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines