Here's a STRICT version made into a function:
And a handy checking function:
' ----------------------------------------------------------------------------- ' ccGetDirectXVersion: Returns the DirectX version as a string ' By Qube and MichaelB ' ----------------------------------------------------------------------------- Function ccGetDirectXVersion$() Local strVersion:String = "" ?win32 Local hbank:TBank = CreateBank(4) RegOpenKey(HKEY_LOCAL_MACHINE,"SOFTWARE\Microsoft\DirectX",BankBuf(hbank)) Local hKey = PeekInt(hbank,0) Local value_bank:TBank = CreateBank(100) Local value_bank_size:TBank = CreateBank(4) Local type_bank:TBank = CreateBank(4) PokeInt(type_bank,0,0) PokeInt(value_bank_size,0,100) RegQueryValueEx(hKey,"Version",0,BankBuf(type_bank),BankBuf(value_bank),BankBuf(value_bank_size)) Local dx_version:String = "" For Local char=0 To PeekInt(value_bank_size,0)-1 If PeekByte(value_bank,char)=0 Then Exit dx_version = dx_version + Chr(PeekByte(value_bank,char)) Next RegCloseKey(hKey) Select dx_version Case "4.02.0095" strVersion = "1.0" Case "4.03.00.1096" strVersion = "2.0" Case "4.04.0068" strVersion = "3.0" Case "4.04.0069" strVersion = "3.0" Case "4.05.00.0155" strVersion = "5.0" Case "4.05.01.1721" strVersion = "5.0" Case "4.05.01.1998" strVersion = "5.0" Case "4.06.02.0436" strVersion = "6.0" Case "4.07.00.0700" strVersion = "7.0" Case "4.07.00.0716" strVersion = "7.0a" Case "4.08.00.0400" strVersion = "8.0" Case "4.08.01.0881" strVersion = "8.1" Case "4.08.01.0810" strVersion = "8.1" Case "4.09.0000.0900" strVersion = "9.0" Case "4.09.00.0900" strVersion = "9.0" Case "4.09.0000.0901" strVersion = "9.0a" Case "4.09.00.0901" strVersion = "9.0a" Case "4.09.0000.0902" strVersion = "9.0b" Case "4.09.00.0902" strVersion = "9.0b" Case "4.09.00.0904" strVersion = "9.0c" Case "4.09.0000.0904" strVersion = "9.0c" End Select ? Return strVersion End Function
And a handy checking function:
' ----------------------------------------------------------------------------- ' ccDirectXVersionIsValid: Returns 1 if DirectX Version is >=7 (which is required for BlitzMax) ' ----------------------------------------------------------------------------- Function ccDirectXVersionIsValid%() Local v$ = ccGetDirectXVersion() Print v$ Local valid=1 'There is no 4.0! If v$ = "1.0" Or v$="2.0" Or v$="3.0" Or v$="5.0" Or v$="6.0" Then valid=0 EndIf Return valid End Function