Mémoire carte vidéo [Résolu]

PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 16 janv. 2006 à 05:31 - Dernière réponse : PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention
- 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]
Afficher la suite 

15 réponses

Meilleure réponse
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 16 janv. 2006 à 10:04
3
Merci
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

Merci Renfield 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Meilleure réponse
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 16 janv. 2006 à 16:21
3
Merci
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

Merci Renfield 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 16 janv. 2006 à 15:38
0
Merci
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é ;)
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 16 janv. 2006 à 16:41
0
Merci
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]
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 16 janv. 2006 à 16:46
0
Merci
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
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 16 janv. 2006 à 16:55
0
Merci
oui oui t'en fait pas ;)

merci
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 16 janv. 2006 à 17:47
0
Merci
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?



@+
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 16 janv. 2006 à 18:10
0
Merci
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
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 16 janv. 2006 à 18:46
0
Merci
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
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 16 janv. 2006 à 19:18
0
Merci
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
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 16 janv. 2006 à 19:55
0
Merci
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 ;)
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 17 janv. 2006 à 09:59
0
Merci
ok, content que tu aies pu t'en sortir ^^
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 17 janv. 2006 à 18:52
0
Merci
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]
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 18 janv. 2006 à 00:22
0
Merci
vue la source, oui...



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

Renfield
Admin CodeS-SourceS - MVP Visual Basic
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 24 janv. 2006 à 22:17
0
Merci
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)

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.