Guardar valor de las claves del Registro en .txt

Iniciado por WaAYa HaCK, 12 Junio 2011, 13:12 PM

0 Miembros y 1 Visitante están viendo este tema.

WaAYa HaCK

Hola a todos! Básicamente es esto: ¿cómo se puede guardar el contenido o valor de una clave conocida del Registro en un archivo de texto? He leído un post donde Hendrix preguntaba algo parecido, pero no me vale.


Si tuviéramos una clave en el Registro:
HKCU\Control Panel\Desktop\ConvertedWallpaper

cuyo valor fuera:
C:\Wallpapers\mi_fondo.bmp

Qué forma hay para que en un archivo de texto aparezca
El valor de la clave "HKCU\Control Panel\Desktop\ConvertedWallpaper" es "C:\Wallpapers\mi_fondo.bmp"
??


¿Se puede hacer con un .bat? ¿Un VBScript? ¿En Python?
Gracias!

Waaya
La cacatúa yoyó es nueva en el zoo!

SuperDraco

#1
para empezar puedes exportar la clave manualmente, y se guarda en .REG... pero supongo que eso ya lo sabes.

Para hacer más o menos lo que dices, pues con este batch mismo que te acabo de hacer:


Código (dos) [Seleccionar]
@echo off
setlocal enabledelayedexpansion

For /F "tokens=1,2,3*" %%a in ('reg query "HKCU\control panel\desktop" /v "Wallpaper"') do (
Set clave=%%a
set Tipo=%%b
Set valor=%%c
)

echo El valor de la clave "!clave!" de tipo "!tipo!" es "!valor!" >> clave.txt
notepad clave.txt
pause>nul





Otra forma de hacerlo sería exportando la clave... pero no lo aconsejo ya que las claves se importan con caracteres dobles y podria crear confusion.

Código (dos) [Seleccionar]
@echo off
set Clave=HKCU\control panel\desktop

reg export "%clave%" clave.reg /y >nul
For /F "tokens=1,2* delims==" %%a in ('type clave.reg ^| findstr /r ^\""Wallpaper""=') do (
echo El valor de la clave "%clave%" %%a es %%b
del /Q clave.reg
)

pause>nul



Resultado:
El valor de la clave "HKCU\control panel\desktop" "Wallpaper" es "C:\\Users\\Administrador\\AppData\\Roaming\\Microsoft\\Windows\\Themes\\TranscodedWallpaper.jpg"

Como ves las barras son dobles. se puede arreglar en el for, pero no merece la pena ya que hay muchos más caracteres que aparecen dobles al exportar, así que te recomiendo unicamente la primera opción.
No he vuelto, solo estoy de paso.

skapunky

Puedes usar ese batch, aunque también puedes hacerlo con otros lenguajes, por ejemplo en visual basic puedes utilizar el WMI, aquí ejemplo:

Código (vb) [Seleccionar]
  1. 'Constantes para acceder a las difentes ramas de l registro  
  2. Const HKEY_CLASSES_ROOT = &H80000000  
  3. Const HKEY_CURRENT_USER = &H80000001  
  4. Const HKEY_LOCAL_MACHINE = &H80000002  
  5. Const HKEY_USERS = &H80000003  
  6. Const HKEY_CURRENT_CONFIG = &H80000005  
  7.  
  8.  
  9. Private Sub Command1_Click()  
 10.  
 11.     Dim Wmi As Object  
 12.     Dim ret As Long  
 13.  
 14.     'Computadora local  
 15.     Name_Computadora = "."  
 16.      
 17.      
 18.     Set Wmi = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" _  
 19.                         & Name_Computadora & "\root\default:StdRegProv")  
 20.  
 21.      
 22.     ' Ruta de la clave a leer  
 23.     Path_clave = "SOFTWARE\Microsoft\Windows\CurrentVersion\Run\"  
 24.      
 25.     ' Nombre del Valor a leer  
 26.     Nombre_Valor = "SoundMax"  
 27.      
 28.     'Lee el dato de tipo cadena  
 29.     ret = Wmi.GetStringValue(HKEY_LOCAL_MACHINE, Path_clave, Nombre_Valor, Valor)  
 30.      
 31.     'Muestra el valor devuelto en la variable " Valor "  
 32.     MsgBox " Valor: " & Valor, vbInformation  
 33.    
 34.     Set Wmi = Nothing  
 35.  
 36. End Sub  


Mirar fuente mas información: Aquí

Eso lo cargas en un textbox o listbox y guardas el contenido en un txt.
Killtrojan Syslog v1.44: ENTRAR

WaAYa HaCK

pitoloko, la verdad es que había usado reg export, pero no había pensado de hacerlo con reg query. Tu batch me va perfecto.

Skapunky, una pregunta: ¿cómo puedo cargar en un textbox el valor y guardarlo en un txt?  :-[ es que no sé una ***** de VB  :(

De todos modos, ¡gracias a los dos!
Waaya
La cacatúa yoyó es nueva en el zoo!