Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: abel_c_b en 1 Junio 2008, 03:36 am



Título: ejecutar una aplicacion dentro de otra
Publicado por: abel_c_b en 1 Junio 2008, 03:36 am
hola, no se como resolver esto: estoy trabajando en un proyecto, con el 50% ya terminado, pero ahora me acabo de dar cuenta que necesito que dentro de mi proyecto se ejecute una aplicacion la cual no fue creada por mi.

Esta aplicacion tiene 2 botones de comando, INICIAR Y PARAR, quiero que al momento de ejecutar mi proyecto, actue inmediatamente sobre la aplicacion que le inclui en el boton INICIAR, y al acabar la ejecucion del proyecto, actue sobre el boton PARAR y se termine la ejecucion del proyecto.

No tengo el codigo fuente de la aplicacion que estara contenida por esa razon no lo puedo colocar dentro de mi proyecto.

Espero me haya explicado bien, gracias de ante mano  :)


Título: Re: ejecutar una aplicacion dentro de otra
Publicado por: seba123neo en 1 Junio 2008, 03:40 am
docking??

Incrustar un programa en un picturebox o Form (http://www.recursosvisualbasic.com.ar/htm/listado-api/152-incrustar-programa-en-picturebox.htm)

saludos.


Título: Re: ejecutar una aplicacion dentro de otra
Publicado por: abel_c_b en 1 Junio 2008, 04:07 am
puedo utilizar los numeros de las calculadoras y hacer operaciones?


Título: Re: ejecutar una aplicacion dentro de otra
Publicado por: seba123neo en 1 Junio 2008, 04:09 am
incrusta cualquier programa externo dentro de tu aplicacion....


Título: Re: ejecutar una aplicacion dentro de otra
Publicado por: abel_c_b en 1 Junio 2008, 21:58 pm
hola seba123neo, el ejemplo que colocaste no funciona, he tratado de hacerlo funcionar pero la verdad, nunca aparece dentro del picturebox, otra cosa, al estar dentro del picture box puedo utilizar sus funciones? saludos


Título: Re: ejecutar una aplicacion dentro de otra
Publicado por: cassiani en 1 Junio 2008, 22:08 pm
puedo utilizar los numeros de las calculadoras y hacer operaciones?

uhm.. Si

hola seba123neo, el ejemplo que colocaste no funciona, he tratado de hacerlo funcionar pero la verdad, nunca aparece dentro del picturebox, otra cosa, al estar dentro del picture box puedo utilizar sus funciones? saludos

¿Como que no funciona? eso esta hermoso!!! funciona de maravilla!  ;)


Título: Re: ejecutar una aplicacion dentro de otra
Publicado por: seba123neo en 1 Junio 2008, 22:23 pm
si funciona  :P :P :P


Título: Re: ejecutar una aplicacion dentro de otra
Publicado por: abel_c_b en 1 Junio 2008, 23:49 pm
le hacen alguna modificacion? porque yo lo dejo tal cual y no me funciona


Título: Re: ejecutar una aplicacion dentro de otra
Publicado por: naderST en 2 Junio 2008, 02:32 am
le hacen alguna modificacion? porque yo lo dejo tal cual y no me funciona

A ti no te funciona nada xDDDDDDDDD


Título: Re: ejecutar una aplicacion dentro de otra
Publicado por: abel_c_b en 2 Junio 2008, 02:47 am
le hacen alguna modificacion? porque yo lo dejo tal cual y no me funciona

A ti no te funciona nada xDDDDDDDDD

No es que no me funcione nada, si no que las cosas no la escriben como son, en el ejemplo "Incrustar un programa en un picturebox o Form" en donde llaman a la funcion
"Call Incrustar_calculadora("calc.exe", Picture1, "Calculadora", Me)" donde dice "Calculadora" no va esa palabra, va "Calculator Plus".

Entonces, se dan cuenta que los ejemplos que colocan tienen alguna pequeña diferencia, por esa razon no me funcionan.



Título: Re: ejecutar una aplicacion dentro de otra
Publicado por: seba123neo en 2 Junio 2008, 02:54 am
el codigo funciona perfecto asi como esta  :xD,no hay que cambiar nada ::),el ejemplo usa la calculadora de windwos para incrustar,si vos queres incrustar un programa que no sea la calculadora de windwos vas a tener que escribir su titulo exacto..pero me inmagine que eso ya se sabia  :¬¬ :¬¬ :¬¬


Título: Re: ejecutar una aplicacion dentro de otra
Publicado por: cassiani en 2 Junio 2008, 03:01 am
Entonces, se dan cuenta que los ejemplos que colocan tienen alguna pequeña diferencia, por esa razon no me funcionan.

Parámetros amigo!!


Título: Re: ejecutar una aplicacion dentro de otra
Publicado por: krackwar en 2 Junio 2008, 03:08 am
Rebisa que peges en un modulo lo que va en un modulo y en un form lo que va en un form recuarda pon 1picturebox y dos commanbutton.


Título: Re: ejecutar una aplicacion dentro de otra
Publicado por: abel_c_b en 2 Junio 2008, 06:07 am
hola, no se como resolver esto: estoy trabajando en un proyecto, con el 50% ya terminado, pero ahora me acabo de dar cuenta que necesito que dentro de mi proyecto se ejecute una aplicacion la cual no fue creada por mi.

Esta aplicacion tiene 2 botones de comando, INICIAR Y PARAR, quiero que al momento de ejecutar mi proyecto, actue inmediatamente sobre la aplicacion que le inclui en el boton INICIAR, y al acabar la ejecucion del proyecto, actue sobre el boton PARAR y se termine la ejecucion del proyecto. (sin que se tenga que presionar ningun boton)

No tengo el codigo fuente de la aplicacion que estara contenida por esa razon no lo puedo colocar dentro de mi proyecto.


este fue el mensaje original leanlo y me comentan


Título: Re: ejecutar una aplicacion dentro de otra
Publicado por: invisible_hack en 2 Junio 2008, 10:38 am
Joer tio ya sabemos cual fue tu mensaje, no estamos ciegos  :¬¬

Además ya te han dado todo el código para hacer lo que tu quieres....

Saludos...


Título: Re: ejecutar una aplicacion dentro de otra
Publicado por: abel_c_b en 2 Junio 2008, 15:11 pm
Joer tio ya sabemos cual fue tu mensaje, no estamos ciegos  :¬¬

Además ya te han dado todo el código para hacer lo que tu quieres....

Saludos...

por lo que veo no lees bien, no se ha resuelto "Esta aplicacion tiene 2 botones de comando, INICIAR Y PARAR, quiero que al momento de ejecutar mi proyecto, actue inmediatamente sobre la aplicacion que le inclui en el boton INICIAR, y al acabar la ejecucion del proyecto, actue sobre el boton PARAR y se termine la ejecucion del proyecto. (sin que se tenga que presionar ningun boton)" pero si tu tienes alguna forma de explicarlo, te lo estariamos agradecidos


Título: Re: ejecutar una aplicacion dentro de otra
Publicado por: cobein en 2 Junio 2008, 15:25 pm
Aca te dejo un ejemplo de como hacerlo

Necesitas un boton y un timer (intervalo = 500)
Código:
Option Explicit

Private Const WM_LBUTTONDOWN As Long = &H201
Private Const WM_LBUTTONUP As Long = &H202

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Integer, ByVal lParam As Any) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long

Private Sub Command1_Click()
    Call Beep
End Sub

Private Function FindCommand(ByVal lHost As Long) As Long
    FindCommand = FindWindowEx(lHost, 0, "ThunderCommandButton", vbNullString)
End Function

Private Sub PulseButton(ByVal hWnd As Long)
    Call SendMessage(hWnd, WM_LBUTTONDOWN, 0, 0&)
    Call SendMessage(hWnd, WM_LBUTTONUP, 0, 0&)
End Sub

Private Sub Timer1_Timer()
    PulseButton FindCommand(Me.hWnd)
End Sub



Título: Re: ejecutar una aplicacion dentro de otra
Publicado por: abel_c_b en 2 Junio 2008, 15:41 pm
gracias por contestar cobein, pero pasa lo siguiente, la tecla que quiero simular su pulsación es la de la aplicacion que se incrusta, osea, el boton creado en tiempo de ejecucion y que tiene por nombre "Iniciar" y esto es lo que me esta matando, no lo he podido hacer.


Título: Re: ejecutar una aplicacion dentro de otra
Publicado por: cobein en 2 Junio 2008, 15:54 pm
Ya lo se pr eso deje las funciones por separado, para que le pases los parametros que necesites, en FindCommand le pasas el hWnd de la ventana del programa que ejecutas, y posiblemente tengas que modificar la funcion para adaptarla al command que buscas


Título: Re: ejecutar una aplicacion dentro de otra
Publicado por: krackwar en 2 Junio 2008, 16:00 pm
gracias por contestar cobein, pero pasa lo siguiente, la tecla que quiero simular su pulsación es la de la aplicacion que se incrusta, osea, el boton creado en tiempo de ejecucion y que tiene por nombre "Iniciar" y esto es lo que me esta matando, no lo he podido hacer.
Por si acaso no quieres que ademas te agamos la aplicación , leete un manual de api's y uno de vb.,


Título: Re: ejecutar una aplicacion dentro de otra
Publicado por: abel_c_b en 2 Junio 2008, 16:02 pm
como siempre alguien hablando demas y no colaborando.


Título: Re: ejecutar una aplicacion dentro de otra
Publicado por: krackwar en 2 Junio 2008, 16:06 pm
Si estoy colaborando ,t e estoy diciendo que no seas un flojo lammer y estudies a ver si hasi logras hacer tu el programa.


Título: Re: ejecutar una aplicacion dentro de otra
Publicado por: abel_c_b en 2 Junio 2008, 16:13 pm
y tu crees que no lo he hecho? nisiquiera te imaginas cuanto tiempo llevo trabajando en esto.


Título: Re: ejecutar una aplicacion dentro de otra
Publicado por: krackwar en 2 Junio 2008, 16:15 pm
y tu crees que no lo he hecho? nisiquiera te imaginas cuanto tiempo llevo trabajando en esto.
Estudia mas tiempo no mas si no eres tonto vas a aprender =.


Título: Re: ejecutar una aplicacion dentro de otra
Publicado por: abel_c_b en 2 Junio 2008, 18:03 pm
Si te concideras que sabes mucho, demuestralo, deja de hablar tanto


Título: Re: ejecutar una aplicacion dentro de otra
Publicado por: seba123neo en 2 Junio 2008, 18:34 pm
Cita de: abel_c_b
quiero que al momento de ejecutar mi proyecto, actue inmediatamente sobre la aplicacion que le inclui en el boton INICIAR

pone el codigo del boton en el Form_Load,asi de simple.........

Cita de: abel_c_b
actue sobre el boton PARAR y se termine la ejecucion del
proyecto

pone el codigo del segundo boton en el Form_Unload,asi de simple....

como ves los codigos no es que NO ANDAN ,vos los tenes que adaptar a lo que queres hacer,y eso que fue un copy y paste del codigo,no me inmagino si es crearlo vos al codigo...

Cita de: abel_c_b
pero pasa lo siguiente, la tecla que quiero simular su pulsación es la de la aplicacion que se incrusta

otra vez en lo mismo...el codigo que te puso Cobein es para eso,clickear un boton segun su nombre de clase..averigua el nombre de clase del boton que queres clickear y listo...

saludos.


Título: Re: ejecutar una aplicacion dentro de otra
Publicado por: krackwar en 2 Junio 2008, 18:39 pm
Si te concideras que sabes mucho, demuestralo, deja de hablar tanto
jajaja , Yo no le tengo que demostrar a nada a nadie yo se muy bien lo que se y lo que no se.
edit:jajaj , empiesa aprendiendo que es esto:

Código
  1. Private Sub mensaje(titulo As String, msg As String)
  2. MsgBox msg, , titulo
  3. End Sub
  4.  
  5. Private Sub Form_Load()
  6. mensaje "ola", "hola mundo"
  7. End Sub
  8.  


Título: Re: ejecutar una aplicacion dentro de otra
Publicado por: abel_c_b en 2 Junio 2008, 18:50 pm
si busco ayuda es porque obviamente estoy confundido y no hallo la respuesta, pero si tu sabes como resolver el problema, postealo, a la final esa es la idea del foro, ayudarnos a resolver los problemas que se nos presentan.


Título: Re: ejecutar una aplicacion dentro de otra
Publicado por: abel_c_b en 2 Junio 2008, 19:08 pm
bueno posteo parte del code para ver en que me pueden ayudar:

Private Sub Timer1_Timer()

PosX = 70
PosY = 236
l = SetCursorPos(PosX, PosY)
lpRect.Left = 26
lpRect.Top = 216
PosXY = (PosY - lpRect.Top) + (PosX - lpRect.Left)



 l = PostMessageBynum(El_Hwnd_Programa, WM_LBUTTONDOWN, 0&, PosXY)
 l = PostMessageBynum(El_Hwnd_Programa, WM_LBUTTONUP, 0&, PosXY)

End Sub


lo que ven en la parte de arriba es la forma de colocar el puntero del mouse sobre el boton Iniciar para luego con la funcion "PostMessageBynum" simular el click y ejecute las funciones del boton, tambien utilice "Call SendMessage" en vez de "PostMessageBynum" pero en los 2 casos se ubica sobre el moton pero no simula el click, agradezco toda la ayuda posible, saludos


Título: Re: ejecutar una aplicacion dentro de otra
Publicado por: seba123neo en 2 Junio 2008, 20:02 pm
haber ,haber...proba este codigo que medio lo arme.use 2 codigos distintos uno para centrar el mouse en un objeto y el otro para hacer click,lo uni en uno solo para que centre y haga click,probalo en un proyecto nuevo para que entiendas como funciona,pone un boton y un timer y este codigo:

Código:
Option Explicit
Private Declare Function GetWindowRect& Lib "user32" (ByVal hwnd As Long, lRect As RECT)
Private Declare Function SetCursorPos Lib "user32" (ByVal X As Long, ByVal Y As Long) As Long
Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
Private Const MOUSEEVENTF_LEFTDOWN = &H2
Private Const MOUSEEVENTF_LEFTUP = &H4
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
 
Public Sub CentrarYHacerClick(ByVal Objeto As Object)
Dim r As RECT, ret As Long
ret = GetWindowRect(Objeto.hwnd, r)
SetCursorPos r.Right - ((r.Right - r.Left) / 2), r.Bottom - ((r.Bottom - r.Top) / 2)
Call mouse_event(MOUSEEVENTF_LEFTDOWN, r.Right - ((r.Right - r.Left) / 2), r.Bottom - ((r.Bottom - r.Top) / 2), 0, 0)
Call mouse_event(MOUSEEVENTF_LEFTUP, r.Right - ((r.Right - r.Left) / 2), r.Bottom - ((r.Bottom - r.Top) / 2), 0, 0)
End Sub

Private Sub Command1_Click()
Call Beep
Timer1.Enabled = False
End Sub

Private Sub Timer1_Timer()
Call CentrarYHacerClick(Command1)
End Sub

Private Sub Form_Load()
Timer1.Enabled = True
Timer1.Interval = 2000
End Sub

eso es para hacer click en un boton de tu aplicacion ,pero para hacer click en uno de aplciacion externa tenes que saber su nombre de clase y caption...para eso esta el que puso cobein...

saludos.



Título: Re: ejecutar una aplicacion dentro de otra
Publicado por: abel_c_b en 2 Junio 2008, 20:11 pm
No tengo ningun problema con este codigo, se ejecuta perfecto, pero la cuestion esta es cuando la aplicacin es externa, como podria averiguar la clase y el caption de una plaicacion externa? saludos


Título: Re: ejecutar una aplicacion dentro de otra
Publicado por: seba123neo en 2 Junio 2008, 20:20 pm
ahora preguntas eso,ya hace muchos post atras lo tendrias que haber preguntado,pero bueno mira hay muchisimas formas de saber el nombre de clase,pero la mas facil es con la aplicacion que viene con visual basic llamada Spy++...supongamos que yo quiero escribir automaticamente en el Bloc de Notas de windows sabiendo el nombre de clase del control que te permite escribir adentro,aca te hago una captura de como saque el nombre de la ventana para escribir con el Spy++:

este es el nombre de clase de la ventana padre llamada "Notepad":

(http://img528.imageshack.us/img528/4203/dibujo2eh5.png)

este es el nombre del control dentro de la ventana donde se escribe llamado "Edit":

(http://img237.imageshack.us/img237/2262/dibujouz2.png)

para saber los datos de la ventana tenes que arrastrar el "iconito" sobre una ventana y te va diciendo las partes que la forman,en este caso fijate que esta seleccionado el area de escritura del bloc de notas y al lado en la ventana estan los datos...

el handle es el numero(Long) que le asigna windows a cada ventana ,es como si fuera el nuero que identifica esa ventana,sabiendo eso,podes hacer un monton de cosas,cerrarla,moverla,resizarla,cambiar valores,etc....

el Class es el nombre de clase del control,o sea cada control tiene su nombre...ese es el que te tenes que fijar.....


Título: Re: ejecutar una aplicacion dentro de otra
Publicado por: abel_c_b en 2 Junio 2008, 22:51 pm
Despues de tanto tiempo LO CONSEGUI, jeje, fue muy complicado y sin su ayuda no lo habria conseguido, bueno posteo una parte del code para que se den cuenta:

Private Sub Timer1_Timer()
cont = cont + 1
Label1.Caption = cont
PosX = 70
PosY = 236
l = SetCursorPos(PosX, PosY)
lpRect.Left = 26
lpRect.Top = 216
PosXY = (PosY - lpRect.Top) + (PosX - lpRect.Left)

If cont = 5 Then
pulsar FindCommand(Me.hWnd)
End If

End Sub

Private Function FindCommand(ByVal lHost As Long) As Long
    FindCommand = FindWindowEx(lHost, Picture1.hWnd, "Button", "Iniciar")
End Function

Private Sub pulsar(ByVal hn As Long)

Call mouse_event(MOUSEEVENTF_LEFTDOWN, PosXY, PosXY, 0, 0)
Call mouse_event(MOUSEEVENTF_LEFTUP, PosXY, PosXY, 0, 0)
 
End Sub

No me funcionaron las Call SendMessage que cobein muy amablemente me paso pero con las llamadas del mouse_event todo se soluciono, definitivamente tuve que tirarme casi 11 Horas de leer y comprension porque recibi codigo con el cual nunca habia trabajado, pero bueno ya me enrole,  :laugh:,  me demore mucho para que funcionara pero vale la pena.

Gracias a todos por su tiempo, y ahi nos vemos.  ;D ;D ;D ;D