• Últimos Comentarios
  • Entradas Aleatorias
  • Lo Más Popular

1000 visitas

0 comentarios | Me alegra ver que mi fotoblog ya ha recibido mas de 1000 visitas. Asi que os quiero dar las gracias a todos los que...

Aparición

0 comentarios | ...

Renombrado masivo con Métamorphose

1 comentario  | Metamorphose es una herramienta profesional para facilitar el trabajo a la hora de renombrar masivamente tanto ...

Pequeño "déjà vu" en Series de TV

0 comentarios | Estas ultimas semanas me estoy poniendo al dia con dos series de television que tenia pendientes de ver y que os re...

21/01Escribir Tipos Binarios en el Registro

Después del comentario de Jack en mi última entrada sobre la lectura/escritura del registro de Windows usando VBScript, me puse a investigar como se podían introducir valores binarios en una clave.

Si tuvieramos que introducir un valor binario con formato corto usaríamos simplemente la instrucción RegWrite:

WSHShell.RegWrite("\HKey\KeyTest\", 0x1, "REG BINARY")

Pero, tras consultar unas cuantas páginas especializadas, he descubierto que no existe una forma automática de realizar este proceso para valores con formato largo [p.e: 00 00 10 01]. La única solución posible que tenemos que usar se basa en generar una archivo temporal con la información a grabar e importarlo en el registro [sí, es muy cutre].

Os presento las funciones necesarias para escribir y leer valores binarios en las claves del registro de Windows:

Procedimiento para Escribir en el Registro un Valor Binario

Visual Basic:
  1. Sub RegBinWrite (key, value, data)
  2.  
  3.   Dim st_TEMPFILE
  4.   st_TEMPFILE = “wBin.reg”
  5.  
  6.   Dim oFS
  7.   Dim txtStream
  8.   Dim WshShell
  9.   Dim valString
  10.  
  11.   key = ”[“ & key & ”]”
  12.  
  13.   If value <> ”@” then
  14.     value = chr(34) & value & chr(34)
  15.   End if
  16.  
  17.   valString = value & ”=” & data
  18.  
  19.   Set oFS = CreateObject(“Scripting.FileSystemObject”)
  20.   Set txtStream = oFS.CreateTextFile(st_TEMPFILE,True)
  21.   txtStream.WriteLine(“REGEDIT4”)
  22.   txtStream.WriteLine(key)
  23.   txtStream.WriteLine(valString)
  24.   txtStream.Close
  25.  
  26.   Set WshShell = CreateObject(“Wscript.Shell”)
  27.   WshShell.Run “regedit /s “ & st_TEMPFILE, 1, True
  28.   Set WshShell = Nothing
  29.  
  30.   oFS.DeleteFile st_TEMPFILE
  31.   Set oFS = Nothing
  32.  
  33. End Sub

Para realizar el proceso haríamos una llamada tal que así:

RegBinWrite "HKEY_CLASSES_ROOT\.000HNK", "Prueba", "hex:00,00,01,00"

Y si quisieramos que la clave binaria sea la predeterminada, usaríamos el caracter @:

RegBinWrite "HKEY_CLASSES_ROOT\.000HNK", "@", "hex:00,00,01,00"

Función para Leer un Valor Binario del Registro

Visual Basic:
  1. Function stRegBinary (RegBinaryArray)
  2.  
  3.   Dim item, st
  4.  
  5.   If Not isarray(RegBinaryArray) Then
  6.     stRegBinary = ””
  7.   Else
  8.     For Each item In RegBinaryArray
  9.       st= st & CStr(Right(“00” & HEX(item),2)) & ” “
  10.     Next
  11.     stRegBinary = Trim(st)
  12.   End If
  13.  
  14. End Function

Y para obtener el valor usaríamos la función del siguiente modo:
Set oReg = CreateObject("Wscript.Shell")
strClave = oReg.RegRead("HKEY_CLASSES_ROOT\.000HNK\Prueba")
MsgBox stRegBinary(strClave)

24/12Editar el Registro con VBScript

Tras buscar información para mi entrada anterior, voy a escribir una breve entrada con lo necesario para poder leer y editar el registro de Windows mediante VBScript.

Los tres objetos que vamos a usar son RegRead, RegWrite y RegDelete.
En relación a la sintaxis a usar para la ruta del registro que queremos modificar tenemos que tener en cuenta:

Podemos abreviar las ramas del registro:

  • HKEY_CURRENT_USER > HKCU
  • HKEY_LOCAL_MACHINE > HKLM
  • HKEY_CLASSES_ROOT > HKCR
  • HKEY_USERS > HKCU > HKEY_USERS
  • HKEY_CURRENT_CONFIG > HKEY_CURRENT_CONFIG

Dependiendo de si terminamos la ruta con o sin barra invertida “" estaremos referenciando a la rama (o su valor por defecto) o al nombre de un valor:

  • “HKCU\Control Panel\Desktop" se referirá a la rama “Desktop” o su valor por defecto.
  • “HKCU\Control Panel\Desktop\Wallpaper” se referirá al valor de la variable “Wallpaper” dentro de la rama “Desktop”

Registro de Windows

También conviene repasar los distintos tipos de datos que puede contener el registro:

  • REG_SZ: una cadena de tipo String
  • REG_DWORD: un valor numérico de tipo entero
  • REG_BINARY: un valor de tipo binario
  • REG_EXPAND_SZ: una cadena de tipo string
  • REG_MULTI_SZ: una matriz de cadenas

Para probar cualquiera de los ejemplos siguientes, puedes crear un nuevo archivo con extensión .vb [p.e: pruebas_registro.vb] y abrirlo con el Bloc de notas para copiar el contenido.

Leer datos del registro:

Vamos a ver un ejemplo para recuperar la ruta de la imagen que tenemos como escritorio:

Visual Basic:
  1. ‘Definimos y creamos el objeto que usaremos para trabajar con el registro:
  2. Dim oReg As Object
  3. Set oReg = CreateObject(“Wscript.Shell”)
  4.  
  5. ‘Definimos las variables necesarias
  6. Dim strClave As String
  7.  
  8. ‘Guardamos en la variable el valor de la clave
  9. strClave = oReg.RegRead(“HKCU\Control Panel\Desktop\Wallpaper”)
  10.  
  11. ‘Mostramos en un mensaje el valor de la clave
  12. MsgBox strClave
  13.  
  14. ‘Destruimos la variable de objeto
  15. Set oReg = Nothing

Eliminar datos del registro:

Si quisieramos eliminar esa clave del registro, sería tan sencillo como pasar la ruta completa como parámetro. Te recomiendo hacer una copia de seguridad de la rama del registro en la que vayas a realizar pruebas antes de ponerte a ello.

Visual Basic:
  1. ‘Definimos y creamos el objeto que usaremos para trabajar con el registro:
  2. Dim oReg As Object
  3. Set oReg = CreateObject(“Wscript.Shell”)
  4.  
  5. ‘Eliminamos la clave del registro
  6. oReg.RegDelete(“HKCU\Control Panel\Desktop\Wallpaper”)
  7.  
  8. ‘Destruimos la variable de objeto
  9. Set oReg = Nothing

Crear y modificar datos del registro:

A la hora de escribir claves en el registro tenemos que tener en cuenta el tipo de dato que vamos a almacenar.
Como ejemplo, cambiaremos la ruta de la imagen del escritorio definida:

Visual Basic:
  1. ‘Definimos y creamos el objeto que usaremos para trabajar con el registro:
  2. Dim oReg As Object
  3. Set oReg = CreateObject(“Wscript.Shell”)
  4.  
  5. ‘Definimos las variables necesarias
  6. Dim strRuta As String
  7. strRuta = “C:\fondo.jpg”
  8.  
  9. ‘Escribimos el nuevo valor de la clave
  10. oReg.RegWrite “HKCU\Control Panel\Desktop\Wallpaper”, strRuta, “REG_SZ”
  11.  
  12. ‘Destruimos la variable de objeto
  13. Set oReg = Nothing

Editar el Registro de Windows con VBScript - Ejemplos
Tam: 1,1 Kb

20/12Adjuntos Bloqueados en Outlook

Microsoft Outlook

Si eres usuario del cliente de correo electrónico de Microsoft, es posible que en alguna ocasión al recibir un correo con un archivo adjunto Outlook te haya bloqueado el acceso al fichero. Esto suele ocurrir cuando te envían archivos con extensiones .exe, .com, etc.

Siguiendo estos pasos podrás definir que extensiones quieres que Outlook no bloquee:

  1. Salga de Outlook si está en ejecución.
  2. Haga clic en Inicio y, a continuación, en Ejecutar.
  3. En el cuadro Abrir, escriba regedit y, después, haga clic en Aceptar.
    Compruebe que existe la clave del Registro siguiente para su versión de Outlook. Si existe, vaya al paso 5.
    Microsoft Outlook 2000:
     HKEY_CURRENT_USER\Software\Microsoft\Office\9.0\Outlook\Security

    Microsoft Outlook 2002:
     HKEY_CURRENT_USER\Software\Microsoft\Office\10.0\Outlook\Security

    Microsoft Office Outlook 2003:
     HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Outlook\Security

  4. Si la clave del Registro no existe, créela. Para crear la clave del Registro, busque la siguiente clave del Registro y haga clic en ella: HKEY_CURRENT_USER\Software\Microsoft
    1. Haga clic en el menú Edición, en Nuevo y, después, en Clave.
    2. Escriba Office y, a continuación, presione Entrar.
    3. Haga clic en el menú Edición, en Nuevo y, después, en Clave.
      Escriba 11.0 [depedendiendo de la versión de Office instalada] y, a continuación, presione Entrar.
    4. Haga clic en el menú Edición, en Nuevo y, después, en Clave.
    5. Escriba Outlook y presione Entrar.
    6. Haga clic en el menú Edición, en Nuevo y, después, en Clave.
    7. Escriba Seguridad y, a continuación, presione Entrar.
  5. Haga clic en el menú Edición, en Nuevo y, después, en Valor de cadena (alfanumérico).
  6. Escriba el siguiente nombre para el nuevo valor: Level1Remove
  7. Presione Entrar.
  8. Haga clic con el botón secundario del ratón en el nombre del nuevo valor y, a continuación, haga clic en Modificar.
  9. Escriba la extensión de nombre de archivo del tipo de archivo que desea abrir en Outlook. Por ejemplo: .exe
  10. Si desea especificar varios tipos de archivo, utilice el siguiente formato: .exe;.com
  11. Haga clic en Aceptar y salga del Registro.

Cuando inicies Outlook, podrás abrir los tipos de archivo que se especificó en el Registro.

[Vía: Soporte Técnico de Microsoft]

La pregunta que me surge es… ¿es que no pueden incluir esto como parte de la parametrización de Outlook, en la preciosa pestaña de Seguridad por ejemplo, que le tienen que decir a un usuario que modifique el registro de Windows?

Para los que quieran comodidad, he montado un pequeño script en VB que pregunta la versión de Office y las extensiones a habilitar:

Desbloquear Adjuntos de Microsoft Outlook
Compatible: Office 2000, 2002 y 2003     Tam: 1,77 KB

17/08Actualizar el fondo del escritorio con un VBS

Últimamente me viene ocurriendo un problemilla en el portátil de casa: como lo dejo encendido para bajar cosillas de internet, lo que hago es cerrarlo para que la pantalla se apague. Al pasar un tiempo en este estado y volver a abrirlo la imágen de fondo del Windows desaparece y me queda solamente con el color de fondo que tenga el tema aplicado. Lo raro es que en el registro de Windows todavía está la dirección de la imágen a usar como wallpaper. Es un problema del refresco de la pantalla de Windows [como no…]
Me he creado un pequeño script en VB para recargar la imágen de fondo en el registro [por si acaso la elimina] y lanzar la actualización de los parámetros del usuario activo en Windows para que vuelva a tener en cuenta esa imágen.

Visual Basic:
  1. Dim WshShell
  2. Set WshShell = WScript.CreateObject(“Wscript.Shell”)
  3.  
  4. ConvertedWallpaper = “C:\Documents and Settings\Usuario\Mis documentos\Mis imágenes\Fondo.jpg”
  5. Wallpaper = “C:\Documents and Settings\Usuario\Configuración local\Datos de programa\Microsoft\Wallpaper1.bmp”
  6.  
  7. WshShell.RegWrite “HKCU\Control Panel\Desktop\Wallpaper”, Wallpaper
  8. WshShell.RegWrite “HKCU\Control Panel\Desktop\ConvertedWallpaper”, ConvertedWallpaper
  9. WshShell.Run  “C:\WINDOWS\System32\RUNDLL32.EXE user32.dll, UpdatePerUserSystemParameters”, 1, False
  10. ‘Wscript.Echo "Proceso finalizado."
  11.  
  12. Set WshShell = Nothing

Así, abro una nueva categoría dentro de la de Programación que se dedicará a los scripts en visual basic que encuentre de utilidad.

Si teneis el mismo problema, esto os puede ser de utilidad… siempre es mejor que abrir la ventana de opciones del escritorio y cambiarlo a mano ;)