par contre ça marche avec ce code.
Code : Tout sélectionner
; Stuff required by GetSystemFolder ()...
;auteur Hi-Toro ;http://www.purebasic.fr/english/viewtopic.php?f=5&t=46991&start=19
#CSIDL_SYSTEM = $25
; Returns System folder...
Procedure.s GetSystemFolder ()
location$ = Space (#MAX_PATH)
GetSystemDirectory_ (@location$, #MAX_PATH)
ProcedureReturn location$
EndProcedure
; Windows 9x or NT? Returns #VER_PLATFORM_WIN32_NT (NT, 2000, XP, etc) or #VER_PLATFORM_WIN32_WINDOWS (95, 98)...
Procedure GetWindowsFamily ()
os.OSVERSIONINFO
os\dwOSVersionInfoSize = SizeOf (OSVERSIONINFO)
GetVersionEx_ (@os)
ProcedureReturn os\dwPlatformId
EndProcedure
; Name of primary video driver...
Procedure.s VideoDriver ()
Select GetWindowsFamily ()
Case #VER_PLATFORM_WIN32_NT
If RegOpenKeyEx_ (#HKEY_LOCAL_MACHINE, "HARDWARE\DEVICEMAP\VIDEO", 0, #KEY_READ, @vidkey) = #ERROR_SUCCESS
If RegQueryValueEx_ (vidkey, "\Device\Video0", #Null, #Null, #Null, @size) = #ERROR_SUCCESS
firstvid$ = Space (size)
If RegQueryValueEx_ (vidkey, "\Device\Video0", #Null, #Null, @firstvid$, @size) = #ERROR_SUCCESS
If LCase (Left (firstvid$, 18)) = "\registry\machine\"
firstdev$ = Right (firstvid$, Len (firstvid$) - 18)
EndIf
If RegOpenKeyEx_ (#HKEY_LOCAL_MACHINE, firstdev$, 0, #KEY_READ, @devkey) = #ERROR_SUCCESS
If RegQueryValueEx_ (devkey, "Device Description", #Null, #Null, #Null, @size) = #ERROR_SUCCESS
device$ = Space (size)
RegQueryValueEx_ (devkey, "Device Description", #Null, #Null, @device$, @size)
; Name is now in device$, or ""...
EndIf
RegCloseKey_ (devkey)
EndIf
EndIf
EndIf
RegCloseKey_ (vidkey)
EndIf
Case #VER_PLATFORM_WIN32_WINDOWS
If RegOpenKeyEx_ (#HKEY_LOCAL_MACHINE, "System\CurrentControlSet\Services\Class\Display\0000", 0, #KEY_READ, @vidkey) = #ERROR_SUCCESS
If RegQueryValueEx_ (vidkey, "DriverDesc", #Null, #Null, #Null, @size) = #ERROR_SUCCESS
device$ = Space (size)
RegQueryValueEx_ (vidkey, "DriverDesc", #Null, #Null, @device$, @size)
; device$ now contains driver name or ""...
EndIf
RegCloseKey_ (vidkey)
EndIf
EndSelect
ProcedureReturn device$
EndProcedure
; Returns primary video memory in bytes (use 'result / 1024 / 1024' for MB)...
Procedure VideoMemory ()
Select GetWindowsFamily ()
Case #VER_PLATFORM_WIN32_NT
If RegOpenKeyEx_ (#HKEY_LOCAL_MACHINE, "HARDWARE\DEVICEMAP\VIDEO", 0, #KEY_READ, @vidkey) = #ERROR_SUCCESS
If RegQueryValueEx_ (vidkey, "\Device\Video0", #Null, #Null, #Null, @size) = #ERROR_SUCCESS
firstvid$ = Space (size)
If RegQueryValueEx_ (vidkey, "\Device\Video0", #Null, #Null, @firstvid$, @size) = #ERROR_SUCCESS
If LCase (Left (firstvid$, 18)) = "\registry\machine\"
firstdev$ = Right (firstvid$, Len (firstvid$) - 18)
EndIf
If RegOpenKeyEx_ (#HKEY_LOCAL_MACHINE, firstdev$, 0, #KEY_READ, @devkey) = #ERROR_SUCCESS
RegQueryValueEx_ (devkey, "HardwareInformation.MemorySize", #Null, #Null, @totalmem, @size)
; totalmem contains memory size or 0...
RegCloseKey_ (devkey)
EndIf
EndIf
EndIf
RegCloseKey_ (vidkey)
EndIf
Case #VER_PLATFORM_WIN32_WINDOWS
If RegOpenKeyEx_ (#HKEY_LOCAL_MACHINE, "System\CurrentControlSet\Services\Class\Display\0000\INFO", 0, #KEY_READ, @vidkey) = #ERROR_SUCCESS
If RegQueryValueEx_ (vidkey, "VideoMemory", #Null, #Null, #Null, @size) = #ERROR_SUCCESS
firstvid$ = Space (size)
RegQueryValueEx_ (vidkey, "VideoMemory", #Null, #Null, @totalmem, @size)
; totalmem contains memory size or 0...
EndIf
RegCloseKey_ (vidkey)
EndIf
EndSelect
ProcedureReturn totalmem
EndProcedure
; Returns the actual video driver file name...
Procedure.s VideoDriverDLL ()
Select GetWindowsFamily ()
Case #VER_PLATFORM_WIN32_NT
If RegOpenKeyEx_ (#HKEY_LOCAL_MACHINE, "HARDWARE\DEVICEMAP\VIDEO", 0, #KEY_READ, @vidkey) = #ERROR_SUCCESS
If RegQueryValueEx_ (vidkey, "\Device\Video0", #Null, #Null, #Null, @size) = #ERROR_SUCCESS
firstvid$ = Space (size)
If RegQueryValueEx_ (vidkey, "\Device\Video0", #Null, #Null, @firstvid$, @size) = #ERROR_SUCCESS
If LCase (Left (firstvid$, 18)) = "\registry\machine\"
firstdev$ = Right (firstvid$, Len (firstvid$) - 18)
EndIf
If RegOpenKeyEx_ (#HKEY_LOCAL_MACHINE, firstdev$, 0, #KEY_READ, @devkey) = #ERROR_SUCCESS
If RegQueryValueEx_ (devkey, "InstalledDisplayDrivers", #Null, #Null, #Null, @size) = #ERROR_SUCCESS
device$ = Space (size)
If RegQueryValueEx_ (devkey, "InstalledDisplayDrivers", #Null, #Null, @device$, @size) = #ERROR_SUCCESS
device$ = GetSystemFolder () + "\" + device$ + ".dll"
EndIf
EndIf
RegCloseKey_ (devkey)
EndIf
EndIf
EndIf
RegCloseKey_ (vidkey)
EndIf
Case #VER_PLATFORM_WIN32_WINDOWS
If RegOpenKeyEx_ (#HKEY_LOCAL_MACHINE, "System\CurrentControlSet\Services\Class\Display\0000\DEFAULT", 0, #KEY_READ, @vidkey) = #ERROR_SUCCESS
If RegQueryValueEx_ (vidkey, "drv", #Null, #Null, #Null, @size) = #ERROR_SUCCESS
device$ = Space (size)
RegQueryValueEx_ (vidkey, "drv", #Null, #Null, @device$, @size)
device$ = GetSystemFolder () + "\" + device$
; device$ now contains driver name or ""...
EndIf
RegCloseKey_ (vidkey)
EndIf
EndSelect
ProcedureReturn device$
EndProcedure
; Gets file version info. I've forgotten whose code this is -- it's not mine! Please let me know...
Procedure.s GetVersionInfo (file$, getinfo$)
; getinfo$ = "FileDescription"
; getinfo$ = "ProductVersion"
; getinfo$ = "ProductName"
; getinfo$ = "CompanyName"
; getinfo$ = "LegalCopyright"
; getinfo$ = "Comments"
; getinfo$ = "FileVersion"
; getinfo$ = "InternalName"
; getinfo$ = "LegalTrademarks"
; getinfo$ = "PrivateBuild"
; getinfo$ = "SpecialBuild"
; getinfo$ = "Language"
info$=""
If FileSize (file$) > 0
zero = 10
If OpenLibrary (1, "version.dll")
length = CallFunction (1, "GetFileVersionInfoSizeA", @file$, @zero)
If length
mem1 = AllocateMemory (length)
If mem1
result = CallFunction (1, "GetFileVersionInfoA", @file$, 0, length, mem1)
If result
infobuffer = 0
infolen = 0
getinfo$ = "\\StringFileInfo\\040904B0\\" + getinfo$
result = CallFunction (1, "VerQueryValueA", mem1, @getinfo$, @infobuffer, @infolen)
If result
info$ = PeekS (infobuffer)
EndIf
EndIf
FreeMemory (mem1)
EndIf
EndIf
CloseLibrary (1)
EndIf
EndIf
ProcedureReturn info$
EndProcedure
; -----------------------------------------------------------------------------
; D E M O . . .
; -----------------------------------------------------------------------------
; Get manufacturer name from video driver DLL...
manufacturer$ = GetVersionInfo (VideoDriverDLL (), "CompanyName")
If manufacturer$ = ""
manufacturer$ = "[Not found]"
EndIf
info$ = "Manufacturer: " + manufacturer$ + Chr (10) + Chr (10)
; Get video driver name (generally graphics card name)...
video$ = VideoDriver ()
If video$ = ""
video$ = "[Not found]"
EndIf
info$ = info$ + "Name: " + video$ + Chr (10)
; Get graphics memory...
memory = VideoMemory () / 1024 / 1024
If memory
mem$ = Str (memory) + " MB"
Else
mem$ = "[Not found]"
EndIf
info$ = info$ + "Video memory: " + mem$ + Chr (10) + Chr (10)
; Get name of video driver file...
videodll$ = VideoDriverDLL ()
If videodll$ = ""
videodll$ = "[Not found]"
EndIf
info$ = info$ + "Driver DLL: " + videodll$ + Chr (10)
; Get version number of video driver...
videoversion$ = GetVersionInfo (VideoDriverDLL (), "FileVersion")
If videoversion$ = ""
videoversion$ = "[Not found]"
EndIf
info$ = info$ + "Driver version: " + videoversion$
; Boing!
MessageRequester ("Main video driver information", info$, #MB_ICONINFORMATION)