Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.02.04;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "Начинающим";
Текущий архив: 2007.02.04;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.047 c
2-1169025031
sergeyst
2007-01-17 12:10
2007.02.04
Показать не свой экран


15-1168848855
ocean
2007-01-15 11:14
2007.02.04
С прошедшим Старым НГ!


2-1168796943
Pasha L
2007-01-14 20:49
2007.02.04
Связь с интернетом. Что лучше использовать


15-1168920267
Slider007
2007-01-16 07:04
2007.02.04
С днем рождения ! 16 января


3-1163395467
pavel_guzhanov
2006-11-13 08:24
2007.02.04
Как в Interbase вставлять в поле текущую дату?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский