Главная страница
    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.06 c
1-1163595674
thevalery
2006-11-15 16:01
2007.02.04
Unicode Caption/Hint


2-1168867032
XTD
2007-01-15 16:17
2007.02.04
Редактирование изображения


15-1168878434
властелин колхоза
2007-01-15 19:27
2007.02.04
MessageBox() из сервиса и стили WinXP


15-1168954110
Black_Live
2007-01-16 16:28
2007.02.04
Что тварят, Что тварят!?


1-1165575251
Hell's Angel
2006-12-08 13:54
2007.02.04
Динамический вызов dll с формой





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