Page 1 sur 1

[R] Comparer 3 Variables

Posté : mer. 17 oct. 2018 19:15
par jerem448
Bonjour à tous,

J'ai besoin de votre aide pour faire évoluer mon petit programme, et pour cela je dois vérifier la valeur de "BIOS" dans le registre :
Chemin complet :RegRead("HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\BIOS", "BIOSVersion")

Le soucis est que sur certains modèles cette valeur est juste la version du BIOS ex: 320
et sur d'autres la valeur comprend le modèle ex: x540ya.320

Actuellement mon programme propose un mode "DT & AIO" qui résout le problème, mais j'aimerais le simplifier et tout afficher directement sur une seule GUI.
La Question est donc es t'il possible de comparer 3 variables ex :"if $versionB >= $versionD and $versionE"
A chaque tentative une seule des 2 variables est prise en compte.
J'ai aussi tenté de récupérer la valeur du BIOS après le "." avec un stringsplit sans succès.
J'ai éssayer pas mal de chose trouver sur des forums mais rien n'a fonctionné, ou je n'ai pas su adapter les solutions proposer.

Code : Tout sélectionner

#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=solvarea.ico
#AutoIt3Wrapper_Compile_Both=y
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include "GUIConstantsEx.au3"
#include "StaticConstants.au3"
#include "WindowsConstants.au3"
#include "ColorConstants.au3"

; ########## Début de la création de la GUI 1 ##########
Local $Model = RegRead("HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\BIOS", "BaseBoardProduct") ;Récupération du modèle
Local $VersionB = RegRead("HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\BIOS", "Biosversion") ;Récupération de la version du BIOS
Local $NB_BIOS = "" ; Récupération de la valeur dans le fichier NB_BIOS
$SPN = RegRead("HKLM\HARDWARE\DESCRIPTION\System\BIOS", "BaseBoardProduct")
$NB_BIOS = IniRead("NB_BIOS.ini", "BIOS", $SPN, "")
Local $VersionD = ($Model & '.' & $NB_BIOS)
$GUI1 = GUICreate("Verbios 7.0", 400, 400, -1, -1) ; Création de la GUI1
$fond = GUICtrlCreatePic("LOGO.jpg", 0, 10, 400, 90)
GUICtrlSetState($Fond, $GUI_DISABLE)
Opt("GUICoordMode", 5)
$Lb1 = GUICtrlCreateLabel("Modele", 70, 110, 320, 24) ; Création du label1
GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif") ; Mise en gras du texte du contrôle précédent (Label1)
GUICtrlSetState(-1, $GUI_ONTOP)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) ; Arrière plan du label transparent
$Lb11 = GUICtrlCreateLabel(" = " & $Model, 250, 110, 320, 24) ; Création du label1
GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif") ; Mise en gras du texte du contrôle précédent (Label1)
GUICtrlSetState(-1, $GUI_ONTOP)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) ; Arrière plan du label transparent
$Lb2 = GUICtrlCreateLabel("Version Installee", 70, 140, 320, 24) ; Création du label2
GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif") ; Mise en gras du texte du contrôle précédent (Label2)
GUICtrlSetState(-1, $GUI_ONTOP)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) ; Arrière plan du label transparent
$lb21 = GUICtrlCreateLabel(" = " & $VersionB, 250, 140, 320, 24)
GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif") ; Mise en gras du texte du contrôle précédent (Label1)
GUICtrlSetState(-1, $GUI_ONTOP)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) ; Arrière plan du label transparent
$Lb3 = GUICtrlCreateLabel("Version à Jour", 70, 170, 320, 24) ; Création du label3
GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif") ; Mise en gras du texte du contrôle précédent (Label3)
GUICtrlSetState(-1, $GUI_ONTOP)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) ; Arrière plan du label transparent
$Lb31 = GUICtrlCreateLabel(" = " & $NB_BIOS, 250, 170, 320, 24) ; Création du label1
GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif") ; Mise en gras du texte du contrôle précédent (Label1)
GUICtrlSetState(-1, $GUI_ONTOP)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) ; Arrière plan du label transpare
If ($VersionB >= $VersionD) Then
	$Lb4 = GUICtrlCreateLabel("BIOS A JOUR", 110, 200, 320, 24) ; Création du label4
	GUICtrlSetFont(-1, 20, 800, 0, "MS Sans Serif") ; Mise en gras du texte du contrôle précédent (Label4)
	GUICtrlSetState(-1, $GUI_ONTOP)
	GUICtrlSetColor(-1, $color_green)
Else
	$Lb4 = GUICtrlCreateLabel("BIOS PAS A JOUR", 75, 200, 320, 24) ; Création du label4
	GUICtrlSetFont(-1, 20, 800, 0, "MS Sans Serif") ; Mise en gras du texte du contrôle précédent (Label4)
	GUICtrlSetState(-1, $GUI_ONTOP)
	GUICtrlSetColor(-1, $color_red)
EndIf
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) ; Arrière plan du label transparent
$Btn1 = GUICtrlCreateButton("Quitter", 216, 240, 150, 25) ; Création d'un bouton simple
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) ; Arrière plan du label transparent
$Btn2 = GUICtrlCreateButton("MODE DT & AIO", 33, 240, 150, 25) ; Création d'un bouton simple
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) ; Arrière plan du label transparent


; ########## Fin de la création de la GUI 1 ##########*


; ########## Début de la création de la GUI 2 ##########
Local $Model = RegRead("HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\BIOS", "BaseBoardProduct") ;Récupération du modèle
Local $VersionB = RegRead("HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\BIOS", "Biosversion") ;Récupération de la version du BIOS
Local $NB_BIOS = "" ; Récupération de la valeur dans le fichier NB_BIOS
$SPN = RegRead("HKLM\HARDWARE\DESCRIPTION\System\BIOS", "BaseBoardProduct")
$NB_BIOS = IniRead("NB_BIOS.ini", "BIOS", $SPN, "")
Local $VersionD = ($NB_BIOS)
$GUI2 = GUICreate("Verbios 7.0", 400, 400, -1, -1) ; Création de la GUI1
$fond = GUICtrlCreatePic("LOGO.jpg", 0, 10, 400, 90)
GUICtrlSetState($Fond, $GUI_DISABLE)
Opt("GUICoordMode", 5)
$Lb1 = GUICtrlCreateLabel("Modele", 70, 110, 320, 24) ; Création du label1
GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif") ; Mise en gras du texte du contrôle précédent (Label1)
GUICtrlSetState(-1, $GUI_ONTOP)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) ; Arrière plan du label transparent
$Lb11 = GUICtrlCreateLabel(" = " & $Model, 250, 110, 320, 24) ; Création du label1
GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif") ; Mise en gras du texte du contrôle précédent (Label1)
GUICtrlSetState(-1, $GUI_ONTOP)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) ; Arrière plan du label transparent
$Lb2 = GUICtrlCreateLabel("Version Installee", 70, 140, 320, 24) ; Création du label2
GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif") ; Mise en gras du texte du contrôle précédent (Label2)
GUICtrlSetState(-1, $GUI_ONTOP)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) ; Arrière plan du label transparent
$lb21 = GUICtrlCreateLabel(" = " & $VersionB, 250, 140, 320, 24)
GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif") ; Mise en gras du texte du contrôle précédent (Label1)
GUICtrlSetState(-1, $GUI_ONTOP)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) ; Arrière plan du label transparent
$Lb3 = GUICtrlCreateLabel("Version à Jour", 70, 170, 320, 24) ; Création du label3
GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif") ; Mise en gras du texte du contrôle précédent (Label3)
GUICtrlSetState(-1, $GUI_ONTOP)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) ; Arrière plan du label transparent
$Lb31 = GUICtrlCreateLabel(" = " & $NB_BIOS, 250, 170, 320, 24) ; Création du label1
GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif") ; Mise en gras du texte du contrôle précédent (Label1)
GUICtrlSetState(-1, $GUI_ONTOP)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) ; Arrière plan du label transpare
If ($VersionB >= $VersionD) Then
	$Lb4 = GUICtrlCreateLabel("BIOS A JOUR", 110, 200, 320, 24) ; Création du label4
	GUICtrlSetFont(-1, 20, 800, 0, "MS Sans Serif") ; Mise en gras du texte du contrôle précédent (Label4)
	GUICtrlSetState(-1, $GUI_ONTOP)
	GUICtrlSetColor(-1, $color_green)
Else
	$Lb4 = GUICtrlCreateLabel("BIOS PAS A JOUR", 75, 200, 320, 24) ; Création du label4
	GUICtrlSetFont(-1, 20, 800, 0, "MS Sans Serif") ; Mise en gras du texte du contrôle précédent (Label4)
	GUICtrlSetState(-1, $GUI_ONTOP)
	GUICtrlSetColor(-1, $color_red)
EndIf
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) ; Arrière plan du label transparent
$Btn3 = GUICtrlCreateButton("Quitter", 216, 240, 150, 25) ; Création d'un bouton simple
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) ; Arrière plan du label transparent
$Btn4 = GUICtrlCreateButton("MODE NB", 33, 240, 150, 25) ; Création d'un bouton simple
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) ; Arrière plan du label transparent
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) ; Arrière plan du label transparent
; ########## Fin de la création de la GUI 2 ##########


GUISetState(@SW_SHOW, $GUI1) ; On affiche la GUI1 




While 1 ; Début de la boucle infinie

	$nMsg = GUIGetMsg() ; Récupération des messages GUI
	Switch $nMsg ; Début du sélecteur de cas
		Case $GUI_EVENT_CLOSE ; Si clic fermeture fenêtre GUI1 
			MsgBox(64, "", _
					@CRLF & "Merci d'avoir utiliser VERBIOS!!") ; Message
			Exit ; Fin du script

		Case $Btn1
			MsgBox(64, "", _
					@CRLF & "Merci d'avoir utiliser VERBIOS!!") ; Message
			Exit ; Fin du script
			GUISetState($GUI_EVENT_CLOSE) ; On ferme la fenetre

		Case $Btn2

			GUISetState(@SW_HIDE, $GUI1) ; On masque la GUI 1
			GUISetState(@SW_SHOW, $GUI2) ; On affiche la GUI 2

		Case $Btn4

			GUISetState(@SW_HIDE, $GUI2) ; On masque la GUI 2
			GUISetState(@SW_SHOW, $GUI1) ; On affiche la GUI 1

		Case $Btn3
			MsgBox(64, "", _
					@CRLF & "Merci d'avoir utiliser VERBIOS!!") ; Message
			Exit ; Fin du script
			GUISetState($GUI_EVENT_CLOSE) ; On ferme la fenetre



	EndSwitch ; Fin du sélecteur de cas
WEnd ; Fin de la boucle infinie

Désolé pour le roman, je précise que je débute avant de me faire insulter. :lol:
Merci

Re: Comparer 3 Variables

Posté : mer. 17 oct. 2018 22:13
par orax
Je ne sais pas exactement quelle comparaison tu souhaites faire.
Le code suivant vérifie que $versionB est supérieur ou égal à $versionD et que $versionB est supérieur ou égal à $versionE. Les deux conditions doivent être vraies.

Code : Tout sélectionner

$versionB="x540ya.320"
$versionD="x540ya.100"
$versionE="x540ya.200"
If $versionB >= $versionD And $versionB >= $versionE Then
	ConsoleWrite($versionB & @CRLF)
EndIf
Alors que si je remplace And par Or, il y a juste besoin qu'une des deux conditions soit vraie.

Code : Tout sélectionner

If $versionB >= $versionD Or $versionB >= $versionE Then

Re: Comparer 3 Variables

Posté : mer. 17 oct. 2018 22:17
par mikell
ça poserait un problème de le faire comme ça ?
if ($versionB >= $versionD) and ($versionB >= $versionE)
:?:

Re: Comparer 3 Variables

Posté : jeu. 18 oct. 2018 19:23
par jerem448
Ca ne fonctionne pas.. Le programme me retourne un "BIOS PAS A JOUR" même si la version correspond.
Je pense que le problème vient surtout du fait qu'une des 2 variables contient le texte du modèle car sur un Notebook la version du BIOS se présente sous la forme "X540YA.320" alors que sur un Desktop ou un All In One elle ne contient que la version donc "320".
Du coup la versionB est la version installée, et je dois la comparer à la valeur récupérer dans un fichier texte (NB_BIOS), j'ai donc créé la versionD sous la forme

Code : Tout sélectionner

($Model & '.' & $NB_BIOS)
alors que la versionE elle ne contient que la valeur donc $versionE = $NB_BIOS.
Je ne sais pas si je suis très clair désolé.
Merci

Le nouveau code avec une seule GUI

Code : Tout sélectionner

#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=solvarea.ico
#AutoIt3Wrapper_Compile_Both=y
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include "GUIConstantsEx.au3"
#include "StaticConstants.au3"
#include "WindowsConstants.au3"
#include "ColorConstants.au3"
#include <StringConstants.au3>

Local $Model = RegRead("HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\BIOS", "BaseBoardProduct") ;Récupération du modèle
Local $VersionB = RegRead("HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\BIOS", "Biosversion") ;Récupération de la version du BIOS
Local $NB_BIOS = "" ; Récupération de la valeur dans le fichier NB_BIOS
$SPN = RegRead("HKLM\HARDWARE\DESCRIPTION\System\BIOS", "BaseBoardProduct")
$NB_BIOS = IniRead("NB_BIOS.ini", "BIOS", $SPN, "")
Local $VersionD = ($Model & '.' & $NB_BIOS)
Local $VersionE = ($NB_BIOS)

;~ GUI1

$GUI1 = GUICreate("Verbios 7.0", 800, 400, -1, -1) ; Création de la GUI1
$fond = GUICtrlCreatePic("LOGO.jpg", 0, 10, 400, 90)
GUICtrlSetState($Fond, $GUI_DISABLE)
Opt("GUICoordMode", 5)
$Lb1 = GUICtrlCreateLabel("Modele", 70, 110, 320, 24) ; Création du label1
GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif") ; Mise en gras du texte du contrôle précédent (Label1)
GUICtrlSetState(-1, $GUI_ONTOP)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) ; Arrière plan du label transparent
$Lb11 = GUICtrlCreateLabel(" = " & $Model, 250, 110, 320, 24) ; Création du label1
GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif") ; Mise en gras du texte du contrôle précédent (Label1)
GUICtrlSetState(-1, $GUI_ONTOP)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) ; Arrière plan du label transparent
$Lb2 = GUICtrlCreateLabel("Version Installee", 70, 140, 320, 24) ; Création du label2
GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif") ; Mise en gras du texte du contrôle précédent (Label2)
GUICtrlSetState(-1, $GUI_ONTOP)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) ; Arrière plan du label transparent
$lb21 = GUICtrlCreateLabel(" = " & $VersionB, 250, 140, 320, 24)
GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif") ; Mise en gras du texte du contrôle précédent (Label1)
GUICtrlSetState(-1, $GUI_ONTOP)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) ; Arrière plan du label transparent
$Lb3 = GUICtrlCreateLabel("Version à Jour", 70, 170, 320, 24) ; Création du label3
GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif") ; Mise en gras du texte du contrôle précédent (Label3)
GUICtrlSetState(-1, $GUI_ONTOP)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) ; Arrière plan du label transparent
$Lb31 = GUICtrlCreateLabel(" = " & $NB_BIOS, 250, 170, 320, 24) ; Création du label1
GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif") ; Mise en gras du texte du contrôle précédent (Label1)
GUICtrlSetState(-1, $GUI_ONTOP)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) ; Arrière plan du label transpare

GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) ; Arrière plan du label transparent
$Btn1 = GUICtrlCreateButton("Quitter", 216, 240, 150, 25) ; Création d'un bouton simple
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) ; Arrière plan du label transparent
$Btn8 = GUICtrlCreateButton("Mise à Jour NB_BIOS", 33, 290, 334, 50) ; Création d'un bouton simple


GUISetState(@SW_SHOW, $GUI1) ; On affiche la GUI1 



;~ 			If $versionB >= $versionD And $versionB >= $versionE Then
;~ 			If $versionB >= $versionD Or $versionB >= $versionE Then
			if ($versionB >= $versionD) and ($versionB >= $versionE) Then
			$Lb4 = GUICtrlCreateLabel("BIOS A JOUR", 110, 200, 320, 24) ; Création du label4
			GUICtrlSetFont(-1, 20, 800, 0, "MS Sans Serif") ; Mise en gras du texte du contrôle précédent (Label4)
			GUICtrlSetState(-1, $GUI_ONTOP)
			GUICtrlSetColor(-1, $color_green))
		Else
			$Lb4 = GUICtrlCreateLabel("BIOS PAS A JOUR", 75, 200, 320, 24) ; Création du label4
			GUICtrlSetFont(-1, 20, 800, 0, "MS Sans Serif") ; Mise en gras du texte du contrôle précédent (Label4)
			GUICtrlSetState(-1, $GUI_ONTOP)
			GUICtrlSetColor(-1, $color_red)

		EndIf



While 1 ; Début de la boucle infinie

	$nMsg = GUIGetMsg() ; Récupération des messages GUI
	Switch $nMsg ; Début du sélecteur de cas
		Case $GUI_EVENT_CLOSE ; Si clic fermeture fenêtre GUI1 
			MsgBox(64, "", _
					@CRLF & "Merci d'avoir utilisé VERBIOS!!") ; Message
			Exit ; Fin du script

		Case $Btn1
			MsgBox(64, "", _
					@CRLF & "Merci d'avoir utilisé VERBIOS!!") ; Message
			Exit ; Fin du script
			GUISetState($GUI_EVENT_CLOSE) ; On ferme la fenetre



	EndSwitch ; Fin du sélecteur de cas
WEnd ; Fin de la boucle infinie


Re: Comparer 3 Variables

Posté : ven. 19 oct. 2018 05:52
par caramen
Si tu es sur que ton bios qui renvoi la valeur 320 est un bios X540YA.320

Ce que tu peux faire c'est importer la value. Puis dire a ton script que si il lit une value egale a 320 alor il l'a change en X540YA.320

Exemple :
If $Myvalue = "320" Then
         $Myvalue = "X540YA.320"
EndIF
Bien sur cela est faisable que si la valeur 320 correspond uniquement a X540YA.320.
Sinon il faudra que tu trouve une autre valeur que seul les 320 ont.

Dans ce cas tu ajoute une condition....
If $Myvalue = "320" And $2mValeurUnique320 = "WhatEverIWant" Then
         $Myvalue = "X540YA.320"
EndIF
Avec ca, si ton script fonctionne avec la valeur "X540YA.320" il fonctionnera aussi avec 320.

Re: Comparer 3 Variables

Posté : ven. 19 oct. 2018 14:08
par mikell
Tu peux aussi formater ta valeur en extrayant les chiffres voulus avec une expression régulière, par exemple :

$Myvalue = "320"
$v1 = StringRegExpReplace($Myvalue, '.*?(\d+)$', "$1")

$Myvalue = "X540YA.320"
$v2 = StringRegExpReplace($Myvalue, '.*?(\d+)$', "$1")

$Myvalue = "WhatEverIDontWantx320"
$v3 = StringRegExpReplace($Myvalue, '.*?(\d+)$', "$1")

Msgbox(0,"", $v1 & @crlf & $v2 & @crlf & $v3)

Re: Comparer 3 Variables

Posté : ven. 19 oct. 2018 15:19
par caramen
Ou Ceci :p . ^^ :

$sString = StringRight("X540YA.320", 3)
$sString2 = StringRight("320", 3)
$sString3 = StringRight("WhatEverIDontWant.320", 3)



MsgBox(0, "$sString", "Les 3 chiffres de droite : " & $sString)
MsgBox(0, "$sString2", "Les 3 chiffres de droite : " & $sString2)
MsgBox(0, "$sString3", "Les 3 chiffres de droite : " & $sString3)

Re: Comparer 3 Variables

Posté : lun. 22 oct. 2018 18:25
par jerem448
Désolé pour le suspense :lol:
J'ai utilisé la solution de mikell le stringregexpreplace et ça a l'air de fonctionner chez moi, je test demain au taff sur plusieurs machines et je vous confirme.
Merci

Re: Comparer 3 Variables

Posté : mar. 23 oct. 2018 19:55
par jerem448
Je reviens pour vous confirmer que tout fonctionne très bien.
Merci à tous.