Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-09-2006
Thor Thor is offline
Registrado
 
Registrado: jul 2004
Posts: 6
Poder: 0
Thor Va por buen camino
RegQueryValue que hago mal?

Hola, intentaba acceder al registro con la función del título con este código:
Código Delphi [-]
var
  NewKey: Hkey;
  Buffer: array[0..32765] of char;
  i: integer;
  bytesread: integer;
begin
  bytesread := 0;
  if RegOpenKey(HKEY_LOCAL_MACHINE, 'SOFTWARE\A', NewKey) = ERROR_SUCCESS then
  begin
    i := RegQueryValue(NewKey, 'ejem', nil, bytesread);
    FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, nil, i, 0, buffer, 32765, nil);
    ShowMessage(buffer);
  end
  else
    ShowMessage('Error al acceder a la clave');
end;
Me he mirado la documentación de msdn y ejemplos que he encontrado por la red, pero al ejecutarlo y gracias a FormatMessage me muestra el error:
"El sistema no puede hallar el archivo especificado"
Y existe el valor "ejem" en la clave HKEY_LOCAL_MACHINE\SOFTWARE\A

Según la documentación de msdn con el tercer parametro de RegQueryValue a nil se deberia guardar en bytesread la longitud de el valor que voy a leer, pero siempre esa longitud vale cero.

No es que busque otro camino para hacer lo mismo, ya que con RegQueryValueEx si que consigo acceder al valor, sino que me gustaría por qué así no funciona.

Gracias y saludos.
Responder Con Cita
  #2  
Antiguo 27-09-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Maldita pregunta casi me vuelve loco, yo tampoco entendía que hacías mal. Yo mismo lo haría igual, y efectivamente con RegQueryValueEx funciona perfectamente. Pero ya encontré la explicación, y es una tontería:

Primero debemos fijarnos en una cosa, la ayuda dice de la función RegOpenKeyEx:
Cita:
This function retrieves the data for a key's first value that has a NULL name
Es decir, no puede leer los valores que hay dentro de una clave, solo es capaz de leer el valor por defecto (Predeterminado). El parametro lpSubKey solo puede ser otra CLAVE, nil, o una cadena vacia. Es decir:

Código Delphi [-]
// Se puede hacer esto
RegQueryValue(NewKey,'', nil, bytesread);
// O tambien
RegQueryValue(NewKey,nil, nil, bytesread);
// Incluso se puede hacer esto otro
RegOpenKey(HKEY_LOCAL_MACHINE, 'SOFTWARE', NewKey);
RegQueryValue(NewKey,'A', nil, bytesread);

Es decir no puede leer otro valor distinto del predeterminado, esta función solo se incluye por compatibilidad con Windows 3.1, por eso es tan limitada.

Que agusto me quede ...
Responder Con Cita
  #3  
Antiguo 27-09-2006
Thor Thor is offline
Registrado
 
Registrado: jul 2004
Posts: 6
Poder: 0
Thor Va por buen camino
Que agusto me he quedado yo tambien, casi me vuelvo loco !, muchisimas gracias por resolverlo.
Saludos seoane.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
que hago mal? jvalles Gráficos 2 19-07-2005 14:45:06
Como las hago? jam888 Firebird e Interbase 7 06-05-2005 22:45:41
Como hago... Andres_Franco Varios 1 08-01-2004 17:34:19
¿como lo hago? loenx Conexión con bases de datos 6 01-11-2003 15:26:34
Como lo hago¿ MANUEL OVAL SQL 6 31-10-2003 14:43:39


La franja horaria es GMT +2. Ahora son las 15:52:54.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi