Mémoire carte vidéo

Résolu
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 - 16 janv. 2006 à 05:31
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 - 24 janv. 2006 à 22:17
bonjour,

[VB6]



bon, je sature un peu là....

je voudrais récupérer la mémoire de la carte graphique, et ce de préférence, par tous les OS (windows évidemment).



registre, pas trouvé.

wmi, rien de concluant avec :

Win32_DisplayConfiguration

Win32_VideoSettings

Win32_VideoController



des softs comme AIDA y arrivent, çà doit donc être faisable non?


toutes les cartes ne sont tout de même pas listées par leur Caption ou Serial....





si vous avez ne serait-ce qu'une piste, bien volontier!!



++

PCPT [AFCK]

15 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
16 janv. 2006 à 10:04
coté WMI, dans Win32_VideoController, tu as AdapterRAM qui doit renvoyer l'info requise...

l'API DirectX peut, je crois être utilisée ici

dans la base de registres :

HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\VIDEO\Device\Video0
te donne une addresse dans la BDR...

tu la suit, et arrive par exemple à :
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Video\{2182F59C-8E8F-43E4-A5DC-DF38CC5C1816}\0000

clé dans laquelle tu trouveras plein d'infos, nottament : HardwareInformation.MemorySize
3
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
16 janv. 2006 à 16:21
ton erreur est là :
lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "HARDWARE\DEVICEMAP\VIDEO\Device\Video0", 0&, KEY_ALL_ACCESS, lKeyHandle)

la clé est
HARDWARE\DEVICEMAP\VIDEO\
pas
HARDWARE\DEVICEMAP\VIDEO\Device\Video0


voici une version 'Light' de ton code :

Dim hKey As Long
Dim nLength As Long
Dim sBuffer As String
If RegOpenKeyEx(HKEY_LOCAL_MACHINE, "HARDWARE\DEVICEMAP\VIDEO", 0&, KEY_ALL_ACCESS, hKey) = ERROR_SUCCESS Then
nLength = 1024
sBuffer = Space$(nLength)
If RegQueryValueEx(hKey, "\Device\Video0", 0&, REG_SZ, sBuffer, nLength) = ERROR_SUCCESS Then
sBuffer = Left$(sBuffer, nLength)
MsgBox sBuffer
End If
RegCloseKey hKey
End If
3
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
16 janv. 2006 à 15:38
salut Rey,

la valeur*16 dans le registre semble correspondre (donc à retravailler ensuite), sur 2PC.

je n'arrive cependant pas à récupérer la première valeur.



mon code ci-dessous et une classe apparemment complète, même résultat : retourne juste " ".

peut-il y avoir des droits ou privilèges particuliers? (admin local)




'-> Registre

Private Const HKEY_LOCAL_MACHINE As Long = &H80000002

Private Const KEY_ALL_ACCESS As Long = &H3F

Private Const ERROR_SUCCESS As Long = 0&

Private Const REG_SZ As Long = 1&







'-> ouvre la clé spécifiée

Private Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" _

(ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, _

ByVal samDesired As Long, phkResult As Long) As Long

'

'-> relache le handle de la clé spécifiée

Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long

'

'-> créé le clé spécifiée. l'ouvre si elle existe déjà

Private Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" _

(ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long

'

'-> créé ou modifie le type et la donnée d'une valeur de clé ouverte spécifiée

Private Declare Function RegSetValueEx Lib "advapi32" Alias "RegSetValueExA" _

(ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, _

ByVal dwType As Long, ByVal szData As String, ByVal cbData As Long) As Long

'

'-> retourne le type et la donnée d'une valeur de clé ouverte spécifiée

Private Declare Function RegQueryValueEx Lib "advapi32" Alias "RegQueryValueExA" _

(ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, _

ByRef lpType As Long, ByVal szData As String, ByRef lpcbData As Long) As Long











' ********************************************************



' on récupère le handle de la première clé

Dim lRet As Long, lKeyHandle As Long

lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "HARDWARE\DEVICEMAP\VIDEO\Device\Video0", 0&, KEY_ALL_ACCESS, lKeyHandle)

If lRet = ERROR_SUCCESS Then

Call RegCloseKey(lKeyHandle)

'Exit Function

End If



' on lit la valeur

Dim sBuffer As String, sValue As String

sBuffer = Space$(1024)



'erreur ici apparemment \/

Call RegQueryValueEx(lKeyHandle, "\Device\Video0", 0&, REG_SZ, sBuffer, Len (sBuffer))



Call RegCloseKey(lKeyHandle)



sValue = Left$(sBuffer, InStr(1, sBuffer, " "))

sBuffer = Chr$(0)

MsgBox "_" & sValue & "_"



' ********************************************************




<small> Coloration
syntaxique automatique [AFCK] </small>



même résultat également avec un Set oReg = CreateObject("WScript.Shell")



une idée? par DirectX mais là, çà m'est totalement inconnu...



merci à toi, je continue mes recherches de mon côté ;)
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
16 janv. 2006 à 16:41
je ne suis pas encore assez franc pour bidouiller le registre en Light, donc je vais garder à ma manière mais en effet, çà semble être ok.



Merci!

je continue, peut-être une petite source d'ici ce soir

++

PCPT [AFCK]
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
16 janv. 2006 à 16:46
attention a ne pas faire ton

Call RegCloseKey(lKeyHandle)
prématurément...(avant d'avoir lu la valeur) ERROR_SUCCESS indique bel et bien que le RegOpenKeyEx s'est BIEN passé...

mon code n'est qu'une simple réorganisation des appels....

Renfield
Admin CodeS-SourceS - MVP Visual Basic
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
16 janv. 2006 à 16:55
oui oui t'en fait pas ;)

merci
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
16 janv. 2006 à 17:47
bon...

va savoir pourquoi mais j'ai dû zapper ta toute première ligne AdapterRAM

donc en effet, elle contient bien la RAM.

je vais sûrement faire comme çà parce que je n'arrive pas à récupérer la valeur en REG_BINARY.



par contre, pour ma culture, si tu avais une petit bout Light pour exemple (registre BINARY HEXA), j'apprécierais ^^



à part çà 2 questions :

.le registre est en casse sensitive?

.l'objet WMI est utilisable sur tous les Windows?



@+
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
16 janv. 2006 à 18:10
Base de registres non case-sensitive...

WMI installé Avec Windows Me, 2000 ou Xp

sinon, existe pour NT/98/95 : http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmi/wmi_start_page.asp

Renfield
Admin CodeS-SourceS - MVP Visual Basic
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
16 janv. 2006 à 18:46
je te laisse voir la version WMI....
en manipulant, la Base de registres, ca donne :

-------------------------------------------------------------------
Option Explicit

Private Const HKEY_LOCAL_MACHINE As Long = &H80000002
Private Const KEY_ALL_ACCESS As Long = &H3F
Private Const ERROR_SUCCESS As Long = 0&
Private Const REG_SZ As Long = 1&
Private Const REG_BINARY As Long = 3

Private Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
Private Declare Function RegQueryValueEx Lib "advapi32" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, ByRef lpType As Long, ByRef szData As Any, ByRef lpcbData As Long) As Long

Private Sub Form_Load()
Dim hKey As Long
Dim nLength As Long
Dim sBuffer As String
Dim sPath As String
Dim sMsg As String
If RegOpenKeyEx(HKEY_LOCAL_MACHINE, "HARDWARE\DEVICEMAP\VIDEO", 0&, KEY_ALL_ACCESS, hKey) = ERROR_SUCCESS Then
nLength = 1024
sBuffer = Space$(nLength)
If RegQueryValueEx(hKey, "\Device\Video0", 0&, REG_SZ, ByVal sBuffer, nLength) = ERROR_SUCCESS Then
sPath = Left$(sBuffer, nLength)
RegCloseKey hKey

If RegOpenKeyEx(HKEY_LOCAL_MACHINE, Mid$(sPath, 19), 0&, KEY_ALL_ACCESS, hKey) = ERROR_SUCCESS Then
nLength = 1024
sBuffer = Space$(nLength)
If RegQueryValueEx(hKey, "HardwareInformation.AdapterString", 0&, REG_SZ, ByVal sBuffer, nLength) = ERROR_SUCCESS Then
sBuffer = Left$(sBuffer, nLength)
sMsg = "Carte : " & StrConv(sBuffer, vbFromUnicode) & vbNewLine
End If

nLength = 1024
sBuffer = Space$(nLength)
If RegQueryValueEx(hKey, "HardwareInformation.MemorySize", 0&, REG_BINARY, nLength, 4) = ERROR_SUCCESS Then
sMsg = sMsg & "Mémoire : " & CStr(nLength / 1024 / 1024) & " Mo"
End If

MsgBox sMsg, vbInformation
RegCloseKey hKey
End If
Else
RegCloseKey hKey
End If
End If
Unload Me
End Sub
-------------------------------------------------------------------

Renfield
Admin CodeS-SourceS - MVP Visual Basic
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
16 janv. 2006 à 19:18
Merci encore.


mon erreur était dûe au fait que je récupérais le sBuffer au lieu du nLength (en comparaison).





plus qu'à paufiner 2 3 trucs et c'est propre^^





@ charge de revanche
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
16 janv. 2006 à 19:55
pour ta satisfaction personnelle, j'me suis trompé avec le lRet et le Handle...

autrement dit, ton exemple Light va plus me servir que je ne le pensais ;)
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
17 janv. 2006 à 09:59
ok, content que tu aies pu t'en sortir ^^
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
17 janv. 2006 à 18:52
pour info voici ta déclaration (qui est la bonne)

Private Declare Function RegQueryValueEx Lib "advapi32" Alias
"RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String,
ByVal lpReserved As Long, ByRef lpType As Long, ByRef szData As Any, ByRef lpcbData As Long) As Long



contre ByVal .... String que j'utilisais, 2e source d'erreur ^^

j'ai mis du temps à m'en apercevoir hier



si l'envie t'en dit, la source est postée...

@+

PCPT [AFCK]
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
18 janv. 2006 à 00:22
vue la source, oui...



la déclaration, je l'ai modifiée pour pouvoir renvoyer un Long....

Renfield
Admin CodeS-SourceS - MVP Visual Basic
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
24 janv. 2006 à 22:17
salut Rey,

j'allais poster un nouveau message, mais au cas où...

je suis toujours bloqué pour ces mêmes récupérations sous w9x...

les clés sont soit différentes, soient inexistantes..... (ram-graphique et cadence processeur)



saurais-tu comment les récupérer?

installer WMI... je vois, mais WMI ne fait bien que lire ces données quelque part, non?



@+ (j'espère)
0
Rejoignez-nous