Ver Mensaje Individual
  #4 (permalink)  
Antiguo 23/12/2009, 12:53
Jhonjhon_123
 
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??