![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Не могу добиться от функции работы [D7, D2005, 2000, XP, 2003]
InfraRed © (2007-01-18 01:26:00)Задаю параметр для открытия ключа HKEY_USERS
То Функция RegEnumKeyEx возвращает список ключей
Задаю параметр для открытия ключа HKEY_LOCAL_MACHINE
Функция RegEnumKeyEx ни какого списка не возвращает видимую ошибку не возвращает - догнать не могу чево нехватает.
procedure TForm1.Button1Click(Sender: TObject);
Var Rez: Integer;
Buff: Pointer;
i: integer;
Name: String;
BuffSise: Cardinal;
MyKey: HKEy;
begin
Rez:=RegConnectRegistry(PChar(edName.Text), HKEY_LOCAL_MACHINE,REMOT_KEY);
if Rez <> ERROR_SUCCESS then begin ShowMessage('Connection No!'); Exit; End;
ShowMessage('Connection Ok!');
try
Lst := TStringList.Create;
i:=0;
BuffSise:=1024;
GetMem(Buff,BuffSise);
while RegEnumKeyEx(REMOT_KEY,i,buff,BuffSise,Nil,NIl,Nil,Nil) = ERROR_SUCCESS do
begin
Application.ProcessMessages;
BuffSise:=1024;
SetLength(Name,BuffSise);
CopyMemory(@Name[1],Buff,BuffSise);
Lst.Add(Name);
Inc(i);
end;
Memo1.Lines.AddStrings(Lst);
finally
FreeMem(Buff,BuffSise);
RegCloseKey(REMOT_KEY);
Lst.Free;
end;
end;
InfraRed (2007-01-18 19:16:00) [1]Vmware не причем. Тестировал на физической локалке функция:
RegOpenKeyEx(REMOT_KEY,PChar(edSubKey.text),0,KEY_QUERY_VALUE,SubKey)
не открывает ключи, Но соединение проходит ОК!
Функция RegEnumKeyEx может перечислить ключи в только текущем HKEY_LOCAL_MACHINE
Так и не пойму чего еще нехватает?
InfraRed (2007-01-18 14:15:00) [2]> Джо © (18.01.07 13:07) [12]
> Кстати, что это значит? Т.е.: «работу не выполняет».
С этим я и пытаюсь разобраться.
Я сное дело, что машины в сетке я юзаю на vmware там несколько адаптеров один для vmnat vmhost-only
Вот когда остается включенным vmnat адаптер то происходит следующеее конект = ERROR_SUCCESS
Функция RegEnumKeyEx в цикле тоже = ERROR_SUCCESS Но данные пусты Буффер = 0
При включенных обоих адаптерах все происходит Ок! Но Можно просмотреть ключи первого уровня а Подключи уже не открываются в следующем коде:
if RegOpenKeyEx(REMOT_KEY,PChar(edSubKey.text),0,KEY_QUERY_VALUE,SubKey) = ERROR_SUCCESS then begin
ShowMessage('Open Key Ok!');
RegEnumKeys(SubKey,'',Name); //from Uses Minireg.pas
Memo1.Text:=Name;
end
Некак не могу понять или это из за глюков vmware всетаки специфическая сеть. Или еще какие нибудь привелегии иметь надо в коде и как ошибку поймать тоже не понимаю пока.
Джо (2007-01-18 13:07:00) [3]> Но суть в том, что она возвращает правильные ответ, но
> работу не выполняет в одних случаях, а вдругих выполняет
Кстати, что это значит? Т.е.: «работу не выполняет».
Джо (2007-01-18 12:55:00) [4]А в цикле while вообще не обрабатывается результат возврата, кроме как на ERROR_SUCCESS.
Джо (2007-01-18 12:53:00) [5]RegEnumKeyEx также (кроме кода ошибки) еще и может возвратить ERROR_NO_MORE_ITEMS и ERROR_MORE_DATA.
infraRed (2007-01-18 12:46:00) [6]> Джо © (18.01.07 12:38) [8]
> Примерчик в [1].
И то правильно потому, что RegEnumKeyEx(REMOT_KEY,i,buff,BuffSise,Nil,NIl,Nil,Nil) = ERROR_SUCCESS
По спецификации возвращает только ERROR_SUCCESS если правильно работает, Но суть в том, что она возвращает правильные ответ, но работу не выполняет в одних случаях, а вдругих выполняет. Как же причину разыскать?
Джо (2007-01-18 12:38:00) [7]> какойбы нибудь примерчик как содерзание ошибка извлечЬ?
> или примерчик применения RaiseLastOSError очень плиз.
Примерчик в [1].
infraRed (2007-01-18 12:35:00) [8]Unit
SysUtils
Syntax
[Delphi] procedure RaiseLastOSError(); overload;
[Delphi] procedure RaiseLastOSError(LastError: Integer); overload;
Description
- вот в справке нашел в модуле систем нашел:
procedure RaiseLastOSError;
begin
RaiseLastOSError(GetLastError);
end;
какойбы нибудь примерчик как содерзание ошибка извлечЬ? или примерчик применения RaiseLastOSError очень плиз.
Джо (2007-01-18 12:23:00) [9]> [5] infraRed (18.01.07 12:20)
> > Джо © (18.01.07 01:32) [1]
> - RaiseLastOsError ни чем не отличается от LastError
Оно отличается тем, что вызывает исключение с текстовымописанием ошибки, а не просто кодом.
infraRed (2007-01-18 12:20:00) [10]> Джо © (18.01.07 01:32) [1]
- RaiseLastOsError ни чем не отличается от LastError
LastError - а получение оного мне ни очем не говорит, как извлеч причину ошибки? Допустим GetLastError = 997
infraRed (2007-01-18 12:05:00) [11]nobless obligeэто кто есть такой?
Германн (2007-01-18 02:28:00) [12]
> InfraRed (18.01.07 02:03) [2]
>
> Разобрался таки - проблема была в сетевых адаптерах.
>
Ну так nobless obligeдолжно бы было заставить тебя "прояснить сию проблему" и выдать решение!
InfraRed (2007-01-18 02:03:00) [13]Разобрался таки - проблема была в сетевых адаптерах.
Джо (2007-01-18 01:32:00) [14]Код не смотрел, но вместо
> if Rez <> ERROR_SUCCESS then begin ShowMessage('Connection
> No!');
используй
if not .... then
RaiseLastOsError;
чтобы увидеть вразумительное сообщение об ошибке.