[Source] Invertir Ejes del Mouse.

Iniciado por BlackZeroX, 20 Octubre 2010, 09:35 AM

0 Miembros y 1 Visitante están viendo este tema.

BlackZeroX

.
Solo invierte los ejeus del mouse es decir si van para arrba iran para abajo y biceversab es lo mismo si van a la derecha se ira a la izquierda y biceversa.

OJO: Sustitui las Estructuras (PointAPI) por Arrays de Long para reducir mas el codigo xD

http://infrangelux.sytes.net/blog/index.php/component/content/article/5-hooks/2-srcinvertejesmouse.html
http://visual-coders.herobo.com/blog/?p=274

Código (Vb) [Seleccionar]

 
'
'   /////////////////////////////////////////////////////////////
'   // Autor:   BlackZeroX ( Ortega Avila Miguel Angel )       //
'   //                                                         //
'   // Web:     http://InfrAngeluX.Sytes.Net/                  //
'   //                                                         //
'   //    |-> Pueden Distribuir Este codigo siempre y cuando   //
'   // no se eliminen los creditos originales de este codigo   //
'   // No importando que sea modificado/editado o engrandecido //
'   // o achicado, si es en base a este codigo                 //
'   /////////////////////////////////////////////////////////////

Option Explicit

Public Const WH_MOUSE_LL = 14
Public Const WM_MOUSEMOVE = &H200

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByVal Destination As Any, ByVal Source As Any, ByVal Length 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 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 Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long
Private Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long

Private Ant_PosCur(0 To 1)              As Long
Private lng_HookProc                    As Long
Private Boo_Switch                      As Boolean

Public Sub InvertirMouse()
   If lng_HookProc = 0& Then
       Boo_Switch = False
       lng_HookProc = SetWindowsHookEx(WH_MOUSE_LL, AddressOf MouseProc, App.hInstance, 0)
   End If
End Sub

Public Sub DetenerInvertirMouse()
   If lng_HookProc Then
       Call UnhookWindowsHookEx(lng_HookProc)
       lng_HookProc = 0&
   End If
End Sub

Private Function MouseProc(ByVal idHook As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Dim Struc_PT(0 To 1)                    As Long
Dim lng_Index                           As Long

   If wParam = WM_MOUSEMOVE And Not Boo_Switch Then
   
       Boo_Switch = True
       
       Call CopyMemory(ByVal VarPtr(Struc_PT(0)), ByVal lParam, 8)
       
       For lng_Index = 0 To 1
           If Not Struc_PT(lng_Index) = Ant_PosCur(lng_Index) _
               And Ant_PosCur(lng_Index) > 0 _
               And Ant_PosCur(lng_Index) <= GetSystemMetrics(lng_Index) Then
               If Struc_PT(lng_Index) < Ant_PosCur(lng_Index) Then
                   Struc_PT(lng_Index) = Struc_PT(lng_Index) + ((Ant_PosCur(lng_Index) - Struc_PT(lng_Index)) * 2)
               ElseIf Struc_PT(lng_Index) > Ant_PosCur(lng_Index) Then
                   Struc_PT(lng_Index) = Struc_PT(lng_Index) - ((Struc_PT(lng_Index) - Ant_PosCur(lng_Index)) * 2)
               End If
           End If
       Next
       
       Call SetCursorPos(Struc_PT(0), Struc_PT(1))
       Call CopyMemory(ByVal VarPtr(Ant_PosCur(0)), ByVal VarPtr(Struc_PT(0)), 8)
       'Call CopyMemory(ByVal lParam, ByVal VarPtr(Struc_PT(0)), 8)    '   //  Esto solo actuyaliza lParam
       
       Boo_Switch = False
       MouseProc = &H1 '   //  CallNextHookEx(lng_HookProc, idHook, wParam, lParam)   '   //  Si dejo pasar ignorara la nueva posición...
   Else
       MouseProc = CallNextHookEx(lng_HookProc, idHook, wParam, lParam)
   End If
   
End Function



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

Psyke1

Código (vb) [Seleccionar]
Exit Function       '   //  Si no se hace Esto no funciona el efecto de mouse invertido xS

Porque? :huh:

DoEvents! :P

79137913

HOLA!!!

Esta muy bueno el code, pero, creo que lo mejor seria enviarle una variable a la funcion de 1 a 360 representando donde estaria el "arriba" , que por default seria 90 y para invertirlo seria 270 y todo asi. Eso seria muy muy bueno.

No se si es mucho pedir pero estaria genial que el source hiciera eso

GRACIAS POR LEER!!!
"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

79137913                          *Shadow Scouts Team*

BlackZeroX

.
@79137913

Por eso es Open Source!¡.

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

raul338

Código (vb) [Seleccionar]

        Exit Function       '   //  Si no se hace Esto no funciona el efecto de mouse invertido xS
    End If

De hecho si funciona, pero creo que eso estaba por esto :P
Código (vb) [Seleccionar]

    'MouseProc = CallNextHookEx(lng_HookProc, idHook, wParam, lParam)

como ya no se ejecuta mas, quedo ahi :xD

BlackZeroX

.
Bueno lo que pasa que si hago pasar el siguiente Hook lo que me hace es que ignora la nueva posicion de mouse xS

Dulce Lunas!¡.
The Dark Shadow is my passion.

raul338

Claro, precisamente el CallNextHookEx es para decir que procese los parametros de forma normal :xD
pero como estaba comentado, ya no hacia falta el Exit Function

BlackZeroX

Una quequeña modificación

sustituir

Código (vb) [Seleccionar]



       For lng_Index = 0 To 1
           If Not Struc_PT(lng_Index) = Ant_PosCur(lng_Index) _
               And Ant_PosCur(lng_Index) > 0 _
               And Ant_PosCur(lng_Index) <= GetSystemMetrics(lng_Index) Then
               If Struc_PT(lng_Index) < Ant_PosCur(lng_Index) Then
                   Struc_PT(lng_Index) = Struc_PT(lng_Index) + ((Ant_PosCur(lng_Index) - Struc_PT(lng_Index)) * 2)
               ElseIf Struc_PT(lng_Index) > Ant_PosCur(lng_Index) Then
                   Struc_PT(lng_Index) = Struc_PT(lng_Index) - ((Struc_PT(lng_Index) - Ant_PosCur(lng_Index)) * 2)
               End If
           End If
       Next



por

Código (Vb) [Seleccionar]



       For lng_Index = 0 To 1
           If Not Struc_PT(lng_Index) = Ant_PosCur(lng_Index) _
               And Ant_PosCur(lng_Index) >= 0 _
               And Ant_PosCur(lng_Index) <= GetSystemMetrics(lng_Index) Then
               If Struc_PT(lng_Index) < Ant_PosCur(lng_Index) Then
                   Struc_PT(lng_Index) = Struc_PT(lng_Index) + ((Ant_PosCur(lng_Index) - Struc_PT(lng_Index)) * 2)
               ElseIf Struc_PT(lng_Index) > Ant_PosCur(lng_Index) Then
                   Struc_PT(lng_Index) = Struc_PT(lng_Index) - ((Struc_PT(lng_Index) - Ant_PosCur(lng_Index)) * 2)
               End If
           End If
       Next



Es solo para que no se quede trabajo el mouse en la parte superior de la pantalla xP

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

BlackZeroX

#8
.
Codigo Actualizado... se me olvido pasar el Hook si es un click u otra cosa.

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

Psyke1

Ook buena Black! :D
Gracias por la explicacion raul338 :xD

DoEvents! :P