Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Registro de windows (https://www.clubdelphi.com/foros/showthread.php?t=82327)

KroSaver 24-02-2013 02:00:18

Registro de windows
 
Buenas noches a todos.

Tengo un problemilla raro con el registro de windows, intento sacar el nombre de usuario atravez del registro de win usando apis en delphi, el codigo funciona pero si el nombre de usuario es KroSaver me debuelve Microsoft pero claramente veo en el registro que es KroSaver :confused:, este es el code:

Código Delphi [-]
if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows NT\CurrentVersion',
0, KEY_SET_VALUE, ClaveReg)= ERROR_SUCCESS) then
  begin
    RegQueryValueEx(ClaveReg, 'RegisteredOwner', nil, nil, @UserName, @SizeUser);
    RegCloseKey(ClaveReg);
  end;

Gracias de antemano y saludos

nlsgarcia 24-02-2013 02:37:20

KroSaver,

Cita:

Empezado por KroSaver
...intento sacar el nombre de usuario atravez del registro de win usando apis en delphi...

Revisa este código:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
   Reg: TRegistry;

begin

   Reg := TRegistry.Create;

   try

      Reg.RootKey := HKEY_LOCAL_MACHINE;

      if Reg.OpenKeyReadOnly('SOFTWARE\Microsoft\Windows NT\CurrentVersion') then
      begin
         ShowMessage(Reg.ReadString('RegisteredOwner'));
         Reg.CloseKey;
      end;

   finally

      Reg.Free;

   end;

end;
El código anterior lee un valor particular del Registro de Windows por medio de la clase TRegistry.

Cita:

Empezado por Delphi Help
TRegistry is a low-level wrapper for the system registry and functions that operate on the registry.

Espero sea útil :)

Nelson.

ecfisa 24-02-2013 11:11:38

Cita:

Empezado por KroSaver (Mensaje 455478)
...intento sacar el nombre de usuario atravez del registro de win usando apis en delphi...

Hola KroSaver.

Código Delphi [-]
...
{$WARNINGS OFF}

function ReadRegistryValue(const aKEY: HKEY; const lpSubkey, lpValueName: PChar): string;
var
  lpType   : DWORD;
  lpcbData : DWORD;
  lpData   : PChar;
  phkResult: HKEY;
begin
  if RegOpenKeyEx(aKEY, lpSubkey, 0, KEY_READ, phkResult) = ERROR_SUCCESS then
  begin
    SetLastError(RegQueryValueEx(phkResult, lpValueName, nil, @lpType, nil, @lpcbData));
    if GetLastError = ERROR_SUCCESS then
    begin
      GetMem(lpData, lpcbData);
      try
        RegQueryValueEx(phkResult, lpValueName, nil, nil, PBYTE(lpData), @lpcbData);
        Result := StrPas(lpData)
      finally
        FreeMem(lpData)
      end
    end
    else
      raise Exception.Create('No se pudo obtener el valor de ' + StrPas(lpValueName));
    RegCloseKey(phkResult);
  end;
end;

Llamada de ejemplo:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  SubKey, ValueName: string;
begin
  SubKey    := 'SOFTWARE\Microsoft\Windows NT\CurrentVersion';
  ValueName := 'RegisteredOwner';
  ShowMessage('Propietario registrado: '+
    ReadRegistryValue(HKEY_LOCAL_MACHINE, PChar(SubKey), PChar(ValueName)));
end;

Saludos.

KroSaver 24-02-2013 16:56:31

Gracias a los 2!

ecfisa buen code pero me sigue dando microsoft en vez del usuario que tengo!

saludos

ecfisa 24-02-2013 19:34:44

Cita:

Empezado por KroSaver (Mensaje 455488)
Gracias a los 2!

ecfisa buen code pero me sigue dando microsoft en vez del usuario que tengo!

saludos

Hola KroSaver.

Que cosa mas extraña...

Probé la función también en Windows XP y Vista y obtengo el nombre del propietario de forma correcta (verificado con regedit).

¿ Seguro que ValueName contiene el valor que esperas ?

Saludos.

KroSaver 24-02-2013 19:37:56

Cita:

Empezado por ecfisa (Mensaje 455489)
Hola KroSaver.

Que cosa mas extraña...

Probé la función también en Windows XP y Vista y obtengo el nombre del propietario de forma correcta (verificado con regedit).

¿ Seguro que ValueName contiene el valor que esperas ?

Saludos.

Si bueno estuvimos provando con un amigo e hicimos codes en c y en delphi y esta pasando algo muy raro, si yo compilo el codigo de c en mi equipo siempre me debuelve microsoft pero si el me pasa el exe compilado me debuelve bien el nombre de usuario :confused:, el en su equipo no puede conseguir el ProductName que es el sistema operativo que se esta usando pero yo si.

Es muy raro nunca tuve este problema!

saludos

ecfisa 24-02-2013 19:43:15

Hola KroSaver.

Me olvidé de comentarte que las pruebas que hice hace un rato sobre XP, Vista y W7 son S.O. de 32 bits. No tengo forma en este momento de comprobar que trabaje bién en S.O. de 64 bits.

Saludos.

KroSaver 24-02-2013 19:44:47

Cita:

Empezado por ecfisa (Mensaje 455493)
Hola KroSaver.

Me olvidé de comentarte que las pruebas que hice hace un rato sobre XP, Vista y W7 son S.O. de 32 bits. No tengo forma en este momento de comprobar que trabaje bién en S.O. de 64 bits.

Saludos.

El sistema que uso es 64Bits Windows 7 y Windows 8 y el xp es 32 bits.

saludos

nlsgarcia 24-02-2013 20:46:19

KroSaver,

Cita:

Empezado por KroSaver
...me sigue dando microsoft en vez del usuario que tengo...El sistema que uso es 64Bits Windows 7 y Windows 8 y el xp es 32 bits

Cita:

Empezado por KroSaver
...si yo compilo el codigo de c en mi equipo siempre me debuelve microsoft pero si el me pasa el exe compilado me debuelve bien el nombre de usuario...

Probé el código del Msg #2 y Msg #3 en las siguientes configuraciones: Windows 7 Professional x32 y Windows Vista Home Premiun x32 (Máquinas Físicas), Windows 7 Professional x32, Windows 7 Professional x64 y Windows XP Professional x32 (Máquinas Virtuales) y en todos los casos funcionaron ambos códigos correctamente.

Pregunto:

1- ¿Probastes el código del Msg #2?

2- ¿Si cambias el valor de RegisteredOwner en tu máquina como se comportan los códigos del Msg #2 y Msg #3?

3- ¿El ejecutable en Delphi y C generado en tu máquina como se comporta en la otra máquina?

Espero sea útil :)

Nelson.


La franja horaria es GMT +2. Ahora son las 13:01:40.

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