Вверх ↑
Этот топик читают: Гость
Ответов: 245
Рейтинг: 3
#61: 2011-06-23 17:01:37 ЛС | профиль | цитата
сначала нада открыть RegOpenKeyEx а потом RegQueryValueEx
------------ Дoбавленo в 16.59:
подскажи тогда

function ReadValue(var _Data,val:TData):integer;

вот сюда как передать нужные параметры
------------ Дoбавленo в 17.00:
точнее как заменить их в самой функции
------------ Дoбавленo в 17.01:
и что имено передается в этих параметрах
карма: 0

0
Разработчик
Ответов: 26304
Рейтинг: 2146
#62: 2011-06-23 17:06:52 ЛС | профиль | цитата
На, замени в шатном и проверь



procedure THIRegistry._work_doEnumValues;
const
KEY_WOW64_64KEY = $0100;

var hk:HKEY;
List:PStrList;
i:smallint;

function RegKeyOpenRead( Key: HKey; const SubKey: String ): HKey;
begin
if RegOpenKeyEx( Key, PChar( SubKey ), 0, KEY_READ or KEY_WOW64_64KEY, Result ) <> ERROR_SUCCESS then
Result := 0;
end;

begin
FStopEnum := false;
// hk := kol.RegKeyOpenRead(_hkey[_prop_HKey],ReadString(_Data,_data_Key,_prop_Key));
hk := RegKeyOpenRead(_hkey[_prop_HKey],ReadString(_Data,_data_Key,_prop_Key));
List := NewStrList;
kol.RegKeyGetValueNames(hk,List);
for i := 0 to List.Count-1 do
begin
_hi_OnEvent(_event_onEnumValue, List.Items[i]);
if FStopEnum then break;
end;
List.Free;
kol.RegKeyClose(hk);
end;
карма: 22

0
Ответов: 245
Рейтинг: 3
#63: 2011-06-23 17:07:49 ЛС | профиль | цитата
procedure _work_doRead(var _Data:TData; Index:word);

скажи что передает _Data и как ее поменять в самой функции
карма: 0

0
Разработчик
Ответов: 26304
Рейтинг: 2146
#64: 2011-06-23 17:09:27 ЛС | профиль | цитата
goluzov писал(а):
function ReadValue(var _Data,val:TData):integer;

вот сюда как передать нужные параметры

Зачем, переделай функцию OpenKey



function THIRegistry.OpenKey;
const
KEY_WOW64_64KEY = $0100;
var
TempKey: HKey;
S: string;
Disposition: Integer;
Relative: Boolean;
begin
S := Key;
Relative := IsRelative(S);

if not Relative then Delete(S, 1, 1);
TempKey := 0;
if not CanCreate or (S = '') then begin
Result := RegOpenKeyEx(GetBaseKey(Relative), PChar(S), 0,
Access or KEY_WOW64_64KEY, TempKey) = ERROR_SUCCESS;
end else
Result := RegCreateKeyEx(GetBaseKey(Relative), PChar(S), 0, nil,
REG_OPTION_NON_VOLATILE, Access or KEY_WOW64_64KEY, nil, TempKey, @Disposition) = ERROR_SUCCESS;
if Result then begin
if (CurrentKey <> 0) and Relative then S := FCurrentPath + '\' + S;
ChangeKey(TempKey, S);
end;
end;
карма: 22

0
Ответов: 245
Рейтинг: 3
#65: 2011-06-23 17:11:04 ЛС | профиль | цитата
да это и так есть...
------------ Дoбавленo в 17.11:
procedure _work_doRead(var _Data:TData; Index:word);

скажи что передает _Data и как ее поменять в самой функции
карма: 0

0
Разработчик
Ответов: 26304
Рейтинг: 2146
#66: 2011-06-23 17:16:31 ЛС | профиль | цитата
goluzov писал(а):
скажи что передает _Data и как ее поменять в самой функции

Входные данные с точки. Менять ни на что нельзя
------------ Дoбавленo в 17.16:
goluzov писал(а):
да это и так есть...

Все, больше менять ничего не надо. Должно работать
карма: 22

0
Ответов: 245
Рейтинг: 3
#67: 2011-06-23 17:17:53 ЛС | профиль | цитата
просто _Data это единственое что передает

procedure _work_doRead(var _Data:TData; Index:word);

procedure THIRegistry._work_doRead;
var dt:TData;

res := ReadValue(_Data,dt);

Index как я понял не идет никуда...

есди идет только _Data значит в нем неск точек?
карма: 0

0
Разработчик
Ответов: 26304
Рейтинг: 2146
#68: 2011-06-23 17:22:23 ЛС | профиль | цитата
goluzov писал(а):
просто _Data это единственое что передает

зачем тебе это все, когда дальше используется только OpenKey



function THIRegistry.ReadValue;
var value:string;
begin
dtNull(val);
RootKey := _hkey[_prop_HKey];
if not OpenKey(ReadString(_Data,_data_Key,_prop_Key),false,KEY_READ) then
begin
Result := 0;
exit;
end
else Result := 1;
value := ReadString(_Data,_data_Value,_prop_Value);

case dtypes[_prop_DataType] of
data_int : dtInteger(val,ReadInt(Value,Result));
data_str : dtString(val,ReadStr(Value,Result));
data_real: dtReal(val,ReadFloat(Value,Result));
data_stream: dtStream(val,_ReadStream(Value,Result));
end;

CloseKey;
end;

Если OpenKey исправлен, то больше ничего не надо добавлять
карма: 22

0
Ответов: 245
Рейтинг: 3
#69: 2011-06-23 17:27:46 ЛС | профиль | цитата
я хочу вин2000
------------ Дoбавленo в 17.27:
объясни что такое _Data и как ей управлять
карма: 0

0
Разработчик
Ответов: 26304
Рейтинг: 2146
#70: 2011-06-23 17:29:12 ЛС | профиль | цитата
goluzov писал(а):
объясни что такое _Data и как ей управлять

Структура TData
карма: 22

0
Ответов: 245
Рейтинг: 3
#71: 2011-06-23 17:30:38 ЛС | профиль | цитата
ладно кароче не надо ниче
карма: 0

0
Ответов: 4663
Рейтинг: 767
#72: 2011-06-23 17:32:43 ЛС | профиль | цитата
Господи! Зачем тебе Win2000?! Сказал же, что с этим параметром на Win2000 не будет работать. Соответственно, найдешь способ отличить Win2000 от других - делай как и хотел: на Win2000 - только KEY_READ, на остальных - KEY_READ or $100. И ничего больше переделывать не нужно.
карма: 26

0
Разработчик
Ответов: 26304
Рейтинг: 2146
#73: 2011-06-23 18:01:52 ЛС | профиль | цитата
Netspirit писал(а):
Соответственно, найдешь способ отличить Win2000 от других - делай как и хотел

Я ему сказал как -- через определения мажора и минора версий, должно быть 5 и 0
------------ Дoбавленo в 18.01:
goluzov, на тебе OpenKey с анализом на Win2000



function THIRegistry.OpenKey;
const
KEY_WOW64_64KEY = $0100;
var
TempKey: HKey;
S: string;
Disposition: Integer;
Relative: Boolean;
ovi: TOSVersionInfo;
begin
FillChar(ovi, SizeOf(TOSVersionInfo), #0);
ovi.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
GetVersionEx(ovi);
if not ((ovi.dwMajorVersion = 5) and (ovi.dwMinorVersion = 0)) then
Access := Access or KEY_WOW64_64KEY;
S := Key;
Relative := IsRelative(S);

if not Relative then Delete(S, 1, 1);
TempKey := 0;
if not CanCreate or (S = '') then begin
Result := RegOpenKeyEx(GetBaseKey(Relative), PChar(S), 0,
Access, TempKey) = ERROR_SUCCESS;
end else
Result := RegCreateKeyEx(GetBaseKey(Relative), PChar(S), 0, nil,
REG_OPTION_NON_VOLATILE, Access, nil, TempKey, @Disposition) = ERROR_SUCCESS;
if Result then begin
if (CurrentKey <> 0) and Relative then S := FCurrentPath + '\' + S;
ChangeKey(TempKey, S);
end;
end;
карма: 22

0
73
Сообщение
...
Прикрепленные файлы
(файлы не залиты)