Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   Problema con lectura de registro de windows (https://www.clubdelphi.com/foros/showthread.php?t=62036)

teatry 02-12-2008 05:59:02

Problema con lectura de registro de windows
 
Saludos a todos, mi problema es el siguiente:
Tengo que leer información del registro de windows para listar los idiomas de reconocedores de voz de windows (sapi 5.1), para tal motivo utilizo el siguiente código:

var
Re : TRegistry;
Regi : TRegDataInfo;
Valor : TStringList;
begin
re:=TRegistry.Create;
re.RootKey := HKEY_LOCAL_MACHINE;
re.OpenKey('Software', True);
re.OpenKey('Microsoft', True);
re.OpenKey('Speech', True);
re.OpenKey('Recognizers', True);
re.OpenKey('Tokens', True);
re.OpenKey('MSASREnglish',true);
try
valor:= TStringList.Create;
re.GetValueNames(valor);
re.GetDataInfo('(Predeterminado)',regi);
Edit1.Text:=re.ReadString('(Predeterminado)');
except
end;
El problema es que no me muestra ningún valor, es como que '(Predeterminado)' no tendria ningún valor, pero cuando veo el registro este si tiene un valor que es 'Microsoft English Recognizer v5.1', no se cual es el problema del porque no me devuelve ningún valor, si alguien me podría dar la solución al problema se lo agradeceré.

Saludos.

maeyanes 02-12-2008 17:07:22

Hola...

La forma en que estás abriendo la llave que quieres consultar está mal. La forma correcta sería:

Código Delphi [-]
var
  Reg: TRegistry;

begin
  Reg := TRegistry.Create;
  try
    Reg.RootKey := HKEY_LOCAL_MACHINE;
    if Reg.OpenKey('\Software\Microsoft\Speech\Recognizers\Tokens\MSASREnglish', False) then
    begin
      // Obtenemos valores
      Reg.CloseKey
    end
  finally
    Reg.Free
  end
end;

Esto es, tienes que poner la ruta completa de la llave que quieres abrir. Además, debes el parámetro CanCreate deberías ponerlo en False para no crear la clave si esta no existe. De la forma en que lo haces, lo único que logras es crear varias claves nuevas bajo HKEY_LOCAL_MACHINE (Abre el editor de registro y verás).

Ahora, para obtener un valor predeterminado, no se usa (Predeterminado), se usa simplemente una cadena vacía.

Código Delphi [-]
Valor := Reg.ReadString('', '');

Y ya para finalizar, usa las etiquetas [delphi ] código [/delphi ] (sin los espacios en blanco) cuando necesites publicar código...



Saludos...

droguerman 02-12-2008 17:08:46

Tambien puede ser por permisos de tu usuario, si solo vas a leer valores prueba a usar OpenKeyReadOnly en vez de OpenKey

gcespedes 02-12-2008 18:25:52

Modificar el registro de Windows
 
Hola a todos soy nuevo en este foro, hace algunos días que estoy buscando información relacionada con el tema pero no he podido encontrar, estoy realizando una aplicación que debe modificar el registro de Windows, de echo lo hace pero desde usuarios con permisos administrativos, y quisiera saber si hay alguna forma de hacerlo desde usuarios restringidos. Desde ya muchas gracias.

teatry 03-12-2008 12:37:06

Muchas gracias por sus respuestas, ya esta solucionado el problemas y tomare en cuenta la utilizacion de las etiquetas.

Saludos..


La franja horaria es GMT +2. Ahora son las 21:40:45.

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