[VBS] Script Basico

Iniciado por MeCraniDOS, 21 Junio 2013, 14:43 PM

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

MeCraniDOS

Hola, quería hacer un script en vbs, que cree una clave en el registro para ejecutar una aplicación que se guarda en "C:\Documents and Settings\---\Datos de programa",  tengo esto escrito...

Código (vb) [Seleccionar]
Dim oReg As Object
Set oReg = CreateObject("Wscript.Shell")

'Definimos las variables necesarias
Dim strRuta As String
strRuta = "Aqui la ruta"

'Escribimos el nuevo valor de la clave
oReg.RegWrite "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run", strRuta, "REG_SZ"

oReg.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run", strRuta, "REG_SZ"

'Destruimos la variable de objeto
Set oReg = Nothing


Claro, si pongo una ruta fija solo vale para mi ordenador, ademas, yo tengo Windows XP y para un Windows Vista o Windows 7 no funciona... Podrían decirme como puedo optimizar este script para cualquier S.O??

Saludos
"La física es el sistema operativo del Universo"
     -- Steven R Garman

Eleкtro

#1
Cita de: MeCraniDOS en 21 Junio 2013, 14:43 PMuna aplicación que se guarda en "C:\Documents and Settings\---\Datos de programa"
Código (vb) [Seleccionar]
strRuta = "Aqui la ruta"
si pongo una ruta fija solo vale para mi ordenador

Podrían decirme como puedo optimizar este script para cualquier S.O??

Usa las variables de entorno de Windows...

Código (vb) [Seleccionar]
strRuta = CreateObject("WScript.Shell").ExpandEnvironmentStrings("%APPDATA%") & "\Carpeta\Aplicacion.exe"
WScript.Echo(strRuta)


Saludos.

EDITO: A parte de eso, no estás creando ninguna clave nueva, estás sobreescribiendo el valor por defecto de la clave... tampoco no es necesario escribir la clave en HKCU y HKLM, si la escribes en HKLM afecta a todos los usuarios quedando HKCU innecesaria, eres libre de hacerlo, pero deberías eligir la que más se adapte a tus necesidades.

Aquí tienes:

Código (vb) [Seleccionar]
KeyName = "HKLM\Software\Microsoft\Windows\CurrentVersion\Run\"
ValName = "Mi aplicacion"
ValData = CreateObject("WScript.Shell").ExpandEnvironmentStrings("%APPDATA%") & "\Carpeta\Aplicacion.exe"

CreateObject("WScript.Shell").RegWrite KeyName & ValName, ValData








z3nth10n

Bueno aquí tienes algunas más.

http://es.wikipedia.org/wiki/Variable_de_entorno#Valores_por_defecto_de_las_variables_de_entorno

Que te ayude Elektro a adaptarlas, porque yo soy un cafre. :xD

Interesados hablad por Discord.

MeCraniDOS

Entonces el script quedaría finalmente así?

Código (vbnet) [Seleccionar]

Dim oReg As Object
Set oReg = CreateObject("Wscript.Shell")

' Definimos las variables necesarias
' Dim strRuta As String
' strRuta = "Aqui la ruta"

KeyName = "HKLM\Software\Microsoft\Windows\CurrentVersion\Run\"
ValName = "Hola.exe"
ValData = CreateObject("WScript.Shell").ExpandEnvironmentStrings("%APPDATA%") & "\Carpeta\Aplicacion.exe"

' Escribimos el nuevo valor de la clave

CreateObject("WScript.Shell").RegWrite KeyName & ValName, ValData


' Destruimos la variable de objeto
Set oReg = Nothing


Me da error... no domino mucho la verdad..  :-\ :-\
"La física es el sistema operativo del Universo"
     -- Steven R Garman

z3nth10n


Interesados hablad por Discord.

Eleкtro

#5
@MeCraniDOS
Te da error porque en VBS no se puede declarar el tipo de variable (Dim As...), manéjate solo con "Dim" y "Set".

El código quedaría como tal y como te lo puse:
Citar
Código (vb) [Seleccionar]
   KeyName = "HKLM\Software\Microsoft\Windows\CurrentVersion\Run\"
   ValName = "Mi aplicacion"
   ValData = CreateObject("WScript.Shell").ExpandEnvironmentStrings("%APPDATA%") & "\Carpeta\Aplicacion.exe"
   
   CreateObject("WScript.Shell").RegWrite KeyName & ValName, ValData

Obviamente hay que modificar los valores necesarios... y bueno, si quieres añadirle comentarios a esas lineas o modificarlas un poco eso ya es cosa tuya.

En el último código que has posteado, que es una mezcla de tu code original y del mio, esto está mal:
Citar
Código (vb) [Seleccionar]
Set oReg = CreateObject("Wscript.Shell")
ValData = CreateObject("WScript.Shell").ExpandEnvironmentStrings("%APPDATA%") & "\Carpeta\Aplicacion.exe"
Ya tienes el objeto instanciado en la variable "oREG", pero en la variable "valdata" lo vuelves a instanciar.
ValData = oReg.ExpandEnvironmentStrings(...)

Aparte de la primera línea:
Citar
Código (vb) [Seleccionar]
Dim oReg As Object
Bórrala.

EDITO2: y esta otra, que se me ha pasado de largo:
Citar
Código (vb) [Seleccionar]
Dim strRuta As String








MeCraniDOS

No hay que declarar KeyName, ValName y ValData?? Y "Mi aplicación" y "Aplicación.exe" son las mismas??

Saludos
"La física es el sistema operativo del Universo"
     -- Steven R Garman

Eleкtro

#7
Cita de: MeCraniDOS en 21 Junio 2013, 17:25 PMNo hay que declarar KeyName, ValName y ValData??

Poder puedes, lo que te digo es que no puedes declarar el tipo de variable (dim var as tipo), en VB si, en VBS NO, de todas formas lo de declarar variables no es necesario a menos que quieras llevar un "control" sobre las variables de tu código usando "Option Explicit".
...En un código tán sencillo y pequeño no hace falta.

http://www.w3schools.com/vbscript/vbscript_variables.asp

http://msdn.microsoft.com/en-us/library/t7zd6etz%28v=vs.84%29.aspx

Cita de: MeCraniDOS en 21 Junio 2013, 17:25 PM"Mi aplicación" y "Aplicación.exe" son las mismas??

"Mi aplicación" es el nombre del valor de la clave de registro.
"Aplicación.exe" es el nombre del executable de la aplicación.

Usa el código que te puse y fíjate en como queda la clave del registro para entenderlo...

Saludos








MeCraniDOS

#8
Vale muchas gracias, lo probare y me fijare como queda :silbar:

Editado

Listo, funciona a la perfección

Saludos

"La física es el sistema operativo del Universo"
     -- Steven R Garman