Jump to content

Mouse wheel


Recommended Posts

#include <WinAPI.au3>
#include <WindowsConstants.au3>

Global Const $WH_CALLWNDPROC     = 4
Global Const $WH_CALLWNDPROCRET  = 12
Global Const $WH_CBT             = 5
Global Const $WH_DEBUG         = 9
Global Const $WH_FOREGROUNDIDLE  = 11
Global Const $WH_GETMESSAGE   = 3
Global Const $WH_JOURNALPLAYBACK = 1
Global Const $WH_JOURNALRECORD   = 0
Global Const $WH_KEYBOARD       = 2
Global Const $WH_KEYBOARD_LL     = 13
Global Const $WH_MOUSE         = 7
Global Const $WH_MOUSE_LL       = 14
Global Const $WH_MSGFILTER     = -1
Global Const $WH_SHELL         = 10
Global Const $WH_SYSMSGFILTER   = 6

Global Const $KF_EXTENDED   = 0x100
Global Const $KF_ALTDOWN     = 0x2000
Global Const $KF_UP       = 0x8000
Global Const $LLKHF_EXTENDED = BitShift($KF_EXTENDED, 8)
Global Const $LLKHF_INJECTED = 0x10
Global Const $LLKHF_ALTDOWN  = BitShift($KF_ALTDOWN, 8)
Global Const $LLKHF_UP     = BitShift($KF_UP, 8)

; #STRUCTURE# ====================================================================================================


;===============
; Name...........: $tagKBDLLHOOKSTRUCT
; Description ...: Contains information about a low-level keyboard input event
; Fields ........: vkCode              - Specifies a virtual-key code. The code must be a value in the range 1 to 254
;                 scanCode           - Specifies a hardware scan code for the key
;                 flags             - Specifies the extended-key flag, event-injected flag, context code, and transition-state flag. This member is specified as follows.
;                 +  An application can use the following values to test the keystroke flags:
;                 |$LLKHF_EXTENDED   - Test the extended-key flag
;                 |$LLKHF_INJECTED   - Test the event-injected flag
;                 |$LLKHF_ALTDOWN     - Test the context code
;                 |$LLKHF_UP           - Test the transition-state flag
;                 |  0    - Specifies whether the key is an extended key, such as a function key or a key on the numeric keypad
;                 | The value is 1 if the key is an extended key; otherwise, it is 0
;                 |  1 to 3 - Reserved
;                 |  4    - Specifies whether the event was injected. The value is 1 if the event was injected; otherwise, it is 0
;                 |  5    - Specifies the context code. The value is 1 if the ALT key is pressed; otherwise, it is 0
;                 |  6    - Reserved
;                 |  7    - Specifies the transition state. The value is 0 if the key is pressed and 1 if it is being released
;                 time               - Specifies the time stamp for this message, equivalent to what GetMessageTime would return for this message
;                 dwExtraInfo         - Specifies extra information associated with the message
; Author ........: Gary Frost (gafrost)
; Remarks .......:
; ====================================================================================================


;===========================
Global Const $tagKBDLLHOOKSTRUCT = "dword vkCode;dword scanCode;dword flags;dword time;ulong_ptr dwExtraInfo"

Global $hHook
Global $hStub_KeyProc = DllCallbackRegister("_KeyProc", "long", "int;wparam;lparam")
Global $hmod = _WinAPI_GetModuleHandle(0)
Global $hHook = _WinAPI_SetWindowsHookEx($WH_KEYBOARD_LL, DllCallbackGetPtr($hStub_KeyProc), $hmod)
Global $buffer = ""

MsgBox(4096, "", "Click OK, then open notepad and type..." & _
        @LF & @LF & "Jon" & @LF & "AutoIt")


While 1
    Sleep(10)
WEnd

Func EvaluateKey($keycode)
    If (($keycode > 64) And ($keycode < 91)) _; A - Z
            Or (($keycode > 47) And ($keycode < 58)) Then; 0 - 9
        $buffer &= Chr($keycode)
        Switch $buffer
            Case "Jon"
                ToolTip("What can you say?")
            Case "AUTOIT"
                ToolTip("AutoIt Rocks")
        EndSwitch
    ElseIf ($keycode > 159) And ($keycode < 164) Then
        Return
    ElseIf ($keycode = 27) Then; esc key
        Exit
    Else
        $buffer = ""
    EndIf
EndFunc  ;==>EvaluateKey

;===========================================================
; callback function
;===========================================================
Func _KeyProc($nCode, $wParam, $lParam)
    Local $tKEYHOOKS
    $tKEYHOOKS = DllStructCreate($tagKBDLLHOOKSTRUCT, $lParam)
    If $nCode < 0 Then
        Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
    EndIf
    If $wParam = $WM_KEYDOWN Then
        EvaluateKey(DllStructGetData($tKEYHOOKS, "vkCode"))
    Else
        Local $flags = DllStructGetData($tKEYHOOKS, "flags")
        Switch $flags
            Case $LLKHF_ALTDOWN
                ConsoleWrite("$LLKHF_ALTDOWN" & @LF)
            Case $LLKHF_EXTENDED
                ConsoleWrite("$LLKHF_EXTENDED" & @LF)
            Case $LLKHF_INJECTED
                ConsoleWrite("$LLKHF_INJECTED" & @LF)
            Case $LLKHF_UP
                ConsoleWrite("$LLKHF_UP: scanCode - " & DllStructGetData($tKEYHOOKS, "scanCode") & @TAB & "vkCode - " & DllStructGetData($tKEYHOOKS, "vkCode") & @LF)
        EndSwitch
    EndIf
    Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
EndFunc  ;==>_KeyProc

Func OnAutoItExit()
    _WinAPI_UnhookWindowsHookEx($hHook)
    DllCallbackFree($hStub_KeyProc)
EndFunc  ;==>OnAutoItExit

; #FUNCTION# ====================================================================================================


;================
; Name...........: _WinAPI_UnhookWindowsHookEx
; Description ...: Removes a hook procedure installed in a hook chain by the _WinAPI_SetWindowsHookEx function
; Syntax.........: _WinAPI_UnhookWindowsHookEx($hhk)
; Parameters ....: $hhk - Handle to the hook to be removed
; Return values .: Success    - True
;                 Failure     - False
; Author ........: Gary Frost
; Modified.......:
; Remarks .......:
; Related .......:
; Link ..........; @@MsdnLink@@ UnhookWindowsHookEx
; Example .......;
; ====================================================================================================


;===========================
Func _WinAPI_UnhookWindowsHookEx($hhk)
    Local $iResult = DllCall("user32.dll", "int", "UnhookWindowsHookEx", "hwnd", $hhk)
    If @error Then Return SetError(@error, @extended, 0)
    Return $iResult[0] <> 0
EndFunc  ;==>_WinAPI_UnhookWindowsHookEx

; #FUNCTION# ====================================================================================================


;================
; Name...........: _WinAPI_CallNextHookEx
; Description ...: Passes the hook information to the next hook procedure in the current hook chain
; Syntax.........: _WinAPI_CallNextHookEx($hhk, $iCode, $wParam, $lParam)
; Parameters ....: $hhk - Windows 95/98/ME: Handle to the current hook. An application receives this handle as a result of a previous call to the _WinAPI_SetWindowsHookEx function.
;                 |Windows NT/XP/2003: Ignored
;                 $iCode - Specifies the hook code passed to the current hook procedure. The next hook procedure uses this code to determine how to process the hook information
;                 $wParam  - Specifies the wParam value passed to the current hook procedure.
;                 |The meaning of this parameter depends on the type of hook associated with the current hook chain
;                 $lParam - Specifies the lParam value passed to the current hook procedure.
;                 |The meaning of this parameter depends on the type of hook associated with the current hook chain
; Return values .: Success    - This value is returned by the next hook procedure in the chain
;                 Failure     - -1 and @error is set
; Author ........: Gary Frost
; Modified.......:
; Remarks .......:
; Related .......:
; Link ..........; @@MsdnLink@@ CallNextHookEx
; Example .......;
; ====================================================================================================


;===========================
Func _WinAPI_CallNextHookEx($hhk, $iCode, $wParam, $lParam)
    Local $iResult = DllCall("user32.dll", "long", "CallNextHookEx", "hwnd", $hhk, "int", $iCode, "wparam", $wParam, "lparam", $lParam)
    If @error Then Return SetError(@error, @extended, -1)
    Return $iResult[0]
EndFunc  ;==>_WinAPI_CallNextHookEx

; #FUNCTION# ====================================================================================================


;================
; Name...........: _WinAPI_SetWindowsHookEx
; Description ...: Installs an application-defined hook procedure into a hook chain
; Syntax.........: _WinAPI_SetWindowsHookEx($idHook, $lpfn, $hmod[, $dwThreadId = 0])
; Parameters ....: $idHook  - Specifies the type of hook procedure to be installed. This parameter can be one of the following values:
;                 |$WH_CALLWNDPROC   - Installs a hook procedure that monitors messages before the system sends them to the destination window procedure
;                 |$WH_CALLWNDPROCRET  - Installs a hook procedure that monitors messages after they have been processed by the destination window procedure
;                 |$WH_CBT           - Installs a hook procedure that receives notifications useful to a computer-based training (CBT) application
;                 |$WH_DEBUG           - Installs a hook procedure useful for debugging other hook procedures
;                 |$WH_FOREGROUNDIDLE  - Installs a hook procedure that will be called when the application's foreground thread is about to become idle
;                 |$WH_GETMESSAGE     - Installs a hook procedure that monitors messages posted to a message queue
;                 |$WH_JOURNALPLAYBACK - Installs a hook procedure that posts messages previously recorded by a $WH_JOURNALRECORD hook procedure
;                 |$WH_JOURNALRECORD   - Installs a hook procedure that records input messages posted to the system message queue
;                 |$WH_KEYBOARD     - Installs a hook procedure that monitors keystroke messages
;                 |$WH_KEYBOARD_LL   - Windows NT/2000/XP: Installs a hook procedure that monitors low-level mouse input events
;                 |$WH_MOUSE           - Installs a hook procedure that monitors mouse messages
;                 |$WH_MOUSE_LL     - Windows NT/2000/XP: Installs a hook procedure that monitors low-level mouse input events
;                 |$WH_MSGFILTER       - Installs a hook procedure that monitors messages generated as a result of an input event in a dialog box, message box, menu, or scroll bar
;                 |$WH_SHELL           - Installs a hook procedure that receives notifications useful to shell applications
;                 |$WH_SYSMSGFILTER - Installs a hook procedure that monitors messages generated as a result of an input event in a dialog box, message box, menu, or scroll bar
;                 $lpfn  - Pointer to the hook procedure. If the $dwThreadId parameter is zero or specifies the identifier of a thread created by a different process,
;                 + the $lpfn parameter must point to a hook procedure in a DLL.
;                 |Otherwise, $lpfn can point to a hook procedure in the code associated with the current process
;                 $hmod  - Handle to the DLL containing the hook procedure pointed to by the $lpfn parameter.
;                 |The $hMod parameter must be set to NULL if the $dwThreadId parameter specifies a thread created by the current process and if the hook procedure is within the
;                 + code associated with the current process
;                 $dwThreadId - Specifies the identifier of the thread with which the hook procedure is to be associated.
;                 |If this parameter is zero, the hook procedure is associated with all existing threads running in the same desktop as the calling thread
; Return values .: Success    - Handle to the hook procedure
;                 Failure     - 0 and @error is set
; Author ........: Gary Frost
; Modified.......:
; Remarks .......:
; Related .......:
; Link ..........; @@MsdnLink@@ SetWindowsHookEx
; Example .......;
; ====================================================================================================


;===========================
Func _WinAPI_SetWindowsHookEx($idHook, $lpfn, $hmod, $dwThreadId = 0)
    Local $hwndHook = DllCall("user32.dll", "hwnd", "SetWindowsHookEx", "int", $idHook, "ptr", $lpfn, "hwnd", $hmod, "dword", $dwThreadId)
    If @error Then Return SetError(@error, @extended, 0)
    Return $hwndHook[0]
EndFunc  ;==>_WinAPI_SetWindowsHookEx

So this is the code. The problem is that it only for keyboard. How do i set this for the mouse? ive tried this but i dont get it worked :)

[center]uqoii.nl[/center]

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...