Invertir Ejes del Raton

Iniciado por Elemental Code, 19 Octubre 2010, 18:56 PM

0 Miembros y 2 Visitantes están viendo este tema.

Elemental Code

Hola.
Estoy tratando de hacer algo que invierta los ejes del raton.
osea que si voy a la derecha la flechita valla a la izquierda y etc.

Tengo el codigo Choreado Prestado del NRC de Psyke con hook al mouse pero ni idea como hacer

puedo tomar la poscicion actual del cursor y hacerlo saltar a una.

osea, los comandos los tengo, me falta cabeza de programador.

Gracias por la ayuda.

Codigo del hook al mouse
Código (vb) [Seleccionar]
Option Explicit

Private Declare Function SetWindowsHookEx Lib "user32.dll" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
Private Declare Function UnhookWindowsHookEx Lib "user32.dll" (ByVal hHook As Long) As Long

Dim hHook As Long

Public Sub StartHook()
    hHook = SetWindowsHookEx(14, AddressOf MouseProc, App.hInstance, 0)
End Sub

Public Sub StopHook()
    Call UnhookWindowsHookEx(hHook)
End Sub

Private Function MouseProc(ByVal nCode As Long, ByVal wParam As Long, lParam As Long) As Long
    'On Error Resume Next
    If wParam = 516 Then 'si sirve de algo el wParam cuando se mueve el mouse es 512
      Form1.Print "CLICK BOTON DERECHO"
    ElseIf wParam = 517 Then Form1.Print "SOLTÓ BOTON DERECHO"
    ElseIf wParam = 513 Then Form1.Print "CLICK BOTON IZQUIERDO"
    ElseIf wParam = 514 Then Form1.Print "SOLTÓ BOTON IZQUIERDO"
    ElseIf wParam = 519 Then Form1.Print "CLICK BOTON MEDIO"
    ElseIf wParam = 520 Then Form1.Print "SOLTÓ BOTON MEDIO"
    End If
   
    Form1.Caption = wParam
End Function


Este es el codigo de pruebas que tengo en el form.
Código (vb) [Seleccionar]
Option Explicit
Private Declare Function GetCursorPos Lib "user32.dll" (ByRef lpPoint As POINTAPI) As Long
Private Declare Function SetCursorPos Lib "User32" (ByVal X As Long, ByVal Y As Long) As Long

'\\Variables
Private Type POINTAPI
    X As Long
    Y As Long
End Type

Dim pt As POINTAPI
Dim Que As Variant
Dim cX As Integer, cY As Integer
Private Sub Command1_Click()
   GetCursorPos pt
   cX = pt.X: cY = pt.Y
   Command1.Caption = cX & ";" & cY
End Sub

Private Sub Form_Load()
  Me.AutoRedraw = True
  StartHook
End Sub
Private Sub Form_Unload(Cancel As Integer)
  StopHook
End Sub


Cuando apretas el boton Command1 cambia su caption a las coordenadas del cursor
Para hacer "saltar" el cursor es
Código (vb) [Seleccionar]
SetCursorPos [X,Y]

I CODE FOR $$$
Programo por $$$
Hago tareas, trabajos para la facultad, lo que sea en VB6.0

Mis programas

BlackZeroX

.
Si no me equivoco debes modificar la estructurea lParam (En este hook, en este parametro de ddevuelve una estructura), despues de hacer eso pasa el mensaje normalmente!¡.

Dulce Infierno Lunar!¡.
The Dark Shadow is my passion.

Elemental Code

El lParam tiene las coordenadas de X del cursor.

pero sigo sin entender
no se como hacer

Funsionaria si hago que cuando se mueva el mouse cursor valla a la diferencia entre el lPram actual y el antiguo menos el ancho total de la pantalla?

I CODE FOR $$$
Programo por $$$
Hago tareas, trabajos para la facultad, lo que sea en VB6.0

Mis programas

Psyke1

Mira esto :

Código (vb) [Seleccionar]

Option Explicit
Declare Function ClipCursor Lib "user32" (lpRect As Any) As Long
Private Declare Function SetWindowsHookEx Lib "user32.dll" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
Private Type POINTAPI
    x As Long
    y As Long
End Type
Private Type MOUSEHOOKSTRUCT
    pt As POINTAPI
    hwnd As Long
    wHitTestCode As Long
    dwExtraInfo As Long
End Type
Private Const WH_MOUSE As Long = 7
Private Const WM_MOUSEMOVE As Long = &H200
Private Declare Function CallNextHookEx Lib "user32.dll" (ByVal hHook As Long, ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Declare Function UnhookWindowsHookEx Lib "user32.dll" (ByVal hHook As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)
Private Declare Function SetCursorPos Lib "user32.dll" (ByVal x As Long, ByVal y As Long) As Long

Private m_MousePt As POINTAPI
Private m_HookProc As Long
Private m_Ignore As Boolean

Public Sub HookMouse()
    If m_HookProc = 0& Then
        m_Ignore = True
        m_HookProc = SetWindowsHookEx(WH_MOUSE, AddressOf MouseProc, App.hInstance, App.ThreadID)
    End If
End Sub
Public Sub UnhookMouse()
    If m_HookProc Then
        UnhookWindowsHookEx m_HookProc
        m_HookProc = 0&
    End If
End Sub

Private Function MouseProc(ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

    Dim mhs As MOUSEHOOKSTRUCT, tPt As POINTAPI
    If wParam = WM_MOUSEMOVE Then
        If nCode > -1& Then
            CopyMemory mhs, ByVal lParam, Len(mhs)
            If m_Ignore Then
                m_MousePt = mhs.pt
                m_Ignore = False
            Else
                tPt.x = mhs.pt.x - m_MousePt.x
                tPt.y = mhs.pt.y - m_MousePt.y
                If (tPt.x Or tPt.y) Then
                    tPt.x = m_MousePt.x - tPt.x
                    tPt.y = m_MousePt.y - tPt.y
                    m_Ignore = True
                    SetCursorPos tPt.x, tPt.y
                    MouseProc = 1&
                    Exit Function
                End If
            End If
        End If
    End If
    MouseProc = CallNextHookEx(m_HookProc, nCode, wParam, lParam)
End Function

Fuente

DoEvents! :P

BlackZeroX

...
,,,mmm Algo asi mas o menos desia yo xP...

Creo que anda un poco mal no lo probe, asi que alrato lo checo bien, aun asi lo dejo.

Código (Vb) [Seleccionar]


Private Function MouseProc(ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Dim mhs As MOUSEHOOKSTRUCT, tPt As POINTAPI
    If wParam = WM_MOUSEMOVE Then
        CopyMemory mhs, ByVal lParam, LenB(mhs)
        tPt.x = mhs.pt.x - m_MousePt.x
        tPt.y = mhs.pt.y - m_MousePt.y
        If (tPt.x Or tPt.y) Then
            tPt.x = m_MousePt.x - tPt.x
            tPt.y = m_MousePt.y - tPt.y
            m_Ignore = True
        End If
        lParam = VarPtr(mhs)
        mhs
    End If
    MouseProc = CallNextHookEx(m_HookProc, nCode, wParam, lParam)
End Function



Dulce Infienro Lunar!¡.
The Dark Shadow is my passion.

BlackZeroX

The Dark Shadow is my passion.