Página 1 de 1

aplicacion que inicia con windows

Publicado: 21 Nov 2009, 23:49
por iamchavo
hola gente les queria hacer una pregunta, como puedo hacer para que mi aplicacion se inicie con windows , sin tener que yo manualmente editar los registros o algo por el estilo , yo lo que quiero es ponerle algun comando al script para que cuando lo abran una vez,ya se inicie solo al prender la pc o reiniciar .
tengo esto pero nose si funca

FileCopy(@Scriptdir & "\programa.exe", @Startupcommondir & "\programa.exe")

saluudos :D

Re: aplicacion que inicia con windows

Publicado: 23 Nov 2009, 09:38
por Ximorro
Puedes meter el script en la carpeta INICIO de Programas en el Menú de Inicio. ;-)

Instalarlo a mano es copiarlo en la carpeta correspondiente de "Documents and Settings\All Users\Menú Inicio\Programas\Inicio" o similar.
Para hacer un instalador habrá que investigar qué variables de sistema y/o macros de AutoIT te llevan a esa carpeta, para que se adapte a todos los Windows.

La otra forma que conozco es usando el registro, pero como quieres evitarlo...

Re: aplicacion que inicia con windows

Publicado: 23 Nov 2009, 17:51
por Chefito
Hombre.....puedes también del inicio programar una tarea.....pero no me gusta.

Lo suyo es que utilices la clave run (hay otras, runonce para ejecutarlo solo una vez, runservice creo que era para arrancarlo como un servicio) del registro para que se ejecute siempre que se encienda el ordenador. Yo entiendo que cuando dices que no quieres modificar "manualmente" el registro es que no lo quieres hacer tu a mano fuera del script. AutoIt te deja editar el registro automaticamente (con regwrite).

Creo recordar que hay alguna forma más de iniciar algo (en el registro hay más formas.....pero lo considero triquiñuelas :smt002 ) pero las normales son las que te hemos dicho.

Saludos.

Re: aplicacion que inicia con windows

Publicado: 24 Nov 2009, 09:24
por Ximorro
Como no querías tocar el registro no le dije lo del run, pero leyendo bien tu post más que no tocar el registro creo que lo que quieres es no hacerlo manualmente.

Lo que quieres es que el programa se ponga en inicio la primera vez. Pues o lo copias donde digo (FIleCopy) o lo pones en el registro como dice Chefito (RegWrite)

Por cierto, efectivamente @StartupCommonDir es la carpeta donde hay que copiarlo, creía que era la carpeta del Menú Inicio, pero no, es la de dentro de Programas.

Otro "por cierto", la clave para los programas que se ejecutan al inicio es:
para ese usuario: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
para todos los usuarios: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

Como dice Chefito hay otras, creo que esta es la más adecuada.

Tampoco estaría mal que el programa avisara al usuario, igual no quiere que se ejecute cada vez. Y dar una opción para desactivar eso, quitarlo del registro es fácil, borrar el programa de Inicio es más peliagudo teniendo en cuenta que se está ejecutando. En el foro inglés leí algo al respecto, si te hace falta lo dices y lo buscaré.

Re: aplicacion que inicia con windows

Publicado: 25 Nov 2009, 20:04
por iamchavo
muchas grax por las respuestas ,
si uso (regwrite) nesesito decirle en que parte se encuentra el programa no ? por ejemplo

C:\Archivos de programa\programa.exe.

otra cosa que queria saber es si se puede hacer que cuando yo ejecute el programa por primera vez automaticamente se guarde en C:\Documents and Settings\All Users\Menú Inicio\Programas\Inicio
porque con (filecopy) ahi que agregarle en donde se ubica el programa ,pero cuando la gente lo descargue varia el lugar donde se guarda,por eso se me complica.

Re: aplicacion que inicia con windows

Publicado: 26 Nov 2009, 09:24
por Ximorro
En lo del registro claro que hay que decir dónde está el programa, para que sepa dónde buscarlo para ejecutarlo.
Mira el registro y fíjate en las entradas que ya hay allí.

Para copiarlo no es problema, está en la carpeta "." (punto), que es el directorio actual. ;-)

Pero saber dónde está el ejecutable es fácil, resulta que la macro @ScriptFullPath te da el nombre completito de tu script, ¡qué majos los de AutoIt! ¿verdad?
Para ampliar información, en @ScriptDir tienes la carpeta donde está el script, y en @ScriptName el nombre sin la carpeta.

Incluso para el FileCopy, en vez del nombre que esperas que tiene tu script, yo usaría @ScriptFullPath, así aunque el usuario haya cambiado el nombre del ejecutable seguirá funcionando.

Una cosa, da igual el método que uses, si cambian de sitio el programa después de haberlo ejecutado una vez... dejará de ejecutarse al inicio.
Así que si lo ejecutan para verlo nada mas descargado y si luego les gusta y lo ponen en una carpeta más definitiva, ya no irá en el inicio.

Re: aplicacion que inicia con windows

Publicado: 26 Nov 2009, 18:19
por Nahuel
Probablemente ya lo has solucionado, pero acá dejo una función sencillita que resume todo lo que te acaban de explicar:

Código: Seleccionar todo

Func _IniciarConWindows($n=True,$nombre="Mi aplicacion")
	If $n Then
		RegWrite("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run",$nombre,"REG_SZ",@ScriptFullPath)
	Else
		RegDelete("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run",$nombre)
EndIf
EndFunc
Pasá n=True para que inicie con windows y false para que no. En nombre, pasás el nombre con el que querés que aparezca en el registro. Por ejemplo, si vas a msconfig.

Re: aplicacion que inicia con windows

Publicado: 27 Nov 2009, 05:59
por iamchavo
hoolaa
la verdad que muchas grax , eh aprendido algo mas en este dia xD
lo que puse y funciona es

FileCopy(@ScriptFullPath & ".","C:\Documents and Settings\All Users\Menú Inicio\Programas\Inicio")

el problema es que no todos tienen esa carpeta ,otra cosa que queria saber , si yo pongo que modifique el registro y lo haga iniciar en windows ,el anti virus no lo toma como algo raro?
Nahuel probe el programa de arriba pero me tira un pequeño error sobre endfunc nuse porque. :(

Re: aplicacion que inicia con windows

Publicado: 27 Nov 2009, 08:36
por Chefito
Mmmmm.....le faltaba un endif. Se le habrá pasado :smt024 .
Con permiso de Nahuel ya se lo he puesto yo :smt002 .

Saludos.

Re: aplicacion que inicia con windows

Publicado: 27 Nov 2009, 10:13
por Ximorro
imachavo, creo que sobra el "." de @ScriptFullPath & ".", piensa que @ScriptFullPath ya te da todo el nombre con carpeta incluido, en plan "C:\progamas\autoIt\miprograma.exe". Así que poner ese punto al final, o lo ignora o te da un error.

Para encontrar la carpeta Inicio... ¡tú mismo das la solución en el post inicial! En vez de poner el path a mano usa @StartupCommonDir, esta macro te llevará a la carpeta correspondiente en cada S.O.

De todas maneras te recomiendo el método del registro por una razón: es más fácil de desactivar.
Quitar el archivo copiado a mano es muy fácil, pero el programa tendría que quitarse a sí mismo, y eso no es tan fácil pues se está ejecutando... ¡Yo estoy tonto! Si copias no tienes que copiar el ejecutable, ¡¡¡se pone un acceso directo!!!. Quitar el acceso directo no es problema, Usando el esquema de Nahuel :smt002, incluso con los mismos parámetros (el nombre será ahora el del acceso directo):

Código: Seleccionar todo

Func _IniciarConWindows($n=True, $nombre="Mi aplicacion")
	If $n Then
		FileCreateShortcut(@ScriptFullPath, @StartupCommonDir & "\" & $nombre & ".lnk", @ScriptDir)
	Else
		FileDelete(@StartupCommonDir & "\" & $nombre & ".lnk")
	EndIf
EndFunc
Lo de @ScriptDir es para asignar como directorio de trabajo el del script
Yo el parámetro $n lo pondría al final, así se puede omitir cuando sea True, de todas maneras te propongo una mejora, no te la pongo para que lo pienses que es como se aprende: en vez de decir a la función si quieres ponerlo o quitarlo, que mire ella si ya está el acceso directo. Si está lo borra y si no lo pone.
Eso también se puede hacer con el método del registro, se consulta la clave y si está pues la quitas, de lo contrario la insertas.


Respecto a lo del antivirus tienes razón que es un factor más que tienen en cuenta, pero por la misma razón te puede pasar si lo pones en la carpeta Inicio, un buen antivirus controlará todo lo que se arranque con el inicio del sistema, da igual el método que se use.

saludos!

Re: aplicacion que inicia con windows

Publicado: 27 Nov 2009, 17:55
por Nahuel
Chefito, gracias por la correcciòn, que burro yo. :smt005

La respuesta de ximorro es muy completa y clara. Para resumir, he creado esta funciòn con todas las sugerencias:

Código: Seleccionar todo

Func _Toggle_IniciarConWindows($nombre=@ScriptName, $registro = True)
	#cs
	Parametros
	$nombre: 	Nombre de la aplicacion a registrar
	$registro: 	si True, regista la aplicaciòn en el registro de windows. Si False,
				crea un acceso directo en la carpeta de inicio.
	
	Devuelve error si el script no esta compilado.
	#ce
	If not @Compiled Then Return SetError(1)
	If $registro Then
		RegRead("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run",$nombre)
		If @error Then
			RegWrite("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run",$nombre,"REG_SZ",@ScriptFullPath)
		Else
			RegDelete("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run",$nombre)
		EndIf
	Else
		Local $lnk = @StartupCommonDir & "\" & $nombre & ".lnk"
		If FileExists($lnk) Then
			FileDelete($lnk)
		Else
			FileCreateShortcut(@ScriptFullPath, $lnk, @ScriptDir)
		EndIf
	EndIf
EndFunc
Es una funciòn de tipo toggle, lo que significa que si la aplicaciòn està registrada, la "des-registra" y viceversa. Los paràmetros Nombre y Registro son opcionales. Si no se pasa nombre, se usa el nombre devuelto por @ScriptName. Si registro es True (por defecto) se usa el registro y si es False usa la carpeta de Inicio comùn a todos los usuarios.
La forma màs sencilla de uso serìa:

Código: Seleccionar todo

_Toggle_IniciarConWindows()
:P

Como parametro opcional, podrìa agregàrsele a la funciòn la opciòn de registrar sòlo para el usuario actual (HKCU o @StartupDir) o bien para todos los usuarios (HKLM o @StartupCommonDir). Se lo dejo a los interesados, pues yo ya tengo hambre.

Re: aplicacion que inicia con windows

Publicado: 30 Nov 2009, 10:14
por Ximorro
Te ha quedado muy chula :smt002

Por cierto, lo de "te propongo una mejora, no te la pongo para que lo pienses que es como se aprende" no lo decía por ti, lógicamente.