Gracias enco por tu respuesta
gracias enco por tu respuesta pero no me funciono la de la funcion shell
por que no me lo mandas especifica mente como lo harias tu si abrieras un archivo con los siguientes datos
el archivo esta en la maquina 5
se llama programa1
recuedo: quiero que se ejecute en maquina5 no en la mia
por que no me lo mandas especifica mente como lo harias tu si abrieras un archivo con los siguientes datos
el archivo esta en la maquina 5
se llama programa1
recuedo: quiero que se ejecute en maquina5 no en la mia
Yo lo había entendido al revés, ejecutar en tu máquina una aplicación que está en otra.
Alguna vez he necesitado hacer lo que pides, y no me compliqué... creé una aplicación externa 'EXE estandar':
Añades un control WinSock, se usará para dejar la aplicación escuchándo en un puerto para que la aplicación que usarás tu para ejecutarlo reciba la ruta del programa que quieres ejecutar en esa máquina.
Si añades un control Winsock1 al formulario del que será servidor le pones:
Private Sub Form_Load()
With Winsock1
.Close
.LocalPort=9100
.RemotePort=0
.Listen
End With
End Sub
Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
Winsock1.Close
Winsock1.Accept requestID
End Sub
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim pRuta As String
Dim IdTarea
Winsock1.GetData pRuta, vbString
IdTarea = Shell(pRuta, vbNormalFocus)
End Sub
Private Sub Winsock1_Close()
Winsock1.Close
Call Form_Load
End Sub
Además, para que no se muestre ninguna interfaz, le pones las propiedades del formulario:
Visible = False
ShowInTaskbar = False
Con esto tienes una aplicación que cuando se ejecuta se pone a la espera de recibir una petición de conexión por el puerto especificado.
Y cuando esté conectado, el parámetro que reciba deberá ser la ruta del programa que se quiere ejecutar, y esa ruta es la que le mandarás desde la aplicación cliente que uses en tu máquina.
Entonces, en tu aplicación, la que será el cliente desde donde ordenarás a la otra máquina el programa que tiene que ejecutar, también añades un control WinSock, y lo codificas de esta forma:
Private Sub Form_Load()
With Winsock1
.Close
.LocalPort=0
.Connect "maquina5", 9100
End With
End Sub
y ahora puedes poner por ejemplo un CommandButton para decirle a la aplicación que esté corriendo en el otro ordenador, cual es la ruta del programa que tiene que ejecutar:
Private Sub Command1_Click()
Winsock1.SendData "c:Programasprograma1.exe"
End Sub
_______
Luego sólo te faltaría poner tu programa servidor en las máquinas que lo necesitarás, y añadirlo a la lista de tareas que deben ejecutarse al inicio de Windows, en la clave del registro:
HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun
Añades un Nuevo Valor Alfanumérico, con el nombre que quieras, y la información del valor le pones la ruta del programa servidor.
______
Otra forma sería poner el procedimiento para ejecutar los programas remotamente en una DLL AvtiveX y hacerle un enlace tardío a la clase de la DLL remotamente en el PC que le digas.
Si hace falta te paso la dirección de algún enlace en el que explican como hacerlo, porque esto ya es un pelín más complejo.
--
Un saludo.
Alguna vez he necesitado hacer lo que pides, y no me compliqué... creé una aplicación externa 'EXE estandar':
Añades un control WinSock, se usará para dejar la aplicación escuchándo en un puerto para que la aplicación que usarás tu para ejecutarlo reciba la ruta del programa que quieres ejecutar en esa máquina.
Si añades un control Winsock1 al formulario del que será servidor le pones:
Private Sub Form_Load()
With Winsock1
.Close
.LocalPort=9100
.RemotePort=0
.Listen
End With
End Sub
Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
Winsock1.Close
Winsock1.Accept requestID
End Sub
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim pRuta As String
Dim IdTarea
Winsock1.GetData pRuta, vbString
IdTarea = Shell(pRuta, vbNormalFocus)
End Sub
Private Sub Winsock1_Close()
Winsock1.Close
Call Form_Load
End Sub
Además, para que no se muestre ninguna interfaz, le pones las propiedades del formulario:
Visible = False
ShowInTaskbar = False
Con esto tienes una aplicación que cuando se ejecuta se pone a la espera de recibir una petición de conexión por el puerto especificado.
Y cuando esté conectado, el parámetro que reciba deberá ser la ruta del programa que se quiere ejecutar, y esa ruta es la que le mandarás desde la aplicación cliente que uses en tu máquina.
Entonces, en tu aplicación, la que será el cliente desde donde ordenarás a la otra máquina el programa que tiene que ejecutar, también añades un control WinSock, y lo codificas de esta forma:
Private Sub Form_Load()
With Winsock1
.Close
.LocalPort=0
.Connect "maquina5", 9100
End With
End Sub
y ahora puedes poner por ejemplo un CommandButton para decirle a la aplicación que esté corriendo en el otro ordenador, cual es la ruta del programa que tiene que ejecutar:
Private Sub Command1_Click()
Winsock1.SendData "c:Programasprograma1.exe"
End Sub
_______
Luego sólo te faltaría poner tu programa servidor en las máquinas que lo necesitarás, y añadirlo a la lista de tareas que deben ejecutarse al inicio de Windows, en la clave del registro:
HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun
Añades un Nuevo Valor Alfanumérico, con el nombre que quieras, y la información del valor le pones la ruta del programa servidor.
______
Otra forma sería poner el procedimiento para ejecutar los programas remotamente en una DLL AvtiveX y hacerle un enlace tardío a la clase de la DLL remotamente en el PC que le digas.
Si hace falta te paso la dirección de algún enlace en el que explican como hacerlo, porque esto ya es un pelín más complejo.
--
Un saludo.
