Code: Alles auswählen
#DIRECTINPUT_VERSION = $0800
#DI_OK = #S_OK
#DISCL_EXCLUSIVE = $00000001
#DISCL_NONEXCLUSIVE = $00000002
#DISCL_FOREGROUND = $00000004
#DISCL_BACKGROUND = $00000008
;{ DIK-Constants (DirectInput-Key)
#DIK_ESCAPE = $01
#DIK_1 = $02
#DIK_2 = $03
#DIK_3 = $04
#DIK_4 = $05
#DIK_5 = $06
#DIK_6 = $07
#DIK_7 = $08
#DIK_8 = $09
#DIK_9 = $0A
#DIK_0 = $0B
#DIK_MINUS = $0C ; - on main keyboard
#DIK_EQUALS = $0D
#DIK_BACK = $0E ; backspace
#DIK_TAB = $0F
#DIK_Q = $10
#DIK_W = $11
#DIK_E = $12
#DIK_R = $13
#DIK_T = $14
#DIK_Y = $15
#DIK_U = $16
#DIK_I = $17
#DIK_O = $18
#DIK_P = $19
#DIK_LBRACKET = $1A
#DIK_RBRACKET = $1B
#DIK_RETURN = $1C ; Enter on main keyboard
#DIK_LCONTROL = $1D
#DIK_A = $1E
#DIK_S = $1F
#DIK_D = $20
#DIK_F = $21
#DIK_G = $22
#DIK_H = $23
#DIK_J = $24
#DIK_K = $25
#DIK_L = $26
#DIK_SEMICOLON = $27
#DIK_APOSTROPHE = $28
#DIK_GRAVE = $29 ; accent GRAVE
#DIK_LSHIFT = $2A
#DIK_BACKSLASH = $2B
#DIK_Z = $2C
#DIK_X = $2D
#DIK_C = $2E
#DIK_V = $2F
#DIK_B = $30
#DIK_N = $31
#DIK_M = $32
#DIK_COMMA = $33
#DIK_PERIOD = $34 ; . on main keyboard
#DIK_SLASH = $35 ; / on main keyboard
#DIK_RSHIFT = $36
#DIK_MULTIPLY = $37 ; * on numeric keypad
#DIK_LMENU = $38 ; left Alt
#DIK_SPACE = $39
#DIK_CAPITAL = $3A
#DIK_F1 = $3B
#DIK_F2 = $3C
#DIK_F3 = $3D
#DIK_F4 = $3E
#DIK_F5 = $3F
#DIK_F6 = $40
#DIK_F7 = $41
#DIK_F8 = $42
#DIK_F9 = $43
#DIK_F10 = $44
#DIK_NUMLOCK = $45
#DIK_SCROLL = $46 ; Scroll Lock
#DIK_NUMPAD7 = $47
#DIK_NUMPAD8 = $48
#DIK_NUMPAD9 = $49
#DIK_SUBTRACT = $4A ; - on numeric keypad
#DIK_NUMPAD4 = $4B
#DIK_NUMPAD5 = $4C
#DIK_NUMPAD6 = $4D
#DIK_ADD = $4E ; + on numeric keypad
#DIK_NUMPAD1 = $4F
#DIK_NUMPAD2 = $50
#DIK_NUMPAD3 = $51
#DIK_NUMPAD0 = $52
#DIK_DECIMAL = $53 ; . on numeric keypad
#DIK_OEM_102 = $56 ; < > | on UK/Germany keyboards
#DIK_F11 = $57
#DIK_F12 = $58
#DIK_F13 = $64 ; (NEC PC98)
#DIK_F14 = $65 ; (NEC PC98)
#DIK_F15 = $66 ; (NEC PC98)
#DIK_KANA = $70 ; (Japanese keyboard)
#DIK_ABNT_C1 = $73 ; / ? on Portugese (Brazilian) keyboards
#DIK_CONVERT = $79 ; (Japanese keyboard)
#DIK_NOCONVERT = $7B ; (Japanese keyboard)
#DIK_YEN = $7D ; (Japanese keyboard)
#DIK_ABNT_C2 = $7E ; Numpad . on Portugese (Brazilian) keyboards
#DIK_NUMPADEQUALS = $8D ; = on numeric keypad (NEC PC98)
#DIK_PREVTRACK = $90 ; Previous Track (DIK_CIRCUMFLEX on Japanese keyboard)
#DIK_AT = $91 ; (NEC PC98)
#DIK_COLON = $92 ; (NEC PC98)
#DIK_UNDERLINE = $93 ; (NEC PC98)
#DIK_KANJI = $94 ; (Japanese keyboard)
#DIK_STOP = $95 ; (NEC PC98)
#DIK_AX = $96 ; (Japan AX)
#DIK_UNLABELED = $97 ; (J3100)
#DIK_NEXTTRACK = $99 ; Next Track
#DIK_NUMPADENTER = $9C ; Enter on numeric keypad
#DIK_RCONTROL = $9D
#DIK_MUTE = $A0 ; Mute
#DIK_CALCULATOR = $A1 ; Calculator
#DIK_PLAYPAUSE = $A2 ; Play / Pause
#DIK_MEDIASTOP = $A4 ; Media Stop
#DIK_VOLUMEDOWN = $AE ; Volume -
#DIK_VOLUMEUP = $B0 ; Volume +
#DIK_WEBHOME = $B2 ; Web home
#DIK_NUMPADCOMMA = $B3 ; , on numeric keypad (NEC PC98)
#DIK_DIVIDE = $B5 ; / on numeric keypad
#DIK_SYSRQ = $B7
#DIK_RMENU = $B8 ; right Alt
#DIK_PAUSE = $C5 ; Pause
#DIK_HOME = $C7 ; home on arrow keypad
#DIK_UP = $C8 ; UpArrow on arrow keypad
#DIK_PRIOR = $C9 ; PgUp on arrow keypad
#DIK_LEFT = $CB ; LeftArrow on arrow keypad
#DIK_RIGHT = $CD ; RightArrow on arrow keypad
#DIK_END = $CF ; End on arrow keypad
#DIK_DOWN = $D0 ; DownArrow on arrow keypad
#DIK_NEXT = $D1 ; PgDn on arrow keypad
#DIK_INSERT = $D2 ; Insert on arrow keypad
#DIK_DELETE = $D3 ; Delete on arrow keypad
#DIK_LWIN = $DB ; left windows key
#DIK_RWIN = $DC ; right windows key
#DIK_APPS = $DD ; AppMenu key
#DIK_POWER = $DE ; System Power
#DIK_SLEEP = $DF ; System Sleep
#DIK_WAKE = $E3 ; System Wake
#DIK_WEBSEARCH = $E5 ; Web Search
#DIK_WEBFAVORITES = $E6 ; Web Favorites
#DIK_WEBREFRESH = $E7 ; Web Refresh
#DIK_WEBSTOP = $E8 ; Web Stop
#DIK_WEBFORWARD = $E9 ; Web Forward
#DIK_WEBBACK = $EA ; Web Back
#DIK_MYCOMPUTER = $EB ; My Computer
#DIK_MAIL = $EC ; Mail
#DIK_MEDIASELECT = $ED ; Media Select
; Alternate names For keys, To facilitate transition from DOS.
#DIK_BACKSPACE = #DIK_BACK ; backspace
#DIK_NUMPADSTAR = #DIK_MULTIPLY ; * on numeric keypad
#DIK_LALT = #DIK_LMENU ; left Alt
#DIK_CAPSLOCK = #DIK_CAPITAL ; CapsLock
#DIK_NUMPADMINUS = #DIK_SUBTRACT ; - on numeric keypad
#DIK_NUMPADPLUS = #DIK_ADD ; + on numeric keypad
#DIK_NUMPADPERIOD = #DIK_DECIMAL ; . on numeric keypad
#DIK_NUMPADSLASH = #DIK_DIVIDE ; / on numeric keypad
#DIK_RALT = #DIK_RMENU ; right Alt
#DIK_UPARROW = #DIK_UP ; UpArrow on arrow keypad
#DIK_PGUP = #DIK_PRIOR ; PgUp on arrow keypad
#DIK_LEFTARROW = #DIK_LEFT ; LeftArrow on arrow keypad
#DIK_RIGHTARROW = #DIK_RIGHT ; RightArrow on arrow keypad
#DIK_DOWNARROW = #DIK_DOWN ; DownArrow on arrow keypad
#DIK_PGDN = #DIK_NEXT ; PgDn on arrow keypad
; Alternate names For keys originally not used on US keyboards.
#DIK_CIRCUMFLEX = #DIK_PREVTRACK ; Japanese keyboard
;}
;{ DIDFT-Constants
#DIDFT_ALL = $00000000
#DIDFT_RELAXIS = $00000001
#DIDFT_ABSAXIS = $00000002
#DIDFT_AXIS = $00000003
#DIDFT_PSHBUTTON = $00000004
#DIDFT_TGLBUTTON = $00000008
#DIDFT_BUTTON = $0000000C
#DIDFT_POV = $00000010
#DIDFT_COLLECTION = $00000040
#DIDFT_NODATA = $00000080
#DIDFT_ANYINSTANCE = $00FFFF00
#DIDFT_INSTANCEMASK = #DIDFT_ANYINSTANCE
;#DIDFT_MAKEINSTANCE(n) = ((WORD)(n) << 8)
;#DIDFT_GETTYPE(n) = LOBYTE(n)
;#DIDFT_GETINSTANCE(n) = LOWORD((n) >> 8)
#DIDFT_FFACTUATOR = $01000000
#DIDFT_FFEFFECTTRIGGER = $02000000
#DIDFT_OUTPUT = $10000000
;#DIDFT_ENUMCOLLECTION(n) = ((WORD)(n) << 8)
#DIDFT_NOCOLLECTION = $00FFFF00
#DIDFT_OPTIONAL = $80000000 ;}
#DIDF_ABSAXIS = $00000001
#DIDF_RELAXIS = $00000002
#DIGDD_PEEK = $00000001
Procedure DEFINE_GUID(*p.GUID, Data1.l, Data2.w, Data3.w, Data4_1.b, Data4_2.b, Data4_3.b, Data4_4.b, Data4_5.b, Data4_6.b, Data4_7.b, Data4_8.b)
*p\Data1 = Data1
*p\Data2 = Data2
*p\Data3 = Data3
*p\Data4[0] = Data4_1
*p\Data4[1] = Data4_2
*p\Data4[2] = Data4_3
*p\Data4[3] = Data4_4
*p\Data4[4] = Data4_5
*p\Data4[5] = Data4_6
*p\Data4[6] = Data4_7
*p\Data4[7] = Data4_8
EndProcedure
DefType.GUID ;{
DEFINE_GUID(CLSID_DirectInput,$25E609E0,$B259,$11CF,$BF,$C7,$44,$45,$53,$54,$00,$00);
DEFINE_GUID(CLSID_DirectInputDevice,$25E609E1,$B259,$11CF,$BF,$C7,$44,$45,$53,$54,$00,$00);
DEFINE_GUID(CLSID_DirectInput8,$25E609E4,$B259,$11CF,$BF,$C7,$44,$45,$53,$54,$00,$00);
DEFINE_GUID(CLSID_DirectInputDevice8,$25E609E5,$B259,$11CF,$BF,$C7,$44,$45,$53,$54,$00,$00);
; Interfaces
DEFINE_GUID(IID_IDirectInputA,$89521360,$AA8A,$11CF,$BF,$C7,$44,$45,$53,$54,$00,$00);
DEFINE_GUID(IID_IDirectInputW,$89521361,$AA8A,$11CF,$BF,$C7,$44,$45,$53,$54,$00,$00);
DEFINE_GUID(IID_IDirectInput2A,$5944E662,$AA8A,$11CF,$BF,$C7,$44,$45,$53,$54,$00,$00);
DEFINE_GUID(IID_IDirectInput2W,$5944E663,$AA8A,$11CF,$BF,$C7,$44,$45,$53,$54,$00,$00);
DEFINE_GUID(IID_IDirectInput7A,$9A4CB684,$236D,$11D3,$8E,$9D,$00,$C0,$4F,$68,$44,$AE);
DEFINE_GUID(IID_IDirectInput7W,$9A4CB685,$236D,$11D3,$8E,$9D,$00,$C0,$4F,$68,$44,$AE);
DEFINE_GUID(IID_IDirectInput8A,$BF798030,$483A,$4DA2,$AA,$99,$5D,$64,$ED,$36,$97,$00);
DEFINE_GUID(IID_IDirectInput8W,$BF798031,$483A,$4DA2,$AA,$99,$5D,$64,$ED,$36,$97,$00);
DEFINE_GUID(IID_IDirectInputDeviceA,$5944E680,$C92E,$11CF,$BF,$C7,$44,$45,$53,$54,$00,$00);
DEFINE_GUID(IID_IDirectInputDeviceW,$5944E681,$C92E,$11CF,$BF,$C7,$44,$45,$53,$54,$00,$00);
DEFINE_GUID(IID_IDirectInputDevice2A,$5944E682,$C92E,$11CF,$BF,$C7,$44,$45,$53,$54,$00,$00);
DEFINE_GUID(IID_IDirectInputDevice2W,$5944E683,$C92E,$11CF,$BF,$C7,$44,$45,$53,$54,$00,$00);
DEFINE_GUID(IID_IDirectInputDevice7A,$57D7C6BC,$2356,$11D3,$8E,$9D,$00,$C0,$4F,$68,$44,$AE);
DEFINE_GUID(IID_IDirectInputDevice7W,$57D7C6BD,$2356,$11D3,$8E,$9D,$00,$C0,$4F,$68,$44,$AE);
DEFINE_GUID(IID_IDirectInputDevice8A,$54D41080,$DC15,$4833,$A4,$1B,$74,$8F,$73,$A3,$81,$79);
DEFINE_GUID(IID_IDirectInputDevice8W,$54D41081,$DC15,$4833,$A4,$1B,$74,$8F,$73,$A3,$81,$79);
DEFINE_GUID(IID_IDirectInputEffect,$E7E1F7C0,$88D2,$11D0,$9A,$D0,$00,$A0,$C9,$A0,$6E,$35);
; Predefined object types
DEFINE_GUID(GUID_XAxis,$A36D02E0,$C9F3,$11CF,$BF,$C7,$44,$45,$53,$54,$00,$00);
DEFINE_GUID(GUID_YAxis,$A36D02E1,$C9F3,$11CF,$BF,$C7,$44,$45,$53,$54,$00,$00);
DEFINE_GUID(GUID_ZAxis,$A36D02E2,$C9F3,$11CF,$BF,$C7,$44,$45,$53,$54,$00,$00);
DEFINE_GUID(GUID_RxAxis,$A36D02F4,$C9F3,$11CF,$BF,$C7,$44,$45,$53,$54,$00,$00);
DEFINE_GUID(GUID_RyAxis,$A36D02F5,$C9F3,$11CF,$BF,$C7,$44,$45,$53,$54,$00,$00);
DEFINE_GUID(GUID_RzAxis,$A36D02E3,$C9F3,$11CF,$BF,$C7,$44,$45,$53,$54,$00,$00);
DEFINE_GUID(GUID_Slider,$A36D02E4,$C9F3,$11CF,$BF,$C7,$44,$45,$53,$54,$00,$00);
DEFINE_GUID(GUID_Button,$A36D02F0,$C9F3,$11CF,$BF,$C7,$44,$45,$53,$54,$00,$00);
DEFINE_GUID(GUID_Key,$55728220,$D33C,$11CF,$BF,$C7,$44,$45,$53,$54,$00,$00);
DEFINE_GUID(GUID_POV,$A36D02F2,$C9F3,$11CF,$BF,$C7,$44,$45,$53,$54,$00,$00);
DEFINE_GUID(GUID_Unknown,$A36D02F3,$C9F3,$11CF,$BF,$C7,$44,$45,$53,$54,$00,$00);
; Predefined product GUIDs
DEFINE_GUID(GUID_SysMouse,$6F1D2B60,$D5A0,$11CF,$BF,$C7,$44,$45,$53,$54,$00,$00);
DEFINE_GUID(GUID_SysKeyboard,$6F1D2B61,$D5A0,$11CF,$BF,$C7,$44,$45,$53,$54,$00,$00);
DEFINE_GUID(GUID_Joystick,$6F1D2B70,$D5A0,$11CF,$BF,$C7,$44,$45,$53,$54,$00,$00);
; Predefined forcefeedback effects
DEFINE_GUID(GUID_ConstantForce,$13541C20,$8E33,$11D0,$9A,$D0,$00,$A0,$C9,$A0,$6E,$35);
DEFINE_GUID(GUID_RampForce,$13541C21,$8E33,$11D0,$9A,$D0,$00,$A0,$C9,$A0,$6E,$35);
DEFINE_GUID(GUID_Square,$13541C22,$8E33,$11D0,$9A,$D0,$00,$A0,$C9,$A0,$6E,$35);
DEFINE_GUID(GUID_Sine,$13541C23,$8E33,$11D0,$9A,$D0,$00,$A0,$C9,$A0,$6E,$35);
DEFINE_GUID(GUID_Triangle,$13541C24,$8E33,$11D0,$9A,$D0,$00,$A0,$C9,$A0,$6E,$35);
DEFINE_GUID(GUID_SawtoothUp,$13541C25,$8E33,$11D0,$9A,$D0,$00,$A0,$C9,$A0,$6E,$35);
DEFINE_GUID(GUID_SawtoothDown,$13541C26,$8E33,$11D0,$9A,$D0,$00,$A0,$C9,$A0,$6E,$35);
DEFINE_GUID(GUID_Spring,$13541C27,$8E33,$11D0,$9A,$D0,$00,$A0,$C9,$A0,$6E,$35);
DEFINE_GUID(GUID_Damper,$13541C28,$8E33,$11D0,$9A,$D0,$00,$A0,$C9,$A0,$6E,$35);
DEFINE_GUID(GUID_Inertia,$13541C29,$8E33,$11D0,$9A,$D0,$00,$A0,$C9,$A0,$6E,$35);
DEFINE_GUID(GUID_Friction,$13541C2A,$8E33,$11D0,$9A,$D0,$00,$A0,$C9,$A0,$6E,$35);
DEFINE_GUID(GUID_CustomForce,$13541C2B,$8E33,$11D0,$9A,$D0,$00,$A0,$C9,$A0,$6E,$35);
DefType.l ;}
Structure DIOBJECTDATAFORMAT
*pguid.GUID
dwOfs.l
dwType.l
dwFlags.l
EndStructure
Structure DIDATAFORMAT
dwSize.l
dwObjSize.l
dwFlags.l
dwDataSize.l
dwNumObjs.l
*rgodf.DIOBJECTDATAFORMAT
EndStructure
;Keyboard
Dim KBD_fmt.DIOBJECTDATAFORMAT(255) ;{
dwType = $8000000C
For i = 0 To 255
KBD_fmt(i)\pguid = GUID_Key
KBD_fmt(i)\dwOfs = i
KBD_fmt(i)\dwType = dwType
KBD_fmt(i)\dwFlags = $00000000
dwType + $100
Next ;}
c_dfDIKeyboard.DIDATAFORMAT ;{
c_dfDIKeyboard\dwSize = SizeOf(DIDATAFORMAT)
c_dfDIKeyboard\dwObjSize = SizeOf(DIOBJECTDATAFORMAT)
c_dfDIKeyboard\dwFlags = $00000002
c_dfDIKeyboard\dwDataSize = 256
c_dfDIKeyboard\dwNumObjs = 256
c_dfDIKeyboard\rgodf = @KBD_fmt() ;}
;Mouse
Structure DIMOUSESTATE
lx.l
ly.l
lZ.l
rgbButtons.b[4]
EndStructure
Structure DIMOUSESTATE2
lx.l
ly.l
lZ.l
rgbButtons.b[8]
EndStructure
;{ DIMOFS-Constants
#DIMOFS_X = OffsetOf(DIMOUSESTATE2\lx)
#DIMOFS_Y = OffsetOf(DIMOUSESTATE2\ly)
#DIMOFS_Z = OffsetOf(DIMOUSESTATE2\lZ)
#DIMOFS_BUTTON0 = OffsetOf(DIMOUSESTATE2\rgbButtons)+0
#DIMOFS_BUTTON1 = OffsetOf(DIMOUSESTATE2\rgbButtons)+1
#DIMOFS_BUTTON2 = OffsetOf(DIMOUSESTATE2\rgbButtons)+2
#DIMOFS_BUTTON3 = OffsetOf(DIMOUSESTATE2\rgbButtons)+3
#DIMOFS_BUTTON4 = OffsetOf(DIMOUSESTATE2\rgbButtons)+4
#DIMOFS_BUTTON5 = OffsetOf(DIMOUSESTATE2\rgbButtons)+5
#DIMOFS_BUTTON6 = OffsetOf(DIMOUSESTATE2\rgbButtons)+6
#DIMOFS_BUTTON7 = OffsetOf(DIMOUSESTATE2\rgbButtons)+7 ;}
Dim PTR_fmt.DIOBJECTDATAFORMAT(6) ;{
PTR_fmt(0)\pguid = GUID_XAxis :PTR_fmt(0)\dwOfs = 0 :PTR_fmt(0)\dwType = $00FFFF03 :PTR_fmt(0)\dwFlags = $00000000
PTR_fmt(1)\pguid = GUID_YAxis :PTR_fmt(1)\dwOfs = 4 :PTR_fmt(1)\dwType = $00FFFF03 :PTR_fmt(1)\dwFlags = $00000000
PTR_fmt(2)\pguid = GUID_ZAxis :PTR_fmt(2)\dwOfs = 8 :PTR_fmt(2)\dwType = $80FFFF03 :PTR_fmt(2)\dwFlags = $00000000
PTR_fmt(3)\pguid = #Null :PTR_fmt(3)\dwOfs = 12 :PTR_fmt(3)\dwType = $00FFFF03 :PTR_fmt(3)\dwFlags = $00000000
PTR_fmt(4)\pguid = #Null :PTR_fmt(4)\dwOfs = 13 :PTR_fmt(4)\dwType = $00FFFF03 :PTR_fmt(4)\dwFlags = $00000000
PTR_fmt(5)\pguid = #Null :PTR_fmt(5)\dwOfs = 14 :PTR_fmt(5)\dwType = $80FFFF03 :PTR_fmt(5)\dwFlags = $00000000
PTR_fmt(6)\pguid = #Null :PTR_fmt(6)\dwOfs = 15 :PTR_fmt(6)\dwType = $80FFFF03 :PTR_fmt(6)\dwFlags = $00000000 ;}
c_dfDIMouse.DIDATAFORMAT ;{
c_dfDIMouse\dwSize = SizeOf(DIDATAFORMAT)
c_dfDIMouse\dwObjSize = SizeOf(DIOBJECTDATAFORMAT)
c_dfDIMouse\dwFlags = $00000002
c_dfDIMouse\dwDataSize = 16
c_dfDIMouse\dwNumObjs = 7
c_dfDIMouse\rgodf = @PTR_fmt() ;}
Dim dfDIMouse2.DIOBJECTDATAFORMAT(10) ;{
dfDIMouse2(0)\pguid = GUID_XAxis :dfDIMouse2(0)\dwOfs = #DIMOFS_X :dfDIMouse2(0)\dwType = #DIDFT_ANYINSTANCE | #DIDFT_AXIS :dfDIMouse2(0)\dwFlags = 0
dfDIMouse2(1)\pguid = GUID_YAxis :dfDIMouse2(1)\dwOfs = #DIMOFS_Y :dfDIMouse2(1)\dwType = #DIDFT_ANYINSTANCE | #DIDFT_AXIS :dfDIMouse2(1)\dwFlags = 0
dfDIMouse2(2)\pguid = GUID_ZAxis :dfDIMouse2(2)\dwOfs = #DIMOFS_Z :dfDIMouse2(2)\dwType = #DIDFT_OPTIONAL | #DIDFT_ANYINSTANCE | #DIDFT_AXIS :dfDIMouse2(2)\dwFlags = 0
dfDIMouse2(3)\pguid = GUID_Button :dfDIMouse2(3)\dwOfs = #DIMOFS_BUTTON0 :dfDIMouse2(3)\dwType = #DIDFT_ANYINSTANCE | #DIDFT_BUTTON :dfDIMouse2(3)\dwFlags = 0
dfDIMouse2(4)\pguid = GUID_Button :dfDIMouse2(4)\dwOfs = #DIMOFS_BUTTON1 :dfDIMouse2(4)\dwType = #DIDFT_ANYINSTANCE | #DIDFT_BUTTON :dfDIMouse2(4)\dwFlags = 0
dfDIMouse2(5)\pguid = GUID_Button :dfDIMouse2(5)\dwOfs = #DIMOFS_BUTTON2 :dfDIMouse2(5)\dwType = #DIDFT_OPTIONAL | #DIDFT_ANYINSTANCE | #DIDFT_BUTTON :dfDIMouse2(5)\dwFlags = 0
dfDIMouse2(6)\pguid = GUID_Button :dfDIMouse2(6)\dwOfs = #DIMOFS_BUTTON3 :dfDIMouse2(6)\dwType = #DIDFT_OPTIONAL | #DIDFT_ANYINSTANCE | #DIDFT_BUTTON :dfDIMouse2(6)\dwFlags = 0
dfDIMouse2(7)\pguid = GUID_Button :dfDIMouse2(7)\dwOfs = #DIMOFS_BUTTON4 :dfDIMouse2(7)\dwType = #DIDFT_OPTIONAL | #DIDFT_ANYINSTANCE | #DIDFT_BUTTON :dfDIMouse2(7)\dwFlags = 0
dfDIMouse2(8)\pguid = GUID_Button :dfDIMouse2(8)\dwOfs = #DIMOFS_BUTTON5 :dfDIMouse2(8)\dwType = #DIDFT_OPTIONAL | #DIDFT_ANYINSTANCE | #DIDFT_BUTTON :dfDIMouse2(8)\dwFlags = 0
dfDIMouse2(9)\pguid = GUID_Button :dfDIMouse2(9)\dwOfs = #DIMOFS_BUTTON6 :dfDIMouse2(9)\dwType = #DIDFT_OPTIONAL | #DIDFT_ANYINSTANCE | #DIDFT_BUTTON :dfDIMouse2(9)\dwFlags = 0
dfDIMouse2(10)\pguid = GUID_Button :dfDIMouse2(10)\dwOfs = #DIMOFS_BUTTON7 :dfDIMouse2(10)\dwType = #DIDFT_OPTIONAL | #DIDFT_ANYINSTANCE | #DIDFT_BUTTON :dfDIMouse2(10)\dwFlags = 0 ;}
c_dfDIMouse2.DIDATAFORMAT ;{
c_dfDIMouse2\dwSize = SizeOf(DIDATAFORMAT)
c_dfDIMouse2\dwObjSize = SizeOf(DIOBJECTDATAFORMAT)
c_dfDIMouse2\dwFlags = #DIDF_RELAXIS
c_dfDIMouse2\dwDataSize = 20
c_dfDIMouse2\dwNumObjs = 11 ;SizeOf(c_rgodfDIMouse2)/SizeOf(c_rgodfDIMouse2[0])
c_dfDIMouse2\rgodf = @dfDIMouse2() ;}
;-Example
Procedure.l hInst()
!MOV Eax, dword[_PB_Instance]
ProcedureReturn
EndProcedure
Dim keys.b(255)
MouseState.DIMOUSESTATE2
hwnd = OpenWindow(0,0,0,400,400,#PB_Window_ScreenCentered,"")
DINPUT_DLL = OpenLibrary(#PB_Any,"DINPUT8.DLL")
If CallFunction(DINPUT_DLL,"DirectInput8Create",hInst(),#DIRECTINPUT_VERSION,IID_IDirectInput8A,@*DirectInput8.IDirectInput8A,#Null) = #DI_OK
If *DirectInput8\CreateDevice(GUID_SysKeyboard, @*DI_Keyb.IDirectInputDevice8A, #Null) = #DI_OK
If *DI_Keyb\SetCooperativeLevel(hwnd, #DISCL_NONEXCLUSIVE | #DISCL_FOREGROUND) = #DI_OK
If *DI_Keyb\SetDataFormat(@c_dfDIKeyboard) = #DI_OK
If *DI_Keyb\Acquire() = #DI_OK
;Mouse
If *DirectInput8\CreateDevice(GUID_SysMouse, @*DI_Mouse.IDirectInputDevice8A, #Null) = #DI_OK
If *DI_Mouse\SetCooperativeLevel(hwnd, #DISCL_EXCLUSIVE | #DISCL_FOREGROUND) = #DI_OK
If *DI_Mouse\SetDataFormat(@c_dfDIMouse2) = #DI_OK
If *DI_Mouse\Acquire() = #DI_OK
Repeat
While WindowEvent():Wend ;only to update the window
*DI_Keyb\GetDeviceState(256, @keys() ) ;256 = SizeOf(keys())
*DI_Mouse\GetDeviceState( SizeOf(DIMOUSESTATE2), @MouseState )
Until keys(#DIK_A) & $80
*DI_Mouse\Unacquire()
EndIf
EndIf
EndIf
*DI_Mouse\Release()
EndIf
*DI_Keyb\Unacquire()
EndIf
EndIf
EndIf
*DI_Keyb\Release()
EndIf
*DirectInput8\Release()
EndIf
Genau das selbe wie: (läuft nur ohne Debugger)
Code: Alles auswählen
InitKeyboard()
InitMouse()
OpenWindow(0,0,0,400,400,#PB_Window_ScreenCentered,"")
Repeat
ExamineKeyboard()
ExamineMouse()
Until KeyboardPushed(#PB_Key_A)