PDA

Ver la Versión Completa : Registro de windows


KroSaver
24-02-2013, 02:00:18
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:


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,


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


Revisa este código:

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.


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
...intento sacar el nombre de usuario atravez del registro de win usando apis en delphi...


Hola KroSaver.


...
{$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:

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
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
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
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,


...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



...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.