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 :)
docking??
Incrustar un programa en un picturebox o Form (http://www.recursosvisualbasic.com.ar/htm/listado-api/152-incrustar-programa-en-picturebox.htm)
saludos.
puedo utilizar los numeros de las calculadoras y hacer operaciones?
incrusta cualquier programa externo dentro de tu aplicacion....
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
Cita de: abel_c_b en 1 Junio 2008, 04:07 AM
puedo utilizar los numeros de las calculadoras y hacer operaciones?
uhm.. Si
Cita de: 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
¿Como que no funciona? eso esta hermoso!!! funciona de maravilla! ;)
si funciona :P :P :P
le hacen alguna modificacion? porque yo lo dejo tal cual y no me funciona
Cita de: abel_c_b en 1 Junio 2008, 23:49 PM
le hacen alguna modificacion? porque yo lo dejo tal cual y no me funciona
A ti no te funciona nada xDDDDDDDDD
Cita de: naderST en 2 Junio 2008, 02:32 AM
Cita de: abel_c_b en 1 Junio 2008, 23:49 PM
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.
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 :¬¬ :¬¬ :¬¬
Cita de: abel_c_b en 2 Junio 2008, 02:47 AM
Entonces, se dan cuenta que los ejemplos que colocan tienen alguna pequeña diferencia, por esa razon no me funcionan.
Parámetros amigo!!
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.
Cita de: 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. (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
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...
Cita de: 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...
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
Aca te dejo un ejemplo de como hacerlo
Necesitas un boton y un timer (intervalo = 500)
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
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.
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
Cita de: 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.
Por si acaso no quieres que ademas te agamos la aplicación , leete un manual de api's y uno de vb.,
como siempre alguien hablando demas y no colaborando.
Si estoy colaborando ,t e estoy diciendo que no seas un flojo lammer y estudies a ver si hasi logras hacer tu el programa.
y tu crees que no lo he hecho? nisiquiera te imaginas cuanto tiempo llevo trabajando en esto.
Cita de: 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.
Estudia mas tiempo no mas si no eres tonto vas a aprender =.
Si te concideras que sabes mucho, demuestralo, deja de hablar tanto
Cita de: abel_c_bquiero 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_bactue 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_bpero 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.
Cita de: abel_c_b en 2 Junio 2008, 18:03 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:
Private Sub mensaje(titulo As String, msg As String)
MsgBox msg, , titulo
End Sub
Private Sub Form_Load()
mensaje "ola", "hola mundo"
End Sub
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.
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
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:
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.
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
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.....
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