Joystick Name
BlitzPlus Forums/BlitzPlus Programming/Joystick Name
| ||
Hi! Anybody know how to get the name of a joystick/pad? ie when you goto control panel/game controllers any controller connected has a name (at least in my version of windows). This is the info im after! thanks mr brine |
| ||
I have tried these two methods but both fail to report anything on my rig (apart from number of joysticks coming back as 16). One method uses a type structure and the other uses a bank. Both examples use the API call joyGetDevCapsA from winmm.dll 'TYPE' METHOD ; JoyStick Info - using 'type' Const JOY1=0,JOY2=1 ; userlibs ; ================ ; .lib "winmm.dll" ; JoystickCaps%(id%,joyCapsSTRUCT*,StructSize%):"joyGetDevCapsA" ; CountJoysticks%():"joyGetNumDevs" ; ReadJoyStick%(JoyID%,JoyInfoSTRUCT):"joyGetPos" Type JoyCapsType Field ManufacturerID%,ProductID% Field ProductName$ Field minX%,maxX% Field minY%,maxY% Field minZ%,maxZ% Field NumButtons% Field minPollFreq%,maxPollFreq% Field minRudder%,maxRudder% Field minU%,maxU%,minV%,maxV% Field JoyCaps% Field maxAxes%,numAxes%,maxButtons% Field regkey$,driverOEM$ End Type joycaps.JoyCapsType=New JoyCapsType Type JoyInfoType Field x%,y%,z%,buttons% End Type joyinfo.JoyInfoType=New JoyInfoType numjoys=CountJoysticks() JoystickCaps JOY1,joycaps,176 Graphics 400,300,0,2 SetBuffer BackBuffer() Repeat Cls Text 10,10,"Number of joysticks present ="+numjoys Text 10,25,"Name (Joystick#1) ="+joycaps\ProductName$ ReadJoyStick JOY1,joyinfo Text 20,60,"X="+joyinfo\x+" Y="+joyinfo\y+" Z="+joyinfo\z Text 20,80,"Button Status="+joyinfo\buttons Flip Until KeyHit(1) End 'BANK' METHOD ; JoyStick Info - using 'bank' ; userlibs ; ================ ; .lib "winmm.dll" ; JoystickCaps%(JoyID%,JoyCapsSTRUCT*,StructSize%):"joyGetDevCapsA" ; CountJoysticks%():"joyGetNumDevs" joybank=CreateBank(176) numjoys=CountJoysticks() Print "Number of joysticks present ="+numjoys For j=-1 To numjoys-1 JoystickCaps j,joybank,176 Print j+") name = ["+PeekString$(joybank,8,32)+"]" Next a$=Input$("Press RETURN to end ..") End ; build and return a string of characters from a bank Function PeekString$(bank,offset,lastchar) Local txt$="" Repeat If PeekByte(bank,offset)=0 Exit txt$=txt$+Chr$(PeekByte(bank,offset)) offset=offset+1 Until offset=lastchar Return txt$ End Function |