Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#Include <WindowsConstants.au3>
HotKeySet('{ESC}', '_Exit')
Global Const $RID_INPUT = 0x10000003
Global Const $RIDEV_INPUTSINK = 0x00000100
Global Const $RI_MOUSE_LEFT_BUTTON_UP = 0x0002
Global Const $RI_MOUSE_RIGHT_BUTTON_UP = 0x0008
Global Const $RI_MOUSE_MIDDLE_BUTTON_UP = 0x0020
Global Const $RI_MOUSE_BUTTON_4_UP = 0x0080
Global Const $RI_MOUSE_BUTTON_5_UP = 0x0200
Global Const $RIM_TYPEMOUSE = 0
Global Const $RIM_TYPEKEYBOARD = 0x01
If Not IsDeclared('WM_INPUT') Then Global Const $WM_INPUT = 0x00FF
Global Const $tagRAWINPUTDEVICE = 'ushort usUsagePage;ushort usUsage;dword dwFlags;hwnd hwndTarget;'
Global Const $tagRAWINPUTHEADER = 'dword dwType;dword dwSize;hwnd hDevice;uint_ptr wParam;'
Global Const $tagRAWMOUSE = 'ushort usFlags;ushort usAlignment;ushort usButtonFlags;' & _
'ushort usButtonData;ulong ulRawButtons;long lLastX;long lLastY;ulong ulExtraInformation'
Global Const $tagRAWINPUT_MOUSE = $tagRAWINPUTHEADER & $tagRAWMOUSE
Global Const $tagRAWKEYBOARD = 'ushort MakeCode;ushort Flags;ushort Reserved;ushort VKey;uint Message;' & _
'ulong ExtraInformation;'
Global Const $tagRAWINPUT_KEYBOARD = $tagRAWINPUTHEADER & $tagRAWKEYBOARD & 'dword;ushort;'
;======================================
Global $tRIH, $iRIH
Global $hGUI, $label, $action
$hGUI = GUICreate('MyGUI', 120, 60, 20, 20, -1, $WS_EX_TOPMOST)
$label = GUICtrlCreateLabel("test", 30, 20, 50, 20)
GUIRegisterMsg($WM_INPUT, 'WM_INPUT')
$tRID_KD = DllStructCreate($tagRAWINPUTDEVICE)
$pRID_KD = DllStructGetPtr($tRID_KD)
$iRID_KD = DllStructGetSize($tRID_KD)
$tRID_M = DllStructCreate($tagRAWINPUTDEVICE)
$pRID_M = DllStructGetPtr($tRID_M)
$iRID_M = DllStructGetSize($tRID_M)
$tRIH = DllStructCreate($tagRAWINPUTHEADER)
$iRIH = DllStructGetSize($tRIH)
DllStructSetData($tRID_KD, 'usUsagePage', 0x01)
DllStructSetData($tRID_KD, 'usUsage', 0x06)
DllStructSetData($tRID_KD, 'dwFlags', $RIDEV_INPUTSINK)
DllStructSetData($tRID_KD, 'hwndTarget', $hGUI)
DllStructSetData($tRID_M, 'usUsagePage', 0x01)
DllStructSetData($tRID_M, 'usUsage', 0x02)
DllStructSetData($tRID_M, 'dwFlags', $RIDEV_INPUTSINK)
DllStructSetData($tRID_M, 'hwndTarget', $hGUI)
_RegisterRawInputDevices($pRID_M, 1, $iRID_M)
_RegisterRawInputDevices($pRID_KD, 1, $iRID_KD)
GUISetState()
While GuiGetMsg()<>$GUI_EVENT_CLOSE
Sleep(10)
WEnd
_Exit()
;=========================================
Func WM_INPUT($hwnd, $iMsg, $iwParam, $ilParam)
Local $tRI_M, $pRI_M, $iRI_M, $tRI_KD, $pRI_KD, $iRI_KD, $iSize
$tRI_M = DllStructCreate($tagRAWINPUT_MOUSE)
$pRI_M = DllStructGetPtr($tRI_M)
$iRI_M = DllStructGetSize($tRI_M)
_GetRawInputData($ilParam, $RID_INPUT, $pRI_M, $iRI_M, $iRIH)
Switch DllStructGetData($tRI_M, 'dwType')
Case $RIM_TYPEMOUSE
Local $Flags = DllStructGetData($tRI_M, 'usButtonFlags')
If not BitAND($Flags, BitOR($RI_MOUSE_MIDDLE_BUTTON_UP, _
$RI_MOUSE_LEFT_BUTTON_UP, _
$RI_MOUSE_RIGHT_BUTTON_UP, _
$RI_MOUSE_BUTTON_4_UP, _
$RI_MOUSE_BUTTON_5_UP)) Then
If DllStructGetData($tRI_M, 'lLastX')=0 AND DllStructGetData($tRI_M, 'lLastY')=0 Then
$action += 1
GuiCtrlSetData($label, $action)
EndIf
EndIf
Case $RIM_TYPEKEYBOARD
$tRI_KD = DllStructCreate($tagRAWINPUT_KEYBOARD)
$pRI_KD = DllStructGetPtr($tRI_KD)
$iRI_KB = DllStructGetSize($tRI_KD)
_GetRawInputData($ilParam, $RID_INPUT, $pRI_KD, $iRI_KB, $iRIH)
If DllStructGetData($tRI_KD, 'Message') = $WM_KEYUP Then ; clavier
$action += 1
GuiCtrlSetData($label, $action) ; DllStructGetData($tRI_KD, 'VKey')
EndIf
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc
Func _Exit()
Exit Msgbox(0, "", $action)
EndFunc
Func _GetRawInputData($hRawInput, $iCommand, $pData, ByRef $iSize, $iSizeHeader, $hDll = 'user32.dll')
Local $aRet
$aRet = DllCall($hDll, 'uint', 'GetRawInputData', 'hwnd', $hRawInput, 'uint', $iCommand, 'ptr', $pData, 'uint*', $iSize, 'uint', $iSizeHeader)
If @error Or $aRet[0] = 4294967295 Then Return SetError(1, 0, $aRet[0])
$iSize = $aRet[4]
Return $aRet[0]
EndFunc
Func _RegisterRawInputDevices($pRawInputDevices, $iNumDevices, $iSize, $hDll = 'user32.dll')
Local $aRet
$aRet = DllCall($hDll, 'int', 'RegisterRawInputDevices', 'ptr', $pRawInputDevices, 'uint', $iNumDevices, 'uint', $iSize)
If @error Or $aRet[0] = 0 Then SetError(1, 0, 0)
Return $aRet[0]
EndFunc