[Func] Mimic Microsoft Intelimouse ZOOM option

Partagez des fonctions et des UDF AutoIt.
Règles du forum
.
Répondre
SilentBob999
Niveau 1
Niveau 1
Messages : 2
Enregistré le : lun. 09 mai 2011 22:23
Status : Hors ligne

[Func] Mimic Microsoft Intelimouse ZOOM option

#1

Message par SilentBob999 »

Bonjour à tous,
ceci est mon premier post dans le forum. Je suis nouveau à Autoit mais depuis quelques semaines/mois j'utilise Autoit pour automatiser l'installation de logiciel et la résolution de léger problème. Depuis le début je parcours l'aide Autoit et le forum Français et Anglais pour me dépanner.

Pour vous remercier j'aimerais vous offrir mon premier script à caractère purement ludique. :D

Si vous avez des questions ou des commentaires vous êtes la bienvenue.

Merci 8)

[spoiler=Script Function:
Mimic Microsoft Intelimouse ZOOM option

Utilisation:
Map a key of your mouse to send (MAJ + ALT + M) (use your mouse driver software)
press that key to activate magnify
press and hold, then scroll the wheel to zoom in and out
press the key to exit magnify]

Code : Tout sélectionner

#cs ----------------------------------------------------------------------------

 AutoIt Version: 3.3.6.1
 Author:       (MC2)

 Script Function:
    Mimic Microsoft Intelimouse  ZOOM option

Utilisation:
    Map a key of your mouse to send (MAJ + ALT + M) (use your mouse driver software)
    press that key to activate magnify
        press and hold, then scroll the wheel to zoom in and out
    press the key to exit magnify

Tested with Windows 7 Ultimate and Logitech M705 mouse with SetPoint 6.30.41 ; driver 5.30.67


Credit :
Great thanks to GaryFrost for that post :
http://www.autoitscript.com/forum/topic/14353-new-mouse-controls-needed/page__view__findpost__p__383523

See http://msdn2.microsoft.com/en-us/library/ms645617.aspx for more info on WM_MOUSEWHEEL


#ce ----------------------------------------------------------------------------


#include <Misc.au3>
#include <GUIConstants.au3>

Global Const $tagTRACKMOUSEEVENT = "dword Size;dword Flags;hwnd hWndTrack;dword HoverTime"
Global Const $WM_MOUSEWHEEL = 0x020A
Global Const $TME_HOVER = 0x1
Global Const $HOVER_DEFAULT = 0xFFFFFFFF
Global $WheelDirection, $wheelActivation, $AlreadyProcessingMagnify

$hGui = GUICreate("Magnify MC2", 20,20,0,0)
$LabelId = GUICtrlCreateLabel("Wheel", 0, 0, 20, 20)

GUISetState(@SW_HIDE)

$hDLL = DllOpen("user32.dll")
OnAutoItExitRegister("sortie")

HotKeySet ("+!m", "Magnify") ; (MAJ + ALT + M)

GUIRegisterMsg($WM_MOUSEWHEEL, "WM_MOUSEWHEEL")

If Not _TrackMouseEvent() Then Exit

While 1
    $MsgId = GUIGetMsg()
    If $MsgId = $GUI_EVENT_CLOSE Then
        EXIT
    EndIf
WEnd

; MAJ (10) + ALT (12) + M (4D)

Func Magnify ()
if $AlreadyProcessingMagnify = 0 Then
    $AlreadyProcessingMagnify = 1
    if ProcessExists ( "magnify.exe" )  Then
        GUISetState(@SW_SHOW)
        $wheelActivation = 0
        WHILE  _IsPressed("4D",$hDLL)
            $WheelDirection = 0
            $MsgId = GUIGetMsg()
            IF $WheelDirection > 0 Then
                $wheelActivation = 1
                ZoomIN()
            Else
                IF $WheelDirection < 0 Then
                    $wheelActivation = 1
                    ZoomOut()
                EndIf
            EndIf
        wend
        GUISetState(@SW_HIDE)
        if $wheelActivation = 0 Then
            ExitMagnifier ()
        EndIf
    Else
        ZoomIn ()
    EndIf
    $AlreadyProcessingMagnify = 0
EndIf
EndFunc

func sortie()
    DllClose($hDLL)
endfunc

func ZoomIn ()
    send ("{LWINDOWN}{NUMPADADD}{LWINUP}")
EndFunc

func ExitMagnifier ()
    send ("{LWINDOWN}{ESC}{LWINUP}")
EndFunc

func ZoomOut ()
    send ("{LWINDOWN}{NUMPADSUB}{LWINUP}")
EndFunc



#cs ----------------------------------------------------------------------------
                Mouse Function
#ce ----------------------------------------------------------------------------

Func WM_MOUSEWHEEL($hWndGui, $MsgId, $WParam, $LParam)
    $WheelDirection = BitShift($WParam, 16)
    GUICtrlSetData ($LabelId,$WheelDirection)
    Return 0
EndFunc   ;==>WM_MOUSEWHEEL

Func _TrackMouseEvent()
    Local $pMouseEvent, $iResult, $iMouseEvent
    Local $tMouseEvent = DllStructCreate($tagTRACKMOUSEEVENT)

    $iMouseEvent = DllStructGetSize($tMouseEvent)
    DllStructSetData($tMouseEvent, "Flags", $TME_HOVER)
    DllStructSetData($tMouseEvent, "hWndTrack", $hGui)
    DllStructSetData($tMouseEvent, "HoverTime", $HOVER_DEFAULT) ; 400 milliseconds
    DllStructSetData($tMouseEvent, "Size", $iMouseEvent)
    $ptrMouseEvent = DllStructGetPtr($tMouseEvent)
    $iResult = DllCall($hDLL, "int", "TrackMouseEvent", "ptr", $ptrMouseEvent)
    Return $iResult[0] <> 0
EndFunc   ;==>_TrackMouseEvent

 
[/spoiler]
Avatar du membre
moi
Niveau 7
Niveau 7
Messages : 370
Enregistré le : sam. 09 juil. 2011 22:14
Localisation : devant sont ordinateur
Status : Hors ligne

Re: [Func] Mimic Microsoft Intelimouse ZOOM option

#2

Message par moi »

est ce que c'est toi qui a fait le script?
SilentBob999 a écrit :Author: (MC2)
et le script : rien ne se passe(chez moi)
le problème ce n'est pas un problème, le seul problème ici c'est nous.

j'aime NYAN CAT Image
SilentBob999
Niveau 1
Niveau 1
Messages : 2
Enregistré le : lun. 09 mai 2011 22:23
Status : Hors ligne

Re: [Func] Mimic Microsoft Intelimouse ZOOM option

#3

Message par SilentBob999 »

moi a écrit :est ce que c'est toi qui a fait le script?
SilentBob999 a écrit :Author: (MC2)
et le script : rien ne se passe(chez moi)
Salut,
Oui c'est moi qui l'est fait, (MC2) c'est un clin d’œil avec mes collègues de la job.

Si ça ne fonctionne pas pour toi peux-tu me donner plus d'info sur ton système. Quel OS as-tu? Car je crois que les raccourcis clavier utilisé pour activer le Magnify son spécifique à windows 7. Et aussi, quel souris et quel driver utilise-tu ?

Pour expliquer un peu plus le script voilà. J'utilise mon pc dans le salon brancher sur ma télé et le sofa est à une certaine distance de celui-ci. J'utilisais un combo clavier/souris sans-fil de Microsoft depuis quelques années mais il a commencé à mal fonctionner côté qualité du signal sans-fil et touche alors je l'ai remplacé par un combo logitech MK710.

C'est à ce moment que je me suis rendu compte que j'étais accro à la fonction zoom et que je ne pouvais pas me passer de mon habitude d'utiliser cette fonction assigné à une touche de ma souris.

Le problème étant que la fonction Zoom fournis par logitech ne me conviens pas. La fonction zoom de logitech se résumant à un CTRLDOWN au premier clic et un CTRLUP au 2e clic.. désolé mais j'avais déjà l'habitude d'utiliser CTRL+mousewheel quand nécessaire et cette fonction ne remplace pas le magnify, ce n'est que complémentaire..

Alors voilà, j'ai programmé ce petit utilitaire (driver).
Et j'ai programmé avec SetPoint (le driver de ma souris) une touche qui exécute maintenant la frappe (MAJ + ALT + M)

Le programme détecte cette combinaison de touche, si le magnify n'est pas en cours d'exécution il l'ouvre. Si le Magnify est en cours d'éxecution est qu'il détect un mouvement de la roulette de la souris alors que la touche M est maintenue enfoncé alors il fait un zoomIN & OUT. Et si Magnify est en cours d'éxcution mais que aucun mouvement de roulette n'est détecté jusqu'au relachement de la touche alors il ferme le magnify..

Testé chez moi sur Windows 7 Ultimate et ma souris Logitech M705 avec SetPoint 6.30.41/driver 5.30.67
Le comportement est identique à ce que j'avais avec ma souris Microsoft.

J'ai tenté au travail avec le clavier en remplacant la combinaison de touche par autre chose et le comportement est beaucoup moins prévisible car le clavier répète les touches appuyées et fait en quelque sorte buggé mon programme.

[EDIT] Si je change la touche que je verifie comme étant enfoncé dans le while par ALT au lieu du M j'obtiens un comportement fonctionnel avec le clavier.. reste à voir si ça fonctionne toujours avec ma souris à la maison..
WHILE _IsPressed("12",$hDLL)
Répondre