Cela peut se faire de différentes manières :
- - Utiliser des outils en ligne de commande existant, mais cela implique que ces outils soient livrés avec votre code, car sur une autre machine, il n'y sont peut être pas ...
- Explorer la base de registre. Cette méthode n'est pas toujours facile à utiliser car le nombre de clé à explorer peut vite devenir astronomique et très lourd.
- Utiliser le WMI . Ce sera sans aucun doute la solution la plus universelle et la plus simple à mettre en œuvre.
Pour cela je vous ai mis à disposition un pack spécial, qui contient trois outils :
- - ScriptomaticV2.hta - version Microsoft. Lien d'origine disponible ici.
- ScriptoMatic.au3 - version au3 de ScriptomaticV2. Lien d'origine ici.
- WMICodeCreator.exe - version améliorée de ScriptomaticV2.hta. Lien d'origine ici.
Même si j'y ai mis plusieurs outils, celui qui sera le plus intéressent, sera très surement ScriptoMatic.au3, car celui-ci vous produira directement le code en AU3.
Voici à quoi ressemble l'outil :
Et voici à quoi ressemble une des fenêtres de résultat :
Si vous le souhaitez, vous pouvez supprimer directement dans l'interface de la GUI les éléments qui ne vous sera pas utiles.
Ensuite, le résultat est placé dans une simple chaine de texte, qu'il vous suffira d'exploiter comme bon vous semble.
Évidement, vous pourrez adapter le code pour stocker chaque information indispensable à vos besoins dans une variable unique, qu'il vous suffira d'exploiter dans votre code.
Voici une adaptation du code de la GUI ci-dessus, modifié et simplifié pour afficher simplement la résolution du bureau. Certes, avec AutoIt il suffit d'utiliser les macros @DesktopWidth et @DesktopHeight pour connaitre cette information, mais si vous voulez connaitre le type ou le fabricant de l'écran, ce sera beaucoup moins simple sans WMI.
Code : Tout sélectionner
; Generated by AutoIt Scriptomatic
Global $colItems, $ScreenHeight, $ScreenWidth
$objWMIService = ObjGet("winmgmts:\\localhost\root\CIMV2")
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_DesktopMonitor", "WQL", 0x30)
If IsObj($colItems) then
For $objItem In $colItems
$ScreenHeight = $objItem.ScreenHeight
$ScreenWidth = $objItem.ScreenWidth
if $ScreenHeight <> "" then ExitLoop
Next
Msgbox(0,"WMI Desktop résolution","Screen Height = " & $ScreenHeight & @CRLF & "Screen Width = " & $ScreenWidth)
Else
Msgbox(0,"WMI Output","No WMI Objects Found for class: " & "Win32_DesktopMonitor" )
Endif
Et sa fenêtre de résultat :
*** A noter :
Si vous regardez bien dans la liste des onglets de WMICodeCreator.exe, vous y découvrirez aussi la possibilité de créer un code pour exécuter une méthode, et un autre pour gérer la réception d'un événement système ...
Et sur le dernier onglet, vous aurez la possibilité d'explorer les espaces de noms et ainsi de trouver n'importe quel élément disponible sur votre système avec parfois sa description dans la zone de droite.
Vous pouvez aussi consulter le site de Microsoft sur les Classes WMI afin d'avoir plus d'information sur le sujet (en Anglais)
Merci à Davyly pour le lien dans ce sujet vers l'outil WMICodeCreator.exe que je ne connaissais pas.
.