Page 1 sur 1

[R]Récuperer les modèles de cartes graphique.

Posté : dim. 12 juil. 2020 13:50
par someonescripting
Bonjour,

Encore besoin d'un petit coup de main.
Toujours pour mon script, je crée une fenêtre qui affiche les informations système comme le processeur, la RAM, etc.
Il me récupère également le modèle de la carte graphique installé dans l’ordinateur.

Mon problème est le suivant, sur les ordinateurs récent (en particulier les portables), il y a bien souvent 2 cartes graphiques, la Intel et la NVIDIA/AMD.
J'utilise la fonction suivante (trouvé sur le forum anglais de mémoire) :

Code : Tout sélectionner

Func _GetGraphicCardModel() ;Récupère le modèle de la carte graphique.
	Local $objWMIService = ObjGet("winmgmts:\\.\root\CIMV2")
	Local $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_DisplayConfiguration", "WQL", 0x10 + 0x20)
	If IsObj($colItems) then
		For $objItem In $colItems
			Local $Output = $objItem.DeviceName
		Next
	Endif
Return $Output
EndFunc
Lorsque je lance le tout, en fonction des PC, il me retourne soit la NVIDIA soit la INTEL (alors que les deux sont installé et activé). Serait il possible d'avoir une fonction qui me retournerais la carte graphique intégré (INTEL) et une autre pour la carte graphique normal (NVIDIA/AMD)?

Merci pour votre aide !

Re: [..]Récuperer les modèles de cartes graphique.

Posté : dim. 12 juil. 2020 16:36
par walkson
Bonjour,
Je pense que ce code devrait convenir https://www.autoitscript.com/forum/topi ... ent-209498
(surtout sélectionnez la partie qui vous intéresse sinon ça va être long :P )
Sinon pour récupérer du WMI https://www.autoitscript.com/forum/file ... t-o-matic/

Re: [..]Récuperer les modèles de cartes graphique.  

Posté : dim. 12 juil. 2020 17:17
par someonescripting
Merci @walkson.

Du coup j'ai juste un peu modifier la fonctions pour que celle ci renvoie toutes les cartes graphiques ainsi que leur quantité de mémoire.

Code : Tout sélectionner

Func _GetGraphicCardModel() ;Récupère le modèle de la carte graphique et leur quantité de mémoire.
	; https://docs.microsoft.com/fr-fr/windows/win32/cimwin32prov/win32-videocontroller?redirectedfrom=MSDN
	Local $objWMIService = ObjGet("winmgmts:\\.\root\CIMV2")
	Local $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_VideoController", "WQL", 0x10 + 0x20)
	Local $Output

	If IsObj($colItems) then
		For $objItem In $colItems
			$Output = $Output & @CRLF & $objItem.Caption & " (" & Int( _UINT($objItem.AdapterRAM) /( 1024000000 ) ) & "Go)"
		Next
	Endif

	Return $Output
EndFunc

Func _UINT($INT) ;Cast une valeur numérique en entier non signé.
    Local $tUINT = DllStructCreate("UINT")
    DllStructSetData($tUINT, 1, $INT)
    Return DllStructGetData($tUINT, 1)
EndFunc   ;==>_UINTFunc
(Impossible d'aller sur le lien pour le script'o'matic, j'ai ce message lors du chargement de la page : Your request has been blocked.)

Re: [R]Récuperer les modèles de cartes graphique.

Posté : dim. 12 juil. 2020 17:29
par walkson
Bizarre, je n'ai aucun problème
Essayez ceci https://www.autoitscript.com/forum/file ... aysupport/

Re: [R]Récuperer les modèles de cartes graphique.

Posté : dim. 12 juil. 2020 19:02
par mikell
Question (pour jc, éventuellement)
Est-ce que ça ne suffit pas ?
$Output = $Output & @CRLF & $objItem.Caption & " (" & Int($objItem.AdapterRAM/1024^3) & " Go)"

Re: [R]Récuperer les modèles de cartes graphique.

Posté : dim. 12 juil. 2020 22:18
par jchd
Bah ça doit fonctionner, de plus 1 Go c'est bien ça. Mais j'aurais au moins laissé 1 à 2 décimales, des fois que la taille soit intermédiaire.

Re: [R]Récuperer les modèles de cartes graphique.

Posté : lun. 13 juil. 2020 00:44
par someonescripting
Re.

@mikell, @jchd, oui j'y ai penser entre temps et j'ai décider de l'afficher en Mo plutôt qu'en Go :

Code : Tout sélectionner

Func _GetGraphicCardModel() ;Récupère le(s) modèle(s) de(s) carte(s) graphique(s).
	; https://docs.microsoft.com/fr-fr/windows/win32/cimwin32prov/win32-videocontroller?redirectedfrom=MSDN
	Local $objWMIService = ObjGet("winmgmts:\\.\root\CIMV2")
	Local $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_VideoController", "WQL", 0x10 + 0x20)
	Local $Output

	If IsObj($colItems) then
		For $objItem In $colItems
			$Output = $Output & @CRLF & "- " & $objItem.Caption & " (" & Int( _UINT($objItem.AdapterRAM) / 1024 / 1024 ) & " Mo)"
		Next
	Endif

	Return $Output
EndFunc ;_GetGraphicCardModel
Ce qui nous donne ceci en complet :
SYSINFO.jpg
SYSINFO.jpg (41.66 Kio) Vu 3625 fois
(Par contre je ne comprend pas pourquoi la carte Intel me renvoie "1024" alors que je n'ai alloué que 64Mo dans le bios ..., testé aussi avec 256Mo alloué et idem.)

Edit : Je vais retirer l'affichage de la VRAM car sur les cartes récentes avec plus de 4Go de VRAM, WMI ne renvoie que 4Go (alors que ma 980Ti en dispose de 6, cela serait dû au fait que WMI renvoie un "uint32" pour "AdpaterRAM" et ne peu donc gérer plus de 4Go (si j'ai bien tout compris).