Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Mover Mouse Con PictureBox

Estas en el tema de Mover Mouse Con PictureBox en el foro de Visual Basic clásico en Foros del Web. Hola! Bueno, tengo un codigo que me hace una captura de pantalla y la carga en el Picture1, lo que quiero hacer es que al ...
  #1 (permalink)  
Antiguo 21/12/2009, 12:22
 
Fecha de Ingreso: enero-2009
Mensajes: 100
Antigüedad: 15 años, 4 meses
Puntos: 1
Pregunta Mover Mouse Con PictureBox

Hola!
Bueno, tengo un codigo que me hace una captura de pantalla y la carga en el Picture1, lo que quiero hacer es que al hace click en el Picture1, me haga un click en la pantalla real correspondiente a la imagen cargada
Como ago eso??
Unas de las apis que conosco son:
SetCursorPos, GetCursorPos, pero no se como tomar las coordenadas del picture1 y convertirlas deauerdo a la resolucion de pantalla
Gracias!
  #2 (permalink)  
Antiguo 21/12/2009, 19:39
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 17 años, 9 meses
Puntos: 29
Respuesta: Mover Mouse Con PictureBox

Creo que lo que pides se saca así:

Código vb:
Ver original
  1. Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
  2.   Dim PosRealX As Single
  3.   Dim PosRealY As Single
  4.   Dim Difer As Double
  5.  
  6.   Difer = Screen.Width / Picture1.ScaleWidth
  7.   PosRealX = X * Difer
  8.  
  9.   Difer = Screen.Height / Picture1.ScaleHeight
  10.   PosRealY = Y * Difer
  11.  
  12. End Sub
Aunque si quieres usar las coordenadas con GetCursorPos creo tienes que dividir el resultado por TwipsPerPixel:

Código vb:
Ver original
  1. Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
  2.   Dim PosRealX As Single
  3.   Dim PosRealY As Single
  4.   Dim Difer As Double
  5.  
  6.   Difer = Screen.Width / Picture1.ScaleWidth
  7.   PosRealX = X * Difer / Screen.TwipsPerPixelX
  8.  
  9.   Difer = Screen.Height / Picture1.ScaleHeight
  10.   PosRealY = Y * Difer / Screen.TwipsPerPixelY
  11.  
  12. End Sub
Por cierto, solo sirve con PictureBox. Si usas Images te encontrarás con que no tienen propiedad ScaleHeight y ScaleWidth y no he encontrado equivalente, así que he tenido que aprender primero como escalar una imagen en un picturebox

El problema está en pinchar donde quieres sin mover el ratón.
Yo no he conseguido nada más que pinchar con el botón derecho y desplegar el menú, solo que el menú me aparece debajo del ratón, en lugar de en la ventana donde he pinchado.

Espero que tengas mas suerte. Si lo consigues cuentanos como lo has hecho.

Saludos
__________________
No hay preguntas tontas, solo gente estup..., ¡No!, ¿como era? No hay gente que pregunte a tontos... ¡Nooo!... ¡Vaya cabeza!
  #3 (permalink)  
Antiguo 21/12/2009, 23:28
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 17 años, 9 meses
Puntos: 29
Respuesta: Mover Mouse Con PictureBox

El caso es que a poco de empezar se me metió en la cabeza poder manejar la ventana desde el picturebox, me he liado un montón y cuando he acordado había perdido el hilo de tu tema.

En realidad, si solo quieres pinchar en la zona deseada desde el picturebox si que lo he conseguido con SetCursorPos y mouse_event, aunque habría que depurarlo un poco.
Seguramente tú no tengas problemas con eso.

Saludos
__________________
No hay preguntas tontas, solo gente estup..., ¡No!, ¿como era? No hay gente que pregunte a tontos... ¡Nooo!... ¡Vaya cabeza!
  #4 (permalink)  
Antiguo 23/12/2009, 12:53
 
Fecha de Ingreso: enero-2009
Mensajes: 100
Antigüedad: 15 años, 4 meses
Puntos: 1
Respuesta: Mover Mouse Con PictureBox

Cita:
Iniciado por pkj Ver Mensaje
Creo que lo que pides se saca así:

Código vb:
Ver original
  1. Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
  2.   Dim PosRealX As Single
  3.   Dim PosRealY As Single
  4.   Dim Difer As Double
  5.  
  6.   Difer = Screen.Width / Picture1.ScaleWidth
  7.   PosRealX = X * Difer
  8.  
  9.   Difer = Screen.Height / Picture1.ScaleHeight
  10.   PosRealY = Y * Difer
  11.  
  12. End Sub
Aunque si quieres usar las coordenadas con GetCursorPos creo tienes que dividir el resultado por TwipsPerPixel:

Código vb:
Ver original
  1. Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
  2.   Dim PosRealX As Single
  3.   Dim PosRealY As Single
  4.   Dim Difer As Double
  5.  
  6.   Difer = Screen.Width / Picture1.ScaleWidth
  7.   PosRealX = X * Difer / Screen.TwipsPerPixelX
  8.  
  9.   Difer = Screen.Height / Picture1.ScaleHeight
  10.   PosRealY = Y * Difer / Screen.TwipsPerPixelY
  11.  
  12. End Sub
Por cierto, solo sirve con PictureBox. Si usas Images te encontrarás con que no tienen propiedad ScaleHeight y ScaleWidth y no he encontrado equivalente, así que he tenido que aprender primero como escalar una imagen en un picturebox

El problema está en pinchar donde quieres sin mover el ratón.
Yo no he conseguido nada más que pinchar con el botón derecho y desplegar el menú, solo que el menú me aparece debajo del ratón, en lugar de en la ventana donde he pinchado.

Espero que tengas mas suerte. Si lo consigues cuentanos como lo has hecho.

Saludos
Listo! tengo el Sig code:

Código:
Private Declare Function SetCursorPos Lib "user32.dll" _
(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)
    
 Const MOUSEEVENTF_ABSOLUTE = &H8000 '  movimiento absoluto
 Const MOUSEEVENTF_LEFTDOWN = &H2 '  botón izquierdo presionado
 Const MOUSEEVENTF_LEFTUP = &H4 '  botón izquierdo soltado
 Const MOUSEEVENTF_MIDDLEDOWN = &H20 '  botón central presionado
 Const MOUSEEVENTF_MIDDLEUP = &H40 ' botón central soltado
 Const MOUSEEVENTF_MOVE = &H1 '  movimiento del mouse
 Const MOUSEEVENTF_RIGHTDOWN = &H8 '  botón derecho presionado
 Const MOUSEEVENTF_RIGHTUP = &H10 '  botón derecho soltado


Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
Dim PosRealX As Single
Dim PosRealY As Single
Dim Difer As Double
 
Difer = Screen.Width / Picture1.ScaleWidth
PosRealX = x * Difer / Screen.TwipsPerPixelX
 
Difer = Screen.Height / Picture1.ScaleHeight
PosRealY = y * Difer / Screen.TwipsPerPixelY
  
Call SetCursorPos(PosRealX, PosRealY)

If Button = 1 Then
    Call mouse_event(MOUSEEVENTF_LEFTDOWN, 0&, 0&, 0&, 0&)
    Call mouse_event(MOUSEEVENTF_LEFTUP, 0&, 0&, 0&, 0&)
ElseIf Button = 2 Then
    Call mouse_event(MOUSEEVENTF_RIGHTDOWN, 0&, 0&, 0&, 0&)
    Call mouse_event(MOUSEEVENTF_RIGHTUP, 0&, 0&, 0&, 0&)
End If

End Sub
Ahora supongamos que he pasado las coordenadas a un pc remoto, como comviertolas coordenadas??
  #5 (permalink)  
Antiguo 24/12/2009, 14:53
Avatar de seba123neo  
Fecha de Ingreso: febrero-2007
Ubicación: Esperanza, Santa Fe
Mensajes: 1.046
Antigüedad: 17 años, 2 meses
Puntos: 19
Respuesta: Mover Mouse Con PictureBox

¿como convertirlas? lo unico que debes hacer es pasarle al servidor las cordenadas X,Y y despues en el servidor pasarle esas coordenadas a la api SetCursorPos y despues a mouse_event para que haga click.

saludos.
__________________
" Todos Somos Ignorantes; lo que pasa es que no todos ignoramos las mismas cosas " - Albert Einstein
  #6 (permalink)  
Antiguo 24/12/2009, 15:08
 
Fecha de Ingreso: enero-2009
Mensajes: 100
Antigüedad: 15 años, 4 meses
Puntos: 1
Respuesta: Mover Mouse Con PictureBox

Cita:
Iniciado por seba123neo Ver Mensaje
¿como convertirlas? lo unico que debes hacer es pasarle al servidor las cordenadas X,Y y despues en el servidor pasarle esas coordenadas a la api SetCursorPos y despues a mouse_event para que haga click.

saludos.
Si, supongo que mis coordenadas no son utiles en otro pc con distinta resolucion.

Si no es haci porfavor corrigeme
  #7 (permalink)  
Antiguo 24/12/2009, 15:59
Avatar de seba123neo  
Fecha de Ingreso: febrero-2007
Ubicación: Esperanza, Santa Fe
Mensajes: 1.046
Antigüedad: 17 años, 2 meses
Puntos: 19
Respuesta: Mover Mouse Con PictureBox

el tema aca es que la "captura" deberia ser de la pc remota, no de la tuya.
__________________
" Todos Somos Ignorantes; lo que pasa es que no todos ignoramos las mismas cosas " - Albert Einstein
  #8 (permalink)  
Antiguo 28/12/2009, 10:07
 
Fecha de Ingreso: enero-2009
Mensajes: 100
Antigüedad: 15 años, 4 meses
Puntos: 1
Respuesta: Mover Mouse Con PictureBox

Cita:
Iniciado por seba123neo Ver Mensaje
el tema aca es que la "captura" deberia ser de la pc remota, no de la tuya.
Claro, pero esa captura se envia a un pixtureBox en el PC mio, al hacer yo click en mi picture envio las coordenadas al pc remoto, como combierto las coordenadas??
  #9 (permalink)  
Antiguo 28/12/2009, 16:14
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 17 años, 9 meses
Puntos: 29
Respuesta: Mover Mouse Con PictureBox

En ese caso lo que tienes que hacer es, en el evento mousedown, mandar el valor de X, Y y Button al pc remoto, puede que incluso picture1.scalewidth y scaleheight porque es este picture el que pinchas. El caso es que es en el PC remoto donde tienes que hacer la conversión con screen.height y screen.width que serán los que marquen la resolución del pc remoto.
Espero que se entienda.

Suerte
__________________
No hay preguntas tontas, solo gente estup..., ¡No!, ¿como era? No hay gente que pregunte a tontos... ¡Nooo!... ¡Vaya cabeza!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:37.