#include-once #Region VARIABLES ; #VARIABLES# ================================================================================================================ If Not IsDeclared('WM_INPUT') Then Global Const $WM_INPUT = 0x00FF ; =============================================================================================================================== ; $tagRAWINPUTHEADER Constants ; =============================================================================================================================== Global Const $RIM_TYPEMOUSE = 0 Global Const $RIM_TYPEKEYBOARD = 0x01 Global Const $RIM_TYPEHID = 0x02 ; =============================================================================================================================== ; $WM_INPUT Constants ; =============================================================================================================================== Global Const $RIM_INPUT = 0 Global Const $RIM_INPUTSINK = 1 ; =============================================================================================================================== ; $tagRAWMOUSE Constants ; =============================================================================================================================== Global Const $MOUSE_MOVE_RELATIVE = 0 Global Const $MOUSE_MOVE_ABSOLUTE = 0x01 Global Const $MOUSE_VIRTUAL_DESKTOP = 0x02 Global Const $MOUSE_ATTRIBUTES_CHANGED = 0x04 Global Const $RI_MOUSE_LEFT_BUTTON_DOWN = 0x01 Global Const $RI_MOUSE_LEFT_BUTTON_UP = 0x0002 Global Const $RI_MOUSE_RIGHT_BUTTON_DOWN = 0x0004 Global Const $RI_MOUSE_RIGHT_BUTTON_UP = 0x0008 Global Const $RI_MOUSE_MIDDLE_BUTTON_DOWN = 0x0010 Global Const $RI_MOUSE_MIDDLE_BUTTON_UP = 0x0020 Global Const $RI_MOUSE_BUTTON_1_DOWN = $RI_MOUSE_LEFT_BUTTON_DOWN Global Const $RI_MOUSE_BUTTON_1_UP = $RI_MOUSE_LEFT_BUTTON_UP Global Const $RI_MOUSE_BUTTON_2_DOWN = $RI_MOUSE_RIGHT_BUTTON_DOWN Global Const $RI_MOUSE_BUTTON_2_UP = $RI_MOUSE_RIGHT_BUTTON_UP Global Const $RI_MOUSE_BUTTON_3_DOWN = $RI_MOUSE_MIDDLE_BUTTON_DOWN Global Const $RI_MOUSE_BUTTON_3_UP = $RI_MOUSE_MIDDLE_BUTTON_UP Global Const $RI_MOUSE_BUTTON_4_DOWN = 0x0040 Global Const $RI_MOUSE_BUTTON_4_UP = 0x0080 Global Const $RI_MOUSE_BUTTON_5_DOWN = 0x0100 Global Const $RI_MOUSE_BUTTON_5_UP = 0x0200 Global Const $RI_MOUSE_WHEEL = 0x0400 ; =============================================================================================================================== ; $tagRAWKEYBOARD Constants ; =============================================================================================================================== Global Const $RI_KEY_MAKE = 0 Global Const $RI_KEY_BREAK = 0x01 Global Const $RI_KEY_E0 = 0x02 Global Const $RI_KEY_E1 = 0x04 Global Const $RI_KEY_TERMSRV_SET_LED = 0x08 Global Const $RI_KEY_TERMSRV_SHADOW = 0x10 Global Const $KEYBOARD_OVERRUN_MAKE_CODE = 0xFF ; =============================================================================================================================== ; _GetRawInputData Constants ; =============================================================================================================================== Global Const $RID_INPUT = 0x10000003 Global Const $RID_HEADER = 0x10000005 ; =============================================================================================================================== ; _GetRawInputDeviceInfo Constants ; =============================================================================================================================== Global Const $RIDI_PREPARSEDDATA = 0x20000005 Global Const $RIDI_DEVICENAME = 0x20000007 ; The return valus is the character length, not the byte size Global Const $RIDI_DEVICEINFO = 0x2000000B ; =============================================================================================================================== ; $tagRAWINPUTDEVICE Constants ; =============================================================================================================================== Global Const $RIDEV_REMOVE = 0x00000001 Global Const $RIDEV_EXCLUDE = 0x00000010 Global Const $RIDEV_PAGEONLY = 0x00000020 Global Const $RIDEV_NOLEGACY = 0x00000030 Global Const $RIDEV_INPUTSINK = 0x00000100 Global Const $RIDEV_CAPTUREMOUSE = 0x00000200 ; Effective when mouse nolegacy is specified, otherwise it would be an error Global Const $RIDEV_NOHOTKEYS = 0x00000200 ; Effective for keyboard. Global Const $RIDEV_APPKEYS = 0x00000400 ; Effective for keyboard. Global Const $RIDEV_EXMODEMASK = 0x000000F0 Global Const $RIDEV_EXINPUTSINK = 0x00001000 Global Const $RIDEV_DEVNOTIFY = 0x00002000 ; =============================================================================================================================== ; Error Constants ; =============================================================================================================================== Global Const $__ERROR_MORE_DATA = 4294967295 Global Const $__ERROR_INSUFFICIENT_BUFFER = 0x007A Global Const $__UINT_ERROR = 4294967295 #EndRegion VARIABLES #Region STRUCTURES ; #STRUCTURES# ================================================================================================================ ; #STRUCTURE# =================================================================================================================== ; Name...........: $tagRAWINPUTHEADER ; Description ...: Contains the header information that is part of the raw input data. ; Fields ........: dwType - Type of raw input. It can be one of the following values. ; |$RIM_TYPEMOUSE - Raw input comes from the mouse. ; |$RIM_TYPEKEYBOARD - Raw input comes from the keyboard. ; |$RIM_TYPEHID - Raw input comes from some device that is not a keyboard or a mouse. ; dwSize - Size, in bytes, of the entire input packet of data. This includes $tagRAWINPUT_* plus possible ; +extra input reports in the RAWHID variable length array. ; hDevice - Handle to the device generating the raw input data. ; wParam - Value passed in the wParam parameter of the $WM_INPUT message. ; Author ........: ; Remarks .......: To get more information on the device, use hDevice in a call to _GetRawInputDeviceInfo. ; Link ..........: http://msdn.microsoft.com/en-us/library/ms645571%28VS.85%29.aspx ; =============================================================================================================================== Global Const $tagRAWINPUTHEADER = _ 'dword dwType;' & _ 'dword dwSize;' & _ 'hwnd hDevice;' & _ 'uint_ptr wParam;' ; #STRUCTURE# =================================================================================================================== ; Name...........: $tagRAWMOUSE ; Description ...: Contains information about the state of the mouse. ; Fields ........: usFlags - Mouse state. This member can be any reasonable combination of the following. ; |$MOUSE_MOVE_RELATIVE - Mouse movement data is relative to the last mouse position. ; |$MOUSE_MOVE_ABSOLUTE - Mouse movement data is based on absolute position. ; |$MOUSE_VIRTUAL_DESKTOP - Mouse coordinates are mapped to the virtual desktop (for a multiple monitor system). ; |$MOUSE_ATTRIBUTES_CHANGED - Mouse attributes changed; application needs to query the mouse attributes. ; usButtonFlags - Transition state of the mouse buttons. This member can be one or more of the following values. ; |$RI_MOUSE_LEFT_BUTTON_DOWN - Left button changed to down. ; |$RI_MOUSE_LEFT_BUTTON_UP - Left button changed to up. ; |$RI_MOUSE_RIGHT_BUTTON_DOWN - Right button changed to down. ; |$RI_MOUSE_RIGHT_BUTTON_UP - Right button changed to up. ; |$RI_MOUSE_MIDDLE_BUTTON_DOWN - Middle button changed to down. ; |$RI_MOUSE_MIDDLE_BUTTON_UP - Middle button changed to up. ; |$RI_MOUSE_BUTTON_1_DOWN - $RI_MOUSE_LEFT_BUTTON_DOWN ; |$RI_MOUSE_BUTTON_1_UP - $RI_MOUSE_LEFT_BUTTON_UP ; |$RI_MOUSE_BUTTON_2_DOWN - $RI_MOUSE_RIGHT_BUTTON_DOWN ; |$RI_MOUSE_BUTTON_2_UP - $RI_MOUSE_RIGHT_BUTTON_UP ; |$RI_MOUSE_BUTTON_3_DOWN - $RI_MOUSE_MIDDLE_BUTTON_DOWN ; |$RI_MOUSE_BUTTON_3_UP - $RI_MOUSE_MIDDLE_BUTTON_UP ; |$RI_MOUSE_BUTTON_4_DOWN - XBUTTON1 changed to down. ; |$RI_MOUSE_BUTTON_4_UP - XBUTTON1 changed to up. ; |$RI_MOUSE_BUTTON_5_DOWN - XBUTTON2 changed to down. ; |$RI_MOUSE_BUTTON_5_UP - XBUTTON2 changed to up. ; |$RI_MOUSE_WHEEL - Raw input comes from a mouse wheel. The wheel delta is stored in usButtonData. ; usButtonData - If usButtonFlags is $RI_MOUSE_WHEEL, this member is a signed value that specifies the wheel ; +delta. ; ulRawButtons - Raw state of the mouse buttons. ; lLastX - Motion in the X direction. This is signed relative motion or absolute motion, depending on ; +the value of usFlags. ; lLastY - Motion in the Y direction. This is signed relative motion or absolute motion, depending on ; +the value of usFlags. ; ulExtraInformation - Device-specific additional information for the event. ; Author ........: ; Remarks .......: ; Link ..........: http://msdn.microsoft.com/en-us/library/ms645578%28VS.85%29.aspx ; =============================================================================================================================== Global Const $tagRAWMOUSE = _ 'ushort usFlags;' & _ 'ushort usButtonFlags;' & _ 'ushort usButtonData;' & _ 'ulong ulRawButtons;' & _ 'long lLastX;' & _ 'long lLastY;' & _ 'ulong ulExtraInformation' ; #STRUCTURE# =================================================================================================================== ; Name...........: $tagRAWKEYBOARD ; Description ...: Contains information about the state of the keyboard. ; Fields ........: MakeCode - Scan code from the key depression. The scan code for keyboard overrun is ; +$KEYBOARD_OVERRUN_MAKE_CODE. ; Flags - Flags for scan code information. It can be one or more of the following. ; |$RI_KEY_MAKE ; |$RI_KEY_BREAK ; |$RI_KEY_E0 ; |$RI_KEY_E1 ; |$RI_KEY_TERMSRV_SET_LED ; |$RI_KEY_TERMSRV_SHADOW ; Reserved - Reserved; must be zero. ; VKey - Microsoft Windows message compatible virtual-key code. ; Message - Corresponding window message, for example $WM_KEYDOWN, $WM_SYSKEYDOWN, and so forth. ; ExtraInformation - Device-specific additional information for the event. ; Author ........: ; Remarks .......: ; Link ..........: http://msdn.microsoft.com/en-us/library/ms645575%28VS.85%29.aspx ; http://msdn.microsoft.com/en-us/library/ms645540%28VS.85%29.aspx ; =============================================================================================================================== Global Const $tagRAWKEYBOARD = _ 'ushort MakeCode;' & _ 'ushort Flags;' & _ 'ushort Reserved;' & _ 'ushort VKey;' & _ 'uint Message;' & _ 'ulong ExtraInformation;' ; #STRUCTURE# =================================================================================================================== ; Name...........: $tagRAWHID ; Description ...: Describes the format of the raw input from a Human Interface Device (HID). ; Fields ........: dwSizeHid - Size, in bytes, of each HID input in bRawData. ; dwCount - Number of HID inputs in bRawData. ; bRawData - Raw input data as an array of bytes. ; Author ........: ; Remarks .......: Each WM_INPUT can indicate several inputs, but all of the inputs come from the same HID. ; +The size of the bRawData array is dwSizeHid * dwCount. ; Link ..........: http://msdn.microsoft.com/en-us/library/ms645549%28VS.85%29.aspx ; =============================================================================================================================== Global Const $tagRAWHID = _ 'dword dwSizeHid;' & _ 'dword dwCount;' & _ 'ubyte bRawData;' ; #STRUCTURE# =================================================================================================================== ; Name...........: $tagRAWINPUT_MOUSE ; Description ...: Contains the raw input from a device (mouse). ; Fields ........: See above ($tagRAWINPUTHEADER + $tagRAWMOUSE) ; Author ........: ; Remarks .......: The handle to this structure is passed in the lParam parameter of $WM_INPUT. ; +To get detailed information -- such as the header and the content of the raw input -- call _GetRawInputData. ; +To read the $tagRAWINPUT_* in the message loop as a buffered read, call _GetRawInputBuffer. ; +To get device specific information, call _GetRawInputDeviceInfo with the hDevice from $tagRAWINPUTHEADER. ; +Raw input is available only when the application calls _RegisterRawInputDevices with valid device specifications. ; Link ..........: http://msdn.microsoft.com/en-us/library/ms645562%28VS.85%29.aspx ; =============================================================================================================================== Global Const $tagRAWINPUT_MOUSE = _ $tagRAWINPUTHEADER & _ $tagRAWMOUSE ; #STRUCTURE# =================================================================================================================== ; Name...........: $tagRAWINPUT_KEYBOARD ; Description ...: Contains the raw input from a device (keyboard). ; Fields ........: See above ($tagRAWINPUTHEADER + $tagRAWKEYBOARD) ; Author ........: ; Remarks .......: Ditto. ; Link ..........: Ditto. ; =============================================================================================================================== Global Const $tagRAWINPUT_KEYBOARD = _ $tagRAWINPUTHEADER & _ $tagRAWKEYBOARD & _ 'dword;ushort;' ; dwpad;uspad; ; #STRUCTURE# =================================================================================================================== ; Name...........: $tagRAWINPUT_KEYBOARD ; Description ...: Contains the raw input from a device (HID). ; Fields ........: See above ($tagRAWINPUTHEADER + $tagRAWHID) ; Author ........: ; Remarks .......: Ditto. ; Link ..........: Ditto. ; =============================================================================================================================== Global Const $tagRAWINPUT_HID = _ $tagRAWINPUTHEADER & _ $tagRAWHID & _ 'dword;dword;dword;' ; dwpad;dwpad;dwpad; ; #STRUCTURE# =================================================================================================================== ; Name...........: $tagRID_DEVICE_INFO_MOUSE ; Description ...: Defines the raw input data coming from the specified mouse. ; Fields ........: dwId - ID for the mouse device. ; dwNumberOfButtons - Number of buttons for the mouse. ; dwSampleRate - Number of data points per second. This information may not be applicable for every ; +mouse device. ; fHasHorizontalWheel - TRUE if the mouse has a wheel for horizontal scrolling; otherwise, FALSE. ; +Note, This field is only supported under Windows Vista and later versions. ; Author ........: ; Remarks .......: For the mouse, the Usage Page is 1 and the Usage is 2. ; Link ..........: http://msdn.microsoft.com/en-us/library/ms645589%28VS.85%29.aspx ; =============================================================================================================================== Global Const $tagRID_DEVICE_INFO_MOUSE = _ 'dword dwId;' & _ 'dword dwNumberOfButtons;' & _ 'dword dwSampleRate;' & _ 'int fHasHorizontalWheel;' & _ 'dword;dword' ; dwpad;dwpad ; #STRUCTURE# =================================================================================================================== ; Name...........: $tagRID_DEVICE_INFO_KEYBOARD ; Description ...: Defines the raw input data coming from the specified keyboard. ; Fields ........: dwType - Type of the keyboard. ; dwSubType - Subtype of the keyboard. ; dwKeyboardMode - Scan code mode. ; dwNumberOfFunctionKeys - Number of function keys on the keyboard. ; dwNumberOfIndicators - Number of LED indicators on the keyboard. ; dwNumberOfKeysTotal - Total number of keys on the keyboard. ; Author ........: ; Remarks .......: For the keyboard, the Usage Page is 1 and the Usage is 6. ; Link ..........: http://msdn.microsoft.com/en-us/library/ms645587%28VS.85%29.aspx ; =============================================================================================================================== Global Const $tagRID_DEVICE_INFO_KEYBOARD = _ 'dword dwType;' & _ 'dword dwSubType;' & _ 'dword dwKeyboardMode;' & _ 'dword dwNumberOfFunctionKeys;' & _ 'dword dwNumberOfIndicators;' & _ 'dword dwNumberOfKeysTotal;' ; #STRUCTURE# =================================================================================================================== ; Name...........: $tagRID_DEVICE_INFO_HID ; Description ...: Defines the raw input data coming from the specified Human Interface Device (HID). ; Fields ........: dwVendorId - Vendor ID for the HID. ; dwProductId - Product ID for the HID. ; dwVersionNumber - Version number for the HID. ; usUsagePage - Top-level collection Usage Page for the device. ; usUsage - Top-level collection Usage for the device. ; Author ........: ; Remarks .......: ; Link ..........: http://msdn.microsoft.com/en-us/library/ms645584%28VS.85%29.aspx ; =============================================================================================================================== Global Const $tagRID_DEVICE_INFO_HID = _ 'dword dwVendorId;' & _ 'dword dwProductId;' & _ 'dword dwVersionNumber;' & _ 'ushort usUsagePage;' & _ 'ushort usUsage;' & _ 'dword;dword' ; dwpad;dwpad ; #STRUCTURE# =================================================================================================================== ; Name...........: $tagRIDDEVICEINFO_MOUSE ; Description ...: Defines the raw input data coming from any device (mouse). ; Fields ........: cbSize - Size, in bytes, of the $tagRIDDEVICEINFO_MOUSE structure. ; dwType - Type of raw input data. This member can be one of the following values. ; |$RIM_TYPEMOUSE - Data comes from a mouse. ; Author ........: ; Remarks .......: See data fields of the $tagRID_DEVICE_INFO_MOUSE structure for more information. ; Link ..........: http://msdn.microsoft.com/en-us/library/ms645581%28VS.85%29.aspx ; =============================================================================================================================== Global Const $tagRIDDEVICEINFO_MOUSE = _ 'dword cbSize;' & _ 'dword dwType;' & _ $tagRID_DEVICE_INFO_MOUSE ; #STRUCTURE# =================================================================================================================== ; Name...........: $tagRIDDEVICEINFO_KEYBOARD ; Description ...: Defines the raw input data coming from any device (keyboard). ; Fields ........: cbSize - Size, in bytes, of the $tagRIDDEVICEINFO_KEYBOARD structure. ; dwType - Type of raw input data. This member can be one of the following values. ; |$RIM_TYPEKEYBOARD - Data comes from a keyboard. ; Author ........: ; Remarks .......: See data fields of the $tagRID_DEVICE_INFO_KEYBOARD structure for more information. ; Link ..........: http://msdn.microsoft.com/en-us/library/ms645581%28VS.85%29.aspx ; =============================================================================================================================== Global Const $tagRIDDEVICEINFO_KEYBOARD = _ 'dword cbSize;' & _ 'dword dwType;' & _ $tagRID_DEVICE_INFO_KEYBOARD ; #STRUCTURE# =================================================================================================================== ; Name...........: $tagRIDDEVICEINFO_HID ; Description ...: Defines the raw input data coming from any device (HID). ; Fields ........: cbSize - Size, in bytes, of the $tagRIDDEVICEINFO_HID structure. ; dwType - Type of raw input data. This member can be one of the following values. ; |$RIM_TYPEHID - Data comes from an HID that is not a keyboard or a mouse. ; Author ........: ; Remarks .......: See data fields of the $tagRID_DEVICE_INFO_HID structure for more information. ; Link ..........: http://msdn.microsoft.com/en-us/library/ms645581%28VS.85%29.aspx ; =============================================================================================================================== Global Const $tagRIDDEVICEINFO_HID = _ 'dword cbSize;' & _ 'dword dwType;' & _ $tagRID_DEVICE_INFO_HID ; #STRUCTURE# =================================================================================================================== ; Name...........: $tagRAWINPUTDEVICE ; Description ...: Defines information for the raw input devices. ; Fields ........: usUsagePage - Top level collection Usage page for the raw input device. ; usUsage - Top level collection Usage for the raw input device. ; dwFlags - Mode flag that specifies how to interpret the information provided by usUsagePage and usUsage. ; +It can be zero (the default) or one of the following values. By default, the operating system sends raw input ; +from devices with the specified top level collection (TLC) to the registered application as long as it has the ; +window focus. ; |$RIDEV_REMOVE - If set, this removes the top level collection from the inclusion list. This tells the ; +operating system to stop reading from a device which matches the top level collection. ; |$RIDEV_EXCLUDE - If set, this specifies the top level collections to exclude when reading a complete usage ; +page. This flag only affects a TLC whose usage page is already specified with $RIDEV_PAGEONLY. ; |$RIDEV_PAGEONLY - If set, this specifies all devices whose top level collection is from the specified ; +usUsagePage. Note that usUsage must be zero. To exclude a particular top level collection, use $RIDEV_EXCLUDE. ; |$RIDEV_NOLEGACY - If set, this prevents any devices specified by usUsagePage or usUsage from generating ; +legacy messages. This is only for the mouse and keyboard. See Remarks. ; |$RIDEV_INPUTSINK - If set, this enables the caller to receive the input even when the caller is not in the ; +foreground. Note that hwndTarget must be specified. ; |$RIDEV_CAPTUREMOUSE - If set, the mouse button click does not activate the other window ; |$RIDEV_NOHOTKEYS - If set, the application-defined keyboard device hotkeys are not handled. However, ; +the system hotkeys; for example, ALT+TAB and CTRL+ALT+DEL, are still handled. By default, all keyboard hotkeys ; +are handled. $RIDEV_NOHOTKEYS can be specified even if $RIDEV_NOLEGACY is not specified and hwndTarget is NULL. ; |$RIDEV_APPKEYS - Microsoft Windows XP Service Pack 1 (SP1): If set, the application command keys are ; +handled. $RIDEV_APPKEYS can be specified only if RIDEV_NOLEGACY is specified for a keyboard device. ; hwndTarget - Handle to the target window. If NULL it follows the keyboard focus. ; Author ........: ; Remarks .......: If $RIDEV_NOLEGACY is set for a mouse or a keyboard, the system does not generate any legacy message for that ; +device for the application. For example, if the mouse TLC is set with $RIDEV_NOLEGACY, $WM_LBUTTONDOWN and ; +related legacy mouse messages are not generated. Likewise, if the keyboard TLC is set with $RIDEV_NOLEGACY, ; +$WM_KEYDOWN and related legacy keyboard messages are not generated. ; Link ..........: http://msdn.microsoft.com/en-us/library/ms645565%28VS.85%29.aspx ; =============================================================================================================================== Global Const $tagRAWINPUTDEVICE = _ 'ushort usUsagePage;' & _ 'ushort usUsage;' & _ 'dword dwFlags;' & _ 'hwnd hwndTarget;' ; #STRUCTURE# =================================================================================================================== ; Name...........: $tagRAWINPUTDEVICELIST ; Description ...: Contains information about a raw input device. ; Fields ........: hDevice - Handle to the raw input device. ; dwType - Type of device. This can be one of the following values. ; |$RIM_TYPEMOUSE - The device is a mouse. ; |$RIM_TYPEKEYBOARD - The device is a keyboard. ; |$RIM_TYPEHID - The device is an Human Interface Device (HID) that is not a keyboard and not a mouse. ; Author ........: ; Remarks .......: ; Link ..........: http://msdn.microsoft.com/en-us/library/ms645568%28VS.85%29.aspx ; =============================================================================================================================== Global Const $tagRAWINPUTDEVICELIST = _ 'hwnd hDevice;' & _ 'dword dwType;' #EndRegion STRUCTURES #Region FUNCTIONS ; #FUNCTIONS# ================================================================================================================ ; =============================================================================================================================== ; #CURRENT# ===================================================================================================================== ;_DefRawInputProc ;_GetRawInputBuffer ;_GetRawInputData ;_GetRawInputDeviceInfo ;_GetRawInputDeviceList ;_GetRegisteredRawInputDevices ;_RegisterRawInputDevices ; =============================================================================================================================== ; #FUNCTION# ==================================================================================================================== ; Name ..........: _DefRawInputProc ; Description ...: Calls the default raw input procedure to provide default processing for any raw input messages that an ; +application does not process. This function ensures that every message is processed. DefRawInputProc is ; +called with the same parameters received by the window procedure ; Syntax ........: _DefRawInputProc($paRawInput, $iInputs, $iSizeHeader[, $hDll = 'user32.dll']) ; Parameters ....: $paRawInput - Pointer to an array of $tagRAWINPUT_* structures. ; $iInputs - Number of $tagRAWINPUT_* structures pointed to by paRawInput. ; $iSizeHeader - Size, in bytes, of the $tagRAWINPUTHEADER structure. ; Return values .: Success - 0 ; Failure - Error value ; Author ........: ; Modified ......: ; Remarks .......: ; Related .......: ; Link ..........: http://msdn.microsoft.com/en-us/library/ms645594%28VS.85%29.aspx ; Example .......: ; =============================================================================================================================== Func _DefRawInputProc($paRawInput, $iInputs, $iSizeHeader, $hDll = 'user32.dll') Local $aRet $aRet = DllCall($hDll, 'lresult', 'DefRawInputProc', 'ptr', $paRawInput, 'int', $iInputs, 'uint', $iSizeHeader) If @error Or $aRet[0] <> 0 Then Return SetError(1, 0, $aRet[0]) Return $aRet[0] EndFunc ; #FUNCTION# ==================================================================================================================== ; Name ..........: _GetRawInputBuffer ; Description ...: Does a buffered read of the raw input data. ; Syntax ........: _GetRawInputBuffer($pData, ByRef $iSize, $iSizeHeader[, $hDll = 'user32.dll']) ; Parameters ....: $pData - Pointer to a buffer of $tagRAWINPUT_* structures that contain the raw input data. If NULL, the minimum ; +required buffer, in bytes, is returned in $iSize. ; $iSize - A variable that specifies the size, in bytes, of a $tagRAWINPUT_* structure. ; $iSizeHeader - Size, in bytes, of the $tagRAWINPUTHEADER structure. ; Return values .: Success - If pData is NULL and the function is successful, the return value is zero. If pData is not NULL and ; +the function is successful, the return value is the number of $tagRAWINPUT_* structures written to pData. ; Failure - Sets @error to 1 and returns $__UINT_ERROR. Call _WinAPI_GetLastError for the error code. ; Author ........: ; Modified ......: ; Remarks .......: ; Related .......: ; Link ..........: http://msdn.microsoft.com/en-us/library/ms645595%28VS.85%29.aspx ; Example .......: ; =============================================================================================================================== Func _GetRawInputBuffer($pData, ByRef $iSize, $iSizeHeader, $hDll = 'user32.dll') Local $aRet $aRet = DllCall($hDll, 'uint', 'GetRawInputBuffer', 'ptr', $pData, 'uint*', $iSize, 'uint', $iSizeHeader) If @error Then Return SetError(1, 0, $aRet[0]) $iSize = $aRet[2] Return $aRet[0] EndFunc ; #FUNCTION# ==================================================================================================================== ; Name ..........: _GetRawInputData ; Description ...: Gets the raw input from the specified device. ; Syntax ........: _GetRawInputData($hRawInput, $iCommand, $pData, ByRef $iSize, $iSizeHeader[, $hDll = 'user32.dll']) ; Parameters ....: $hRawInput - Handle to the $tagRAWINPUT_* structure. This comes from the lParam in $WM_INPUT. ; $iCommand - Command flag. This parameter can be one of the following values. ; |$RID_INPUT - Get the raw data from the $tagRAWINPUT_* structure. ; |$RID_HEADER - Get the header information from the $tagRAWINPUT_* structure. ; $pData - Pointer to the data that comes from the $tagRAWINPUT_* structure. This depends on the value ; +of $iCommand. If pData is NULL, the required size of the buffer is returned in $iSize. ; $iSize - A variable that specifies the size, in bytes, of the data in pData. ; $iSizeHeader - Size, in bytes, of the $tagRAWINPUTHEADER structure. ; Return values .: Success - If pData is NULL and the function is successful, the return value is zero. If pData is not NULL and ; +the function is successful, the return value is the number of bytes copied into pData. ; Failure Sets error to 1 and returns $__UINT_ERROR. ; Author ........: ; Modified ......: ; Remarks .......: GetRawInputData gets the raw input one $tagRAWINPUT_* structure at a time. In contrast, _GetRawInputBuffer ; +gets an array of $tagRAWINPUT_* structures. ; Related .......: _GetRawInputBuffer ; Link ..........: http://msdn.microsoft.com/en-us/library/ms645596%28VS.85%29.aspx ; Example .......: ; =============================================================================================================================== 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] = $__UINT_ERROR Then Return SetError(1, 0, $aRet[0]) $iSize = $aRet[4] Return $aRet[0] EndFunc ; #FUNCTION# ==================================================================================================================== ; Name ..........: _GetRawInputDeviceInfo ; Description ...: Gets information about the raw input device. ; Syntax ........: _GetRawInputDeviceInfo($hDevice, $iCommand, $pData, ByRef $iSize[, $hDll = 'user32.dll']) ; Parameters ....: $hDevice - Handle to the raw input device. This comes from the lParam of the $WM_INPUT message, from ; +hDevice member of $tagRAWINPUTHEADER, or from _GetRawInputDeviceList. It can also be NULL if an application ; +inserts input data, for example, by using SendInput. ; $iCommand - Specifies what data will be returned in pData. It can be one of the following values. ; |$RIDI_PREPARSEDDATA - pData points to the previously parsed data. ; |$RIDI_DEVICENAME - pData points to a string that contains the device name.For this $iCommand only, ; +the value in $iSize is the character count (not the byte count). ; |$RIDI_DEVICEINFO - pData points to an $tagRIDDEVICEINFO_* structure. ; $pData - Pointer to a buffer that contains the information specified by $iCommand. If $iCommand is ; +$RIDI_DEVICEINFO, set cbSize member of $tagRIDDEVICEINFO_* to DllStructGetSize($tagRIDDEVICEINFO_*) before calling ; +_GetRawInputDeviceInfo. ; $iSize - A variable that contains the size, in bytes, of the data in pData ; Return values .: Success - If successful, this function returns a non-negative number indicating the number of bytes copied to ; +pData. If pData is not large enough for the data, the function returns $__ERROR_MORE_DATA. If pData is NULL, ; +the function returns a value of zero. In both of these cases, $iSize is set to the minimum size required for ; +the pData buffer. ; Failure - Sets @error to 1 and returns 0. Call _WinAPI_GetLastError to identify any other errors. ; Author ........: ; Modified ......: ; Remarks .......: ; Related .......: ; Link ..........: http://msdn.microsoft.com/en-us/library/ms645597%28VS.85%29.aspx ; Example .......: ; =============================================================================================================================== Func _GetRawInputDeviceInfo($hDevice, $iCommand, $pData, ByRef $iSize, $hDll = 'user32.dll') Local $aRet $aRet = DllCall($hDll, 'uint', 'GetRawInputDeviceInfoW', 'hwnd', $hDevice, 'uint', $iCommand, 'ptr', $pData, 'uint*', $iSize) If @error Then Return SetError(1, 0, 0) $iSize = $aRet[4] Return $aRet[0] EndFunc ; #FUNCTION# ==================================================================================================================== ; Name ..........: _GetRawInputDeviceList ; Description ...: Enumerates the raw input devices attached to the system. ; Syntax ........: _GetRawInputDeviceList($pRawInputDeviceList, ByRef $iNumDevices, $iSize[, $hDll = 'user32.dll']) ; Parameters ....: $pRawInputDeviceList - Pointer to buffer that holds an array of $tagRAWINPUTDEVICELIST structures for the ; +devices attached to the system. If NULL, the number of devices are returned in $iNumDevices. ; $iNumDevices - If pRawInputDeviceList is NULL, the function populates this variable with the number of ; +devices attached to the system; otherwise, this variable specifies the number of $tagRAWINPUTDEVICELIST ; +structures that can be contained in the buffer to which $pRawInputDeviceList points. If this value is less ; +than the number of devices attached to the system, the function returns the actual number of devices in this ; +variable and fails with $__ERROR_INSUFFICIENT_BUFFER ; $iSize - Size of a $tagRAWINPUTDEVICELIST structure ; Return values .: Success - Returns the number of devices stored in the buffer pointed to by $pRawInputDeviceList. ; Failure - Sets @error to 1 and returns $__UINT_ERROR. _WinAPI_GetLastError returns the error indication. ; Author ........: ; Modified ......: ; Remarks .......: The devices returned from this function are the mouse, the keyboard, and other Human Interface Device (HID) ; +devices. To get more detailed information about the attached devices, call _GetRawInputDeviceInfo using the ; +hDevice from $tagRAWINPUTDEVICELIST. ; Related .......: _GetRawInputDeviceInfo ; Link ..........: http://msdn.microsoft.com/en-us/library/ms645598%28VS.85%29.aspx ; Example .......: ; =============================================================================================================================== Func _GetRawInputDeviceList($pRawInputDeviceList, ByRef $iNumDevices, $iSize, $hDll = 'user32.dll') Local $aRet $aRet = DllCall($hDll, 'uint', 'GetRawInputDeviceList', 'ptr', $pRawInputDeviceList, 'uint*', $iNumDevices, 'uint', $iSize) If @error Then Return SetError(1, 0, $aRet[0]) $iNumDevices = $aRet[2] Return $aRet[0] EndFunc ; #FUNCTION# ==================================================================================================================== ; Name ..........: _GetRegisteredRawInputDevices ; Description ...: Gets the information about the raw input devices for the current application. ; Syntax ........: _GetRegisteredRawInputDevices($pRawInputDevices, ByRef $iNumDevices, $iSize[, $hDll = 'user32.dll']) ; Parameters ....: $pRawInputDevices - Pointer to an array of $tagRAWINPUTDEVICE structures for the application. ; $iNumDevices - Number of $tagRAWINPUTDEVICE structures in $pRawInputDevices. ; $iSize - Size, in bytes, of a $tagRAWINPUTDEVICE structure ; Return values .: Success - Returns a non-negative number that is the number of $tagRAWINPUTDEVICE structures written to the ; +buffer. If the pRawInputDevices buffer is too small or NULL, the function sets the last error as ; +$__ERROR_INSUFFICIENT_BUFFER, returns $__ERROR_MORE_DATA, and sets $iNumDevices to the required number of devices. ; Failure - Sets @error to 1. For more details, call _WinAPI_GetLastError. ; Author ........: ; Modified ......: ; Remarks .......: To receive raw input from a device, an application must register it by using _RegisterRawInputDevices. ; Related .......: ; Link ..........: http://msdn.microsoft.com/en-us/library/ms645598%28VS.85%29.aspx ; Example .......: ; =============================================================================================================================== Func _GetRegisteredRawInputDevices($pRawInputDevices, ByRef $iNumDevices, $iSize, $hDll = 'user32.dll') Local $aRet $aRet = DllCall($hDll, 'uint', 'GetRegisteredRawInputDevices', 'ptr', $pRawInputDevices, 'uint*', $iNumDevices, 'uint', $iSize) If @error Then SetError(1, 0, 0) $iNumDevices = $aRet[2] Return $aRet[0] EndFunc ; #FUNCTION# ==================================================================================================================== ; Name ..........: _RegisterRawInputDevices ; Description ...: Registers the devices that supply the raw input data. ; Syntax ........: _RegisterRawInputDevices($pRawInputDevices, $iNumDevices, $iSize[, $hDll = 'user32.dll']) ; Parameters ....: $pRawInputDevices - Pointer to an array of $tagRAWINPUTDEVICE structures that represent the devices that ; +supply the raw input. ; $iNumDevices - Number of $tagRAWINPUTDEVICE structures pointed to by $pRawInputDevices. ; $iSize - Size, in bytes, of a $tagRAWINPUTDEVICE structure. ; Return values .: Success - TRUE ; Failure - Sets @error to 1. Call _WinAPI_GetLastError for more information. ; Author ........: ; Modified ......: ; Remarks .......: To receive $WM_INPUT messages, an application must first register the raw input devices using ; +_RegisterRawInputDevices. By default, an application does not receive raw input. If a $tagRAWINPUTDEVICE ; +structure has the $RIDEV_REMOVE flag set and the hwndTarget parameter is not set to NULL, then parameter ; +validation will fail. ; Related .......: ; Link ..........: http://msdn.microsoft.com/en-us/library/ms645600%28VS.85%29.aspx ; Example .......: ; =============================================================================================================================== 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 #EndRegion FUNCTIONS