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
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:
@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.
@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.
Puedes usar ese batch, aunque también puedes hacerlo con otros lenguajes, por ejemplo en visual basic puedes utilizar el WMI, aquí ejemplo:
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í (http://www.recursosvisualbasic.com.ar/htm/trucos-codigofuente-visual-basic/310-acceder-a-registro-con-wmi.htm)
Eso lo cargas en un textbox o listbox y guardas el contenido en un txt.
Sí 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