如何检测机器上是不是安装了DirectX,如机器配置要求
DirectX : DirectX 8.1 以上

解决方案 »

  1.   

    检查windows的系统目录中d3dim.dll的版本。首先调用GetFileVersionInfoSize来获取指定的文件中版本信息的大小。如果这个函数返回0,通常说明这个文件中不包含版本信息。如果该文件中包含版本信息,就可以使用GetFileVersionInfo来读取版本信息。接着使用VerQueryValue函数来从获得的版本信息中得到进一步的内容。
    声明:
     Type VS_FIXEDFILEINFO
          dwSignature As Long
          dwStrucVersionl As Integer     '  e.g. = &h0000 = 0
          dwStrucVersionh As Integer     '  e.g. = &h0042 = .42
          dwFileVersionMSl As Integer    '  e.g. = &h0003 = 3
          dwFileVersionMSh As Integer    '  e.g. = &h0075 = .75
          dwFileVersionLSl As Integer    '  e.g. = &h0000 = 0
          dwFileVersionLSh As Integer    '  e.g. = &h0031 = .31
          dwProductVersionMSl As Integer '  e.g. = &h0003 = 3
          dwProductVersionMSh As Integer '  e.g. = &h0010 = .1
          dwProductVersionLSl As Integer '  e.g. = &h0000 = 0
          dwProductVersionLSh As Integer '  e.g. = &h0031 = .31
          dwFileFlagsMask As Long        '  = &h3F for version "0.42"
          dwFileFlags As Long            '  e.g. VFF_DEBUG Or VFF_PRERELEASE
          dwFileOS As Long               '  e.g. VOS_DOS_WINDOWS16
          dwFileType As Long             '  e.g. VFT_DRIVER
          dwFileSubtype As Long          '  e.g. VFT2_DRV_KEYBOARD
          dwFileDateMS As Long           '  e.g. 0
          dwFileDateLS As Long           '  e.g. 0
       End Type
     
       Declare Function GetFileVersionInfo Lib "Version.dll" Alias _
          "GetFileVersionInfoA" (ByVal lptstrFilename As String, ByVal _
          dwhandle As Long, ByVal dwlen As Long, lpData As Any) As Long
       Declare Function GetFileVersionInfoSize Lib "Version.dll" Alias _
          "GetFileVersionInfoSizeA" (ByVal lptstrFilename As String, _
          lpdwHandle As Long) As Long
       Declare Function VerQueryValue Lib "Version.dll" Alias _
          "VerQueryValueA" (pBlock As Any, ByVal lpSubBlock As String, _
          lplpBuffer As Any, puLen As Long) As Long
       Declare Sub MoveMemory Lib "kernel32" Alias "RtlMoveMemory" _
          (dest As Any, ByVal Source As Long, ByVal length As Long)
       Declare Function GetSystemDirectory Lib "kernel32" Alias _
          "GetSystemDirectoryA" (ByVal Path As String, ByVal cbBytes As Long) As LongPrivate Sub Command1_Click()
     Dim rc                As Long
          Dim lDummy            As Long
          Dim sBuffer()         As Byte
          Dim lBufferLen        As Long
          Dim lVerPointer       As Long
          Dim udtVerBuffer      As VS_FIXEDFILEINFO
          Dim lVerbufferLen     As Long
     
          lBufferLen = GetFileVersionInfoSize("c:\winnt\system32\d3dim.dll", lDummy)
          If lBufferLen < 1 Then
             MsgBox "该文件没有版本信息!"
             Exit Sub
          End If
     
          '**** Store info to udtVerBuffer struct ****
          ReDim sBuffer(lBufferLen)
          rc = GetFileVersionInfo("c:\winnt\system32\d3dim.dll", 0&, lBufferLen, sBuffer(0))
          rc = VerQueryValue(sBuffer(0), "\", lVerPointer, lVerbufferLen)
          MoveMemory udtVerBuffer, lVerPointer, Len(udtVerBuffer)
     
          StrucVer = Format$(udtVerBuffer.dwStrucVersionh) & "." & _
             Format$(udtVerBuffer.dwStrucVersionl)
     
         MsgBox "文件版本号:" & Format$(udtVerBuffer.dwFileVersionMSh) & "." & _
             Format$(udtVerBuffer.dwFileVersionMSl) & "." & _
             Format$(udtVerBuffer.dwFileVersionLSh) & "." & _
             Format$(udtVerBuffer.dwFileVersionLSl)
     
         MsgBox "产品版本号:" & Format$(udtVerBuffer.dwProductVersionMSh) & "." & _
             Format$(udtVerBuffer.dwProductVersionMSl) & "." & _
             Format$(udtVerBuffer.dwProductVersionLSh) & "." & _
             Format$(udtVerBuffer.dwProductVersionLSl)
    End Sub
      

  2.   

    可是,这个并不能解决问题,DirectX的Dll有很多,这只是其中的一个,
    请问有什么其他的方法,谢谢
      

  3.   

    简单的办法,微软一般把这些信息都留在注册表中。
    直接用API遍历注册表的
    HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/DirectX主键
    然后看Version子键,这就是这台机器安装DirectX的版本。用这个判断就行。 
    代码不用写了吧,很简单。
      

  4.   

    我机器上装得的是9.0 在注册表中
    HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/DirectX主键
    Version子键=4.09.00.0901
    这是表示9.0版本?
    如实那么7.0,8.0的值为如何》
    谢谢!