|
91
|
Programación / Programación Visual Basic / Re: COPIAR ARCHIVOS AL ESRITORIO
|
en: 2 Febrero 2008, 14:37 pm
|
Dim resul As String resul = Environ("homedrive") & Environ("homepath") & "\Escritorio" If Not IsDir(resul) Then resul = Environ("homedrive") & Environ("homepath") & "\Desktop" End If Private Function IsDir(ByVal DirSpec As String) As Boolean 'Funcion que devuelve True si existe una carpeta y False si no existe On Error Resume Next IsDir = ((GetAttr(DirSpec) And vbDirectory) = vbDirectory) End Function
Environ("homedrive") & Environ("homepath") devuelve C:\Documents And Settings\USUARIOA partir de aí la carpeta Escritorio dependerá del idioma del SO... El codigo ese es mas sencillo que los anteriores y funcionará en los SO con idiomas Español e Ingles...es decir en casi todos ...pero si kieres más eficacia yo preferiría el de Tughack pork me gustan más las APIs...pero weno a tu gusto Corrijanme si me he equivocado... Saludos EDIT: Es mejor usar APIs que objetos eso si k es verdad...los objetos son mucho mas lentos...en este caso aun da algo igual pero por ejemplo yo cuando diseñe un algoritmo de busquedas había mucha diferencia entre usar objetos o APIs...e incluso entre Objetos y las propias funciones del VB había mucha diferencia (minutos)...
|
|
|
92
|
Programación / Programación Visual Basic / Re: Melt
|
en: 1 Febrero 2008, 20:21 pm
|
Los vbs aun son mas cantosos que los BAT De momento me kedo con el BAT que es lo mas funcional y menos detectable...aunke menos profesional que lo del thread en el explorer...pero si es detectado por los AVs no se...aun asi investigaré para saber como se hace bien... saludos
|
|
|
93
|
Programación / Programación Visual Basic / Re: Melt
|
en: 1 Febrero 2008, 15:05 pm
|
Shell "cmd /c ping 127.0.0.1 -n 5 && del " & Chr(34) & App.Path & "\" & App.EXEName & ".exe" & Chr(34), vbHide Si weno, pero aun asi el BAT no se termina de ejecutar asta que el archivo ya no exista...e incluso puedes crear el BAT y ponerlo desde un principio y asi aunke no se termine el programa lo acabará eliminando igual... Lo del thread en el explorer lo intentaré para aprender sobre todo...pero si lo detectan AVs no me sirve de mucho...pero a lo mejor si...miraré como hacerlo que weno...se crear Threads en mi proceso pero no en otro proceso...pero será lo mismo pero para el otro proceso supongo... Saludos
|
|
|
94
|
Programación / Programación Visual Basic / Re: Melt
|
en: 1 Febrero 2008, 10:57 am
|
Haber primero gracias a todos por vuestro interes...empecemos : MadAntrax...la verdad es que yo Melt no se si le daba o no el concepto correcto pero vamos que todo el mundo lo entiende...y weno de la primera forma que dices sería el Melt en caso de que te quieras copiar...ese ya lo se hacer, y la segunda forma (que como tu dices es lo que yo quiero) además de tener que andar creando un archivo y proceso nuevo el nuevo archivo no va a poder eliminarse tampoco...por eso no me sirve... Sobre el thread remoto en el explorer es el método quizás más profesional...pero si es detectado por AVs como que no... Sobre lo de: Shell "cmd /c del " & Chr(34) & App.Path & "\" & App.EXEName & ".exe" & Chr(34), vbHide No siempre funciona...a ver si pones justo esa linea antes del End el cmd.exe y el comando del tarda un tiempo en borrar el archivo y puede que en ese tiemo ya se cerrara el programa, sin embargo, si la carga de CPU es grande (como dice TugHack) o por cualquier razón se ejecuta antes el cmd /c del... no se borrará...por eso lo que os pasa en ordenadores lentos... Sobre el bat ya había pensado en ello...mis ideas eran o crear una simple tarea programada que me lo borrase en 1 minuto (no me gusta esa idea) o crear un bat...lo malo es que los bat son archivos bastante vigilados por AVs...en muchos ordenadores incluso si intentas ejecutar uno no funcionará por las restricciones de los AVs... De momento lo que tengo pensado es el bat (uno parecido al de LeandroA) pork es lo más efectivo quizás...incluso puedo incorporar los tres métodos...el que dice Chefito, el del bat y el de la tarea programada... Aún asi si a alguien se le ocurre otro método mejor que lo diga... Yo voy a provar a ver si con alguna API intenta varias veces borrar el archivo y mientras tanto me da tiempo a cerrarlo para que se borre... Saludos
|
|
|
95
|
Programación / Programación Visual Basic / Melt
|
en: 31 Enero 2008, 23:36 pm
|
Bueno pues a ver, ya se que muchos sabeis que un Melt (autodestruccion) es hacer que después de ejecutarse el programa se borre a si mismo...pues el problema que tengo es que la mayoría de veces el archivo se copia y la nueva copia que se ejecuta es la que borra el original...pero yo no quiero tener que andar copiando ningun archivo...quiero que al terminar su ejecucion se borre...pero si todavía está en ejecución como puedo borrarme a mi mismo??? Esa es la cuestion...a ver si alguien me puede ayudar...se me ocurren métodos como poner una linea del cmd.exe en tareas programadas o para el proximo inicio...pero weno me gustaría algo profesional...que el propio programa se eliminase a si mismo...y como hago si se encuentra en ejecucion??? ese es el problema A ver que ideas se os ocurren...no me hacen falta codigos...simplemente ideas... Saludos
|
|
|
97
|
Programación / Scripting / Re: Comando AT (Batch)
|
en: 23 Enero 2008, 17:01 pm
|
Pues modifica esta linea: if " %a%"=="1" set /A x= %x%+1
así: if " %a%"=="1" set /A x= %x%+ %1
y llamas al BATCH con sintaxis: mibat.bat [minutos]o si prefieres puedes preguntar: set /p minut= Escribe el tiempo en minutos a esperar
y la primera linea que puse que había que modificar en vez de ponerla como puse arriba la pones así: if " %a%"=="1" set /A x= %x%+ %minut%
Saludos
|
|
|
98
|
Programación / Scripting / Re: Comando AT (Batch)
|
en: 23 Enero 2008, 13:56 pm
|
Mira hace un tiempo hice un lanzador de aplicaciones SYSTE;...te servirá para lo que quieres: :: Ejecutar una aplicación como SYSTEM :: Puedes ejecutarla inmediatamente o programarla para cuando quieras :: Tal como está el codigo está programado para ejecutar al intantante la aplicación :: Borra los comentarios REM para ahorrar codigo y fijate en lo que pone :: By nhaalclkiemr if " %TIME:~0,1%"==" " set z=0 %TIME:~1,1% if " %TIME:~8,1%"=="," goto normal if " %TIME:~10,1%"=="," goto 2caso if " %TIME:~12,1%"=="," goto 3caso :normal :2caso :3caso :a if " %a%"=="1" set /A x= %x%+1 REM El segundo 1 especifica el tiempo en minutos que tardará en ejecutarse la aplicación, es modificable REM Solo se puede sumar como máximo 86400 minutos, de lo contrario pueden producirse errores :e at.exe %z%:%x% AQUITUPROGRAMA.EXE REM En lugar de lo anterior puedes poner lo siguiente si quieres que la aplicacion sea visible: REM at.exe %z%:%x% /interactive AQUITUPROGRAMA.EXE REM %z% y %x% son la hora y los minutos a los que se ejecutará la aplicación, puedes poner otra cosa si quieres schtasks /run /tn at1 REM Esta ultima linea ejecuta inmediatamente la aplicación, si la estás programando para una hora determinada borra esta linea :b :c schtasks /create /tn temp /tr AQUITUPROGRAMA.EXE /sc once /st %z%:%x%:00 /ru System REM Esto se ejecutará en caso de que el comando AT falle, es un intento alternativo, de esta manera no se puede hacer visible schtasks /run /tn temp REM Esta ultima linea ejecuta inmediatamente la aplicación, si la estás programando para una hora determinada borra esta linea :error :: Aqui va el BAT que se ejecuta en caso de que se produzca un error
Fijate en los comentarios REM...sobre todo la que pone: REM El segundo 1 especifica el tiempo en minutos que tardará en ejecutarse la aplicación, es modificableYa me dirás... Saludos
|
|
|
100
|
Programación / Scripting / Re: Comando AT (Batch)
|
en: 22 Enero 2008, 17:32 pm
|
puff estais confundiendo cosas...empecemos: Primero diferenciar AT.EXE de SCHTASKS.EXE... AT.EXE es derivado de SCHTASKS.EXE...utiliza la cuenta de servicios AT (por defecto configurada para que se ejecute con privilegios SYSTEM) para crear una tarea programada...su sintaxis es reducida: at.exe /?
El comando AT programa la ejecución de comandos y programas en un equipo a una hora y fecha especificadas. El servicio de programación debe estar en ejecución para utilizar el comando AT.
AT [\\equipo] [ [id] [/DELETE] | /DELETE [/YES]] AT [\\equipo] hora [/INTERACTIVE] [ /EVERY:fecha[,...] | /NEXT:fecha[,...]] "comando"
\\equipo Especifica un equipo remoto. Si se omite este parámetro, los comandos se programan en el equipo local. id Es un número de identificación asignado al comando programado. /delete Cancela un comando programado. Si se omite id, se cancelarán todos los comandos programados en el equipo. /yes Se usa con el comando de cancelación de todos los trabajos cuando no se desea ninguna confirmación. /interactive Permite a la tarea interactuar con el escritorio del usuario cuya sesión coincide con el momento de ejecución de la tarea. /every:fecha[,...] Ejecuta el comando cada día de la semana o mes especificado. Si se omite la fecha, se asume que es el día actual del mes.
/next:fecha[,...] Ejecuta el comando especificado la próxima vez que aparezca ese día (por ejemplo, el próximo jueves). Si se omite la fecha, se asume que es el día actual del mes. "comando" Es el comando de Windows NT o programa por lotes que se va a ejecutar. El comando SCHTASKS.EXE es más amplio...para crear una nueva tarea necesitas ejecutar schtasks.exe /create XXX : schtasks.exe /create /?
SCHTASKS /Create [/S sistema [/U usuario [/P contraseña]]] [/RU nombre_usuario [/RP contraseña]] /SC programa [/MO modificador] [/D día ] [/I tiempo_inactividad] /TN nombre_tarea /TR ejecutar_tarea [/ST hora_inicio ] [/M meses] [/SD fecha_inicio] [/ED fecha_fin].
Descripción: Habilita a un administrador para que cree tareas programadas en un sistema local o remoto.
Lista de parámetros: /S system Especifica el sistema remoto al que conectarse. Si se omite el parámetro del sistema, el predeterminado es el sistema local.
/U username Especifica el contexto de usuario en el que el comando debe ejecutarse.
/P contraseña Especifica la contraseña para el contexto de usuario dado.
/RU usuario Especifica la cuenta de usuario (contexto de usuario) en la que se ejecuta la tarea. Para la cuenta del sistema, son valores válidos "", "NT AUTHORITY\SYSTEM" o "SYSTEM".
/RP contraseña Especifica la contraseña para el usuario. Para solicitar la contraseña, el valor debe ser "*" o ninguno. La contraseña no tendrá efecto en la Cuenta del sistema.
/SC programación Especifica la frecuencia del programa. Tipos de programas válidos: MINUTE, HOURLY, DAILY, WEEKLY, MONTHLY, ONCE, ONSTART, ONLOGON, ONIDLE.
/MO modificador Afina el tipo de programación para permitir un control más preciso de la programación. Los valores válidos se listan en la sección "Modificadores", más abajo.
/D días Especifica el día de la semana en el que se ejecuta la tarea. Valores válidos: MON, TUE, WED, THU, FRI, SAT, SUN y para programaciones mensuales 1 - 31 (días del mes).
/M meses Especifica los meses del año. El valor predeterminado es siempre el primer día del mes. Valores válidos: JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC.
/I inactividad Especifica la cantidad de tiempo inactivo que debe pasar antes de ejecutar una tarea ONIDLE programada. Intervalo válido: 1 - 999 minutos.
/TN tarea Especifica un nombre que identifica de manera exclusiva a esta tarea programada.
/TR ejecución Especifica la ruta y nombre de archivo del programa que ejecutará esta tarea programada. Ejemplo: C:\windows\system32\calc.exe
/ST hora_inicio Especifica la hora para ejecutar la tarea. el formato de hora es HH:MM:SS (24 horas) por ejemplo, 14:30:00 es el equivalente de 2:30 PM.
/SD fecha_inicio Especifica la fecha de la primera ejecución de la tarea. El formato es "dd/mm/yyyy".
/ED fecha_fin Especifica la fecha final para la ejecución de la tarea. El formato es "dd/mm/yyyy".
/? Muestra esta ayuda/uso.
Modificadores: valores válidos para el modificador /MO por tipo de programación:
MINUTE: 1 - 1439 minutos. HOURLY: 1 - 23 horas. DAILY: 1 - 365 días. WEEKLY: semanas 1 - 52. ONCE: sin modificadores. ONSTART: sin modificadores. ONLOGON: sin modificadores. ONIDLE: sin modificadores. MONTHLY: 1 - 12, o FIRST, SECOND, THIRD, FOURTH, LAST, LASTDAY.
Ejemplos: SCHTASKS /Create /S sistema /U usuario /P contraseña /RU como_usuario /RP contraseña_como_usuario /SC HOURLY /TN prueba1 /TR notepad SCHTASKS /Create /S sistema /U dominio\usuario /P contraseña /SC MINUTE /MO 5 /TN rtest2 /TR calc.exe /ST 12:00:00 /SD 15/09/2001 /ED 15/09/2001 /RU como_usuario /RP SCHTASKS /Create /SC MONTHLY /MO first /D SUN /TN game /TR c:\windows\system32\freecell SCHTASKS /Create /S sistema /U usuario /P contraseña /RU como_usuario /RP contraseña_como_usuario /SC WEEKLY /TN prueba1 /TR notepad.exe SCHTASKS /Create /S sistema /U dominio\usuario /P contraseña /SC MINUTE /MO 5 /TN test2 /TR c:\windows\system32\notepad.exe /ST 18:30:00 /RU como_usuario /RP * SCHTASKS /Create /SC MONTHLY /MO first /D SUN /TN celda /TR c:\windows\system32\freecell /RU runasuser
Y como veis tu puedes elegir el usuario...asi k aunke no tengas privilegios puedes establecer una tarea programada para tu usuario (siempre y cuando tenga contraseña) y la pongas...si la cuenta no tiene contraseña no podrás hacerlo...AT sin privilegios Admin no te sirve para nada... Pero weno como supongo que será para ejecutar en otro ordenador lo mejor es usar el usuario SYSTEM...no tendrás que poner ninguna contraseña y tu aplicacion no se verá cuando se ejecute pero tendrás que tener privilegios Admin... y como seria la sintaxys si yo quisiera que con el schtasks.exe se ejecutase X commando cada X tiempo pero solo 1 vez, me explico?
Te estas contradiciendo si quieres "ejecutar algo cada X tiempo" tiene que ser un numero superior de una vez...pork si solo es una vez ya sería "ejecutar algo dentro de X tiempo"...explicate mejor...di mas concretamente que quieres hacer y te pogno como sería... Saludos
|
|
|
|
|
|
|