Вниз
Скачать: CL | DM;

Не могу добиться от функции работы   Найти похожие ветки 

← →
InfraRed   (2007-01-18 01:26) [0]

Задаю параметр для открытия ключа 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;


← →
Джо ©   (2007-01-18 01:32) [1]

Код не смотрел, но вместо
> if Rez <> ERROR_SUCCESS then begin ShowMessage("Connection
> No!");

используй
if not .... then
 RaiseLastOsError;


чтобы увидеть вразумительное сообщение об ошибке.


← →
InfraRed   (2007-01-18 02:03) [2]

Разобрался таки - проблема была в сетевых адаптерах.


← →
Германн ©   (2007-01-18 02:28) [3]


> InfraRed   (18.01.07 02:03) [2]
>
> Разобрался таки - проблема была в сетевых адаптерах.
>

Ну так nobless oblige должно бы было заставить тебя "прояснить сию проблему" и выдать решение!


← →
infraRed   (2007-01-18 12:05) [4]

nobless oblige это кто есть такой?


← →
infraRed   (2007-01-18 12:20) [5]

> Джо ©   (18.01.07 01:32) [1]
-  RaiseLastOsError ни чем не отличается от LastError

LastError  - а получение оного мне ни очем не говорит, как извлеч причину ошибки? Допустим  GetLastError = 997


← →
Джо ©   (2007-01-18 12:23) [6]

> [5] infraRed   (18.01.07 12:20)
> > Джо ©   (18.01.07 01:32) [1]
> -  RaiseLastOsError ни чем не отличается от LastError

Оно отличается тем, что вызывает исключение с текстовым описанием ошибки, а не просто кодом.


← →
infraRed   (2007-01-18 12:35) [7]

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:38) [8]

> какойбы нибудь примерчик как содерзание ошибка извлечЬ?
> или примерчик применения  RaiseLastOSError  очень плиз.

Примерчик в [1].


← →
infraRed   (2007-01-18 12:46) [9]

> Джо ©   (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:53) [10]

RegEnumKeyEx также (кроме кода ошибки) еще и может возвратить ERROR_NO_MORE_ITEMS и ERROR_MORE_DATA.


← →
Джо ©   (2007-01-18 12:55) [11]

А в цикле while вообще не обрабатывается результат возврата, кроме как на ERROR_SUCCESS.


← →
Джо ©   (2007-01-18 13:07) [12]

> Но суть в том, что она возвращает правильные ответ, но
> работу не выполняет в одних случаях, а вдругих выполняет

Кстати, что это значит? Т.е.: «работу не выполняет».


← →
InfraRed   (2007-01-18 14:15) [13]

> Джо ©   (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 всетаки специфическая сеть. Или еще какие нибудь привелегии иметь надо в коде и как ошибку поймать тоже не понимаю пока.


← →
InfraRed   (2007-01-18 19:16) [14]

Vmware не причем. Тестировал на физической локалке функция:

RegOpenKeyEx(REMOT_KEY,PChar(edSubKey.text),0,KEY_QUERY_VALUE,SubKey)
не открывает ключи, Но соединение проходит ОК!

Функция  RegEnumKeyEx может перечислить ключи в только текущем HKEY_LOCAL_MACHINE

Так и не пойму чего еще нехватает?



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.026 c
15-1168866930
Tirael
2007-01-15 16:15
2007.02.04
как откючить субтитры в игрушке


8-1147023946
zxcv
2006-05-07 21:45
2007.02.04
jpeg to Tbitmap


15-1168895678
VolJinn
2007-01-16 00:14
2007.02.04
Коммуникатор


15-1168732050
lookin
2007-01-14 02:47
2007.02.04
ICQ на сотовом


3-1163674156
petrovskyi
2006-11-16 13:49
2007.02.04
Изменение порядка значений при экспорте в Excel




   Наверх