FFI bindings for Win32 RawInput
							parent
							
								
									cfcd983bb4
								
							
						
					
					
						commit
						f4865e0f9a
					
				| 
						 | 
					@ -2,7 +2,7 @@
 | 
				
			||||||
! See http://factorcode.org/license.txt for BSD license.
 | 
					! See http://factorcode.org/license.txt for BSD license.
 | 
				
			||||||
USING: alien alien.c-types alien.syntax parser namespaces
 | 
					USING: alien alien.c-types alien.syntax parser namespaces
 | 
				
			||||||
kernel math windows.types generalizations math.bitwise
 | 
					kernel math windows.types generalizations math.bitwise
 | 
				
			||||||
classes.struct literals windows.kernel32 ;
 | 
					classes.struct literals windows.kernel32 system accessors ;
 | 
				
			||||||
IN: windows.user32
 | 
					IN: windows.user32
 | 
				
			||||||
 | 
					
 | 
				
			||||||
! HKL for ActivateKeyboardLayout
 | 
					! HKL for ActivateKeyboardLayout
 | 
				
			||||||
| 
						 | 
					@ -608,6 +608,181 @@ CONSTANT: MF_HELP            HEX: 4000
 | 
				
			||||||
CONSTANT: MF_RIGHTJUSTIFY    HEX: 4000
 | 
					CONSTANT: MF_RIGHTJUSTIFY    HEX: 4000
 | 
				
			||||||
CONSTANT: MF_MOUSESELECT     HEX: 8000
 | 
					CONSTANT: MF_MOUSESELECT     HEX: 8000
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					TYPEDEF: HANDLE HRAWINPUT
 | 
				
			||||||
 | 
					: GET_RAWINPUT_CODE_WPARAM ( wParam -- n ) HEX: ff bitand ; inline
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CONSTANT: RIM_INPUT        0
 | 
				
			||||||
 | 
					CONSTANT: RIM_INPUTSINK    1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CONSTANT: RIM_TYPEMOUSE    0
 | 
				
			||||||
 | 
					CONSTANT: RIM_TYPEKEYBOARD 1
 | 
				
			||||||
 | 
					CONSTANT: RIM_TYPEHID      2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					STRUCT: RAWINPUTHEADER
 | 
				
			||||||
 | 
					    { dwType  DWORD  }
 | 
				
			||||||
 | 
					    { dwSize  DWORD  }
 | 
				
			||||||
 | 
					    { hDevice HANDLE }
 | 
				
			||||||
 | 
					    { wParam  WPARAM } ;
 | 
				
			||||||
 | 
					TYPEDEF: RAWINPUTHEADER* PRAWINPUTHEADER
 | 
				
			||||||
 | 
					TYPEDEF: RAWINPUTHEADER* LPRAWINPUTHEADER
 | 
				
			||||||
 | 
					STRUCT: RAWMOUSE_BUTTONS_USBUTTONS
 | 
				
			||||||
 | 
					    { usButtonFlags USHORT }
 | 
				
			||||||
 | 
					    { usButtonData  USHORT } ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					UNION-STRUCT: RAWMOUSE_BUTTONS
 | 
				
			||||||
 | 
					    { ulButtons ULONG                      }
 | 
				
			||||||
 | 
					    { usButtons RAWMOUSE_BUTTONS_USBUTTONS } ;
 | 
				
			||||||
 | 
					STRUCT: RAWMOUSE
 | 
				
			||||||
 | 
					    { usFlags            USHORT            }
 | 
				
			||||||
 | 
					    { uButtons           RAWMOUSE_BUTTONS  }
 | 
				
			||||||
 | 
					    { ulRawButtons       ULONG             }
 | 
				
			||||||
 | 
					    { lLastX             LONG              }
 | 
				
			||||||
 | 
					    { lLastY             LONG              }
 | 
				
			||||||
 | 
					    { ulExtraInformation ULONG             } ;
 | 
				
			||||||
 | 
					TYPEDEF: RAWMOUSE* PRAWMOUSE
 | 
				
			||||||
 | 
					TYPEDEF: RAWMOUSE* LPRAWMOUSE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CONSTANT: RI_MOUSE_LEFT_BUTTON_DOWN   HEX: 0001
 | 
				
			||||||
 | 
					CONSTANT: RI_MOUSE_LEFT_BUTTON_UP     HEX: 0002
 | 
				
			||||||
 | 
					CONSTANT: RI_MOUSE_RIGHT_BUTTON_DOWN  HEX: 0004
 | 
				
			||||||
 | 
					CONSTANT: RI_MOUSE_RIGHT_BUTTON_UP    HEX: 0008
 | 
				
			||||||
 | 
					CONSTANT: RI_MOUSE_MIDDLE_BUTTON_DOWN HEX: 0010
 | 
				
			||||||
 | 
					CONSTANT: RI_MOUSE_MIDDLE_BUTTON_UP   HEX: 0020
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					: RI_MOUSE_BUTTON_1_DOWN      ( -- n ) RI_MOUSE_LEFT_BUTTON_DOWN ; inline
 | 
				
			||||||
 | 
					: RI_MOUSE_BUTTON_1_UP        ( -- n ) RI_MOUSE_LEFT_BUTTON_UP ; inline
 | 
				
			||||||
 | 
					: RI_MOUSE_BUTTON_2_DOWN      ( -- n ) RI_MOUSE_RIGHT_BUTTON_DOWN ; inline
 | 
				
			||||||
 | 
					: RI_MOUSE_BUTTON_2_UP        ( -- n ) RI_MOUSE_RIGHT_BUTTON_UP ; inline
 | 
				
			||||||
 | 
					: RI_MOUSE_BUTTON_3_DOWN      ( -- n ) RI_MOUSE_MIDDLE_BUTTON_DOWN ; inline
 | 
				
			||||||
 | 
					: RI_MOUSE_BUTTON_3_UP        ( -- n ) RI_MOUSE_MIDDLE_BUTTON_UP ; inline
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CONSTANT: RI_MOUSE_BUTTON_4_DOWN      HEX: 0040
 | 
				
			||||||
 | 
					CONSTANT: RI_MOUSE_BUTTON_4_UP        HEX: 0080
 | 
				
			||||||
 | 
					CONSTANT: RI_MOUSE_BUTTON_5_DOWN      HEX: 0100
 | 
				
			||||||
 | 
					CONSTANT: RI_MOUSE_BUTTON_5_UP        HEX: 0200
 | 
				
			||||||
 | 
					CONSTANT: RI_MOUSE_WHEEL              HEX: 0400
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CONSTANT: MOUSE_MOVE_RELATIVE      0
 | 
				
			||||||
 | 
					CONSTANT: MOUSE_MOVE_ABSOLUTE      1
 | 
				
			||||||
 | 
					CONSTANT: MOUSE_VIRTUAL_DESKTOP    HEX: 02
 | 
				
			||||||
 | 
					CONSTANT: MOUSE_ATTRIBUTES_CHANGED HEX: 04
 | 
				
			||||||
 | 
					CONSTANT: MOUSE_MOVE_NOCOALESCE    HEX: 08
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					STRUCT: RAWKEYBOARD
 | 
				
			||||||
 | 
					    { MakeCode         USHORT }
 | 
				
			||||||
 | 
					    { Flags            USHORT }
 | 
				
			||||||
 | 
					    { Reserved         USHORT }
 | 
				
			||||||
 | 
					    { VKey             USHORT }
 | 
				
			||||||
 | 
					    { Message          UINT   }
 | 
				
			||||||
 | 
					    { ExtraInformation ULONG  } ;
 | 
				
			||||||
 | 
					TYPEDEF: RAWKEYBOARD* PRAWKEYBOARD
 | 
				
			||||||
 | 
					TYPEDEF: RAWKEYBOARD* LPRAWKEYBOARD
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CONSTANT: KEYBOARD_OVERRUN_MAKE_CODE    HEX: FF
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CONSTANT: RI_KEY_MAKE             0
 | 
				
			||||||
 | 
					CONSTANT: RI_KEY_BREAK            1
 | 
				
			||||||
 | 
					CONSTANT: RI_KEY_E0               2
 | 
				
			||||||
 | 
					CONSTANT: RI_KEY_E1               4
 | 
				
			||||||
 | 
					CONSTANT: RI_KEY_TERMSRV_SET_LED  8
 | 
				
			||||||
 | 
					CONSTANT: RI_KEY_TERMSRV_SHADOW   HEX: 10
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					STRUCT: RAWHID
 | 
				
			||||||
 | 
					    { dwSizeHid DWORD   }
 | 
				
			||||||
 | 
					    { dwCount   DWORD   }
 | 
				
			||||||
 | 
					    { bRawData  BYTE[1] } ;
 | 
				
			||||||
 | 
					TYPEDEF: RAWHID* PRAWHID
 | 
				
			||||||
 | 
					TYPEDEF: RAWHID* LPRAWHID
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					UNION-STRUCT: RAWINPUT_UNION
 | 
				
			||||||
 | 
					    { mouse    RAWMOUSE }
 | 
				
			||||||
 | 
					    { keyboard RAWKEYBOARD }
 | 
				
			||||||
 | 
					    { hid      RAWHID } ;
 | 
				
			||||||
 | 
					STRUCT: RAWINPUT
 | 
				
			||||||
 | 
					    { header RAWINPUTHEADER }
 | 
				
			||||||
 | 
					    { data   RAWINPUT_UNION } ;
 | 
				
			||||||
 | 
					TYPEDEF: RAWINPUT* PRAWINPUT
 | 
				
			||||||
 | 
					TYPEDEF: RAWINPUT* LPRAWINPUT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					: RAWINPUT_ALIGN ( x -- y )
 | 
				
			||||||
 | 
					    cpu x86.32 = [ 4 ] [ 8 ] if align ; inline
 | 
				
			||||||
 | 
					: NEXTRAWINPUTBLOCK ( struct -- next-struct )
 | 
				
			||||||
 | 
					    dup header>> dwSize>> swap <displaced-alien> RAWINPUT_ALIGN RAWINPUT memory>struct ; inline
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CONSTANT: RID_INPUT               HEX: 10000003
 | 
				
			||||||
 | 
					CONSTANT: RID_HEADER              HEX: 10000005
 | 
				
			||||||
 | 
					CONSTANT: RIDI_PREPARSEDDATA      HEX: 20000005
 | 
				
			||||||
 | 
					CONSTANT: RIDI_DEVICENAME         HEX: 20000007
 | 
				
			||||||
 | 
					CONSTANT: RIDI_DEVICEINFO         HEX: 2000000b
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					STRUCT: RID_DEVICE_INFO_MOUSE
 | 
				
			||||||
 | 
					    { dwId                 DWORD }
 | 
				
			||||||
 | 
					    { dwNumberOfButtons    DWORD }
 | 
				
			||||||
 | 
					    { dwSampleRate         DWORD }
 | 
				
			||||||
 | 
					    { fHasHorizontalWheel  BOOL  } ;
 | 
				
			||||||
 | 
					TYPEDEF: RID_DEVICE_INFO_MOUSE* PRID_DEVICE_INFO_MOUSE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					STRUCT: RID_DEVICE_INFO_KEYBOARD
 | 
				
			||||||
 | 
					    { dwType                 DWORD }
 | 
				
			||||||
 | 
					    { dwSubType              DWORD }
 | 
				
			||||||
 | 
					    { dwKeyboardMode         DWORD }
 | 
				
			||||||
 | 
					    { dwNumberOfFunctionKeys DWORD }
 | 
				
			||||||
 | 
					    { dwNumberOfIndicators   DWORD }
 | 
				
			||||||
 | 
					    { dwNumberOfKeysTotal    DWORD } ;
 | 
				
			||||||
 | 
					TYPEDEF: RID_DEVICE_INFO_KEYBOARD* PRID_DEVICE_INFO_KEYBOARD
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					STRUCT: RID_DEVICE_INFO_HID
 | 
				
			||||||
 | 
					    { dwVendorId      DWORD  }
 | 
				
			||||||
 | 
					    { dwProductId     DWORD  }
 | 
				
			||||||
 | 
					    { dwVersionNumber DWORD  }
 | 
				
			||||||
 | 
					    { usUsagePage     USHORT }
 | 
				
			||||||
 | 
					    { usUsage         USHORT } ;
 | 
				
			||||||
 | 
					TYPEDEF: RID_DEVICE_INFO_HID* PRID_DEVICE_INFO_HID
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					UNION-STRUCT: RID_DEVICE_INFO_UNION
 | 
				
			||||||
 | 
					    { mouse    RID_DEVICE_INFO_MOUSE    }
 | 
				
			||||||
 | 
					    { keyboard RID_DEVICE_INFO_KEYBOARD }
 | 
				
			||||||
 | 
					    { hid      RID_DEVICE_INFO_HID      } ;
 | 
				
			||||||
 | 
					STRUCT: RID_DEVICE_INFO
 | 
				
			||||||
 | 
					    { cbSize DWORD                 }
 | 
				
			||||||
 | 
					    { dwType DWORD                 }
 | 
				
			||||||
 | 
					    { data   RID_DEVICE_INFO_UNION } ;
 | 
				
			||||||
 | 
					TYPEDEF: RID_DEVICE_INFO* PRID_DEVICE_INFO
 | 
				
			||||||
 | 
					TYPEDEF: RID_DEVICE_INFO* LPRID_DEVICE_INFO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					STRUCT: RAWINPUTDEVICE
 | 
				
			||||||
 | 
					    { usUsagePage USHORT }
 | 
				
			||||||
 | 
					    { usUsage     USHORT }
 | 
				
			||||||
 | 
					    { dwFlags     DWORD  }
 | 
				
			||||||
 | 
					    { hwndTarget  HWND   } ;
 | 
				
			||||||
 | 
					TYPEDEF: RAWINPUTDEVICE* PRAWINPUTDEVICE
 | 
				
			||||||
 | 
					TYPEDEF: RAWINPUTDEVICE* LPRAWINPUTDEVICE
 | 
				
			||||||
 | 
					TYPEDEF: RAWINPUTDEVICE* PCRAWINPUTDEVICE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CONSTANT: RIDEV_REMOVE            HEX: 00000001
 | 
				
			||||||
 | 
					CONSTANT: RIDEV_EXCLUDE           HEX: 00000010
 | 
				
			||||||
 | 
					CONSTANT: RIDEV_PAGEONLY          HEX: 00000020
 | 
				
			||||||
 | 
					CONSTANT: RIDEV_NOLEGACY          HEX: 00000030
 | 
				
			||||||
 | 
					CONSTANT: RIDEV_INPUTSINK         HEX: 00000100
 | 
				
			||||||
 | 
					CONSTANT: RIDEV_CAPTUREMOUSE      HEX: 00000200
 | 
				
			||||||
 | 
					CONSTANT: RIDEV_NOHOTKEYS         HEX: 00000200
 | 
				
			||||||
 | 
					CONSTANT: RIDEV_APPKEYS           HEX: 00000400
 | 
				
			||||||
 | 
					CONSTANT: RIDEV_EXINPUTSINK       HEX: 00001000
 | 
				
			||||||
 | 
					CONSTANT: RIDEV_DEVNOTIFY         HEX: 00002000
 | 
				
			||||||
 | 
					CONSTANT: RIDEV_EXMODEMASK        HEX: 000000F0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					: RIDEV_EXMODE ( mode -- x ) RIDEV_EXMODEMASK bitand ; inline
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CONSTANT: GIDC_ARRIVAL             1
 | 
				
			||||||
 | 
					CONSTANT: GIDC_REMOVAL             2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					: GET_DEVICE_CHANGE_WPARAM ( wParam -- x ) HEX: ffff bitand ; inline
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					STRUCT: RAWINPUTDEVICELIST
 | 
				
			||||||
 | 
					    { hDevice HANDLE }
 | 
				
			||||||
 | 
					    { dwType  DWORD  } ;
 | 
				
			||||||
 | 
					TYPEDEF: RAWINPUTDEVICELIST* PRAWINPUTDEVICELIST
 | 
				
			||||||
 | 
					
 | 
				
			||||||
LIBRARY: user32
 | 
					LIBRARY: user32
 | 
				
			||||||
 | 
					
 | 
				
			||||||
FUNCTION: HKL ActivateKeyboardLayout ( HKL hkl, UINT Flags ) ;
 | 
					FUNCTION: HKL ActivateKeyboardLayout ( HKL hkl, UINT Flags ) ;
 | 
				
			||||||
| 
						 | 
					@ -775,7 +950,7 @@ ALIAS: CreateWindowEx CreateWindowExW
 | 
				
			||||||
! FUNCTION: DefFrameProcW
 | 
					! FUNCTION: DefFrameProcW
 | 
				
			||||||
! FUNCTION: DefMDIChildProcA
 | 
					! FUNCTION: DefMDIChildProcA
 | 
				
			||||||
! FUNCTION: DefMDIChildProcW
 | 
					! FUNCTION: DefMDIChildProcW
 | 
				
			||||||
! FUNCTION: DefRawInputProc
 | 
					FUNCTION: LRESULT DefRawInputProc ( PRAWINPUT* paRawInput, INT nInput, UINT cbSizeHeader ) ;
 | 
				
			||||||
FUNCTION: LRESULT DefWindowProcW ( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam ) ;
 | 
					FUNCTION: LRESULT DefWindowProcW ( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam ) ;
 | 
				
			||||||
ALIAS: DefWindowProc DefWindowProcW
 | 
					ALIAS: DefWindowProc DefWindowProcW
 | 
				
			||||||
! FUNCTION: DeleteMenu
 | 
					! FUNCTION: DeleteMenu
 | 
				
			||||||
| 
						 | 
					@ -985,13 +1160,14 @@ FUNCTION: int GetPriorityClipboardFormat ( UINT* paFormatPriorityList, int cForm
 | 
				
			||||||
! FUNCTION: GetPropA
 | 
					! FUNCTION: GetPropA
 | 
				
			||||||
! FUNCTION: GetPropW
 | 
					! FUNCTION: GetPropW
 | 
				
			||||||
! FUNCTION: GetQueueStatus
 | 
					! FUNCTION: GetQueueStatus
 | 
				
			||||||
! FUNCTION: GetRawInputBuffer
 | 
					FUNCTION: UINT GetRawInputBuffer ( PRAWINPUT pData, PUINT pcbSize, UINT cbSizeHeader ) ;
 | 
				
			||||||
! FUNCTION: GetRawInputData
 | 
					FUNCTION: UINT GetRawInputData ( HRAWINPUT hRawInput, UINT uiCommand, LPVOID pData, PUINT pcbSize, UINT cbSizeHeader ) ;
 | 
				
			||||||
! FUNCTION: GetRawInputDeviceInfoA
 | 
					FUNCTION: UINT GetRawInputDeviceInfoA ( HANDLE hDevice, UINT uiCommand, LPVOID pData, PUINT pcbSize ) ;
 | 
				
			||||||
! FUNCTION: GetRawInputDeviceInfoW
 | 
					FUNCTION: UINT GetRawInputDeviceInfoW ( HANDLE hDevice, UINT uiCommand, LPVOID pData, PUINT pcbSize ) ;
 | 
				
			||||||
! FUNCTION: GetRawInputDeviceList
 | 
					ALIAS: GetRawInputDeviceInfo GetRawInputDeviceInfoW
 | 
				
			||||||
 | 
					FUNCTION: UINT GetRawInputDeviceList ( PRAWINPUTDEVICELIST pRawInputDeviceList, PUINT puiNumDevices, UINT cbSize ) ;
 | 
				
			||||||
 | 
					FUNCTION: UINT GetRegisteredRawInputDevices ( PRAWINPUTDEVICE pRawInputDevices, PUINT puiNumDevices, UINT cbSize ) ;
 | 
				
			||||||
! FUNCTION: GetReasonTitleFromReasonCode
 | 
					! FUNCTION: GetReasonTitleFromReasonCode
 | 
				
			||||||
! FUNCTION: GetRegisteredRawInputDevices
 | 
					 | 
				
			||||||
! FUNCTION: GetScrollBarInfo
 | 
					! FUNCTION: GetScrollBarInfo
 | 
				
			||||||
! FUNCTION: GetScrollInfo
 | 
					! FUNCTION: GetScrollInfo
 | 
				
			||||||
! FUNCTION: GetScrollPos
 | 
					! FUNCTION: GetScrollPos
 | 
				
			||||||
| 
						 | 
					@ -1266,7 +1442,7 @@ ALIAS: RegisterDeviceNotification RegisterDeviceNotificationW
 | 
				
			||||||
! FUNCTION: RegisterHotKey
 | 
					! FUNCTION: RegisterHotKey
 | 
				
			||||||
! FUNCTION: RegisterLogonProcess
 | 
					! FUNCTION: RegisterLogonProcess
 | 
				
			||||||
! FUNCTION: RegisterMessagePumpHook
 | 
					! FUNCTION: RegisterMessagePumpHook
 | 
				
			||||||
! FUNCTION: RegisterRawInputDevices
 | 
					FUNCTION: BOOL RegisterRawInputDevices ( PCRAWINPUTDEVICE pRawInputDevices, UINT uiNumDevices, UINT cbSize ) ;
 | 
				
			||||||
! FUNCTION: RegisterServicesProcess
 | 
					! FUNCTION: RegisterServicesProcess
 | 
				
			||||||
! FUNCTION: RegisterShellHookWindow
 | 
					! FUNCTION: RegisterShellHookWindow
 | 
				
			||||||
! FUNCTION: RegisterSystemThread
 | 
					! FUNCTION: RegisterSystemThread
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue