Seite 1 von 1

"kleines" DirectInput Beispiel

Verfasst: 22.08.2005 18:26
von Deeem2031
Ich hab mich mal mit DirectInput beschäftigt und das ist dabei rausgekommen:

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
Was macht das Ganze?
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)
...außer das ich in meinem Bsp. DX8 benutze, PB aber DX7 benutzt.