J'ai besoin de votre aide pour interdire des caractères dans une InputBox. J'ai trouvé quelques exemples sur le forum et internet, mais tout cela me paraissais bien compliqué ...
Dans le cadre de mon script (toujours le même =D), j’amène l'utilisateur à potentiellement changer le nom de PC ou du WG. Je souhaiterais y faire interdire les caractères suivant : espace < > , ? ; . : / ! § ù % ^ ¨ $ £ ¤ & é ~ " # ' { ( [ | è ` \ ç ^ à @ ) ° ] = + } * µ
(Pour faire simple, je veux limiter les nom du PC et du WG de "aA" à "zZ", "0" à "9" et "-" ou "_")
Je souhaiterais que si n'importe le quel de ces caractères est saisi : soit simplement empêcher de le mettre (que l'InputBox n’interprète pas ces caractères), soit, ouvrir une MsgBox indiquant qu'un caractère interdit a été saisi. Je préfère l'option 1, mais je ne sait pas ce qu'il est possible de faire.
J'ai bien pensé à HotKeySet qui appel une fonction contenant un Sleep (1), mais cela me fait rajouter une ligne par caractère interdit, et cela ne se limite pas qu'à l'InputBox.
Voila mon script réduit au strict minimum (PoC):
Code : Tout sélectionner
#include <APIShellExConstants.au3>
#include <AutoItConstants.au3>
#include <ButtonConstants.au3>
#include <Constants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <ProgressConstants.au3>
#include <StaticConstants.au3>
#include <TabConstants.au3>
#include <WinAPIShellEx.au3>
#include <WinAPISys.au3>
#include <WindowsConstants.au3>
#RequireAdmin ;Ce script nécessite les droits d'administrateur.
#Region ### GUI ###
;Crée la GUI et l'affiche.
Global $GUIPOW10 = GUICreate("POW10", 487, 657, 100, 104)
Global $TabSheet = GUICtrlCreateTab(8, 70, 473, 493)
Global $TabVarious = GUICtrlCreateTabItem("Paramétrages divers")
Global $CBPCName = GUICtrlCreateCheckbox("Changer le nom de l'ordinateur", 16, 102, 457, 17)
Global $InputPCName = GUICtrlCreateInput("", 35, 124, 250, 21)
GUICtrlSetState(-1, $GUI_DISABLE)
GuiCtrlSetLimit(-1,15)
GUICtrlSetTip(-1, "Saisir le nouveau nom de l'ordinateur." & @CRLF & "De ""aA"" à ""zZ"", ""0"" à ""9"", ""-"" et ""_""." & @CRLF & "Ne doit pas être composé que de chiffres.")
Global $CBWGName = GUICtrlCreateCheckbox("Changer le nom du groupe de travail.", 16, 150, 457, 17)
Global $InputWGName = GUICtrlCreateInput("", 35, 172, 250, 21)
GUICtrlSetState(-1, $GUI_DISABLE)
GuiCtrlSetLimit(-1,15)
GUICtrlSetTip(-1, "Saisir le nouveau nom du groupe de travail" & @CRLF & "De ""aA"" à ""zZ"", ""0"" à ""9"", ""-"" et ""_"".")
GUICtrlCreateTabItem("")
Global $ProgressBar = GUICtrlCreateProgress(8, 573, 471, 17)
Global $LabelStatus = GUICtrlCreateLabel ("Prêt", 8, 599, 473, 14)
Global $ButtonRestoreSystem = GUICtrlCreateButton("Point de Restauration", 8, 622, 115, 25)
Global $ButtonClose = GUICtrlCreateButton("Fermer", 325, 622, 75, 25, $BS_DEFPUSHBUTTON)
Global $ButtonApply = GUICtrlCreateButton("Appliquer", 405, 622, 75, 25)
GUISetState(@SW_SHOW)
#EndRegion ### GUI ###
#Region ### Variables ###
Global $ProgressBarStatusStart = 0 ;Valeur de départ de la ProgressBar.
Global $ProgressBarStatusMax = 60 ;Valeur MAX d'incrémentation de la ProgressBar.
Global $RebootNeeded = False ;Devient vrai si un rédémarrage est nécessaire en fonction des paramètres appliqués.
Global $RAM = Number (_WinAPI_GetPhysicallyInstalledSystemMemory()/1024/1024) ;Récupère le nombre de Go de RAM installé.
Global $CalcSWAP = Number (_WinAPI_GetPhysicallyInstalledSystemMemory()/1024*1.5) ;Calcul 1,5 fois la RAM installé afin d'être défini dans le SWAP.
Global $StopScript = False ;Devient vrai si le script doit être arrêté.
#EndRegion ### Variables ###
#Region ### Fonctions de routine ###
Func _IsChecked($idControlID) ;Renvoie vrai si la CheckBox passée en paramètre est cochée.
Return BitAND(GUICtrlRead($idControlID), $GUI_CHECKED) = $GUI_CHECKED
EndFunc ;_IsChecked
Func _IncProgressBarStatus() ;Incrémente la ProgressBar.
$ProgressBarStatusStart += 1
GUICtrlSetData ($ProgressBar, $ProgressBarStatusStart/$ProgressBarStatusMax*100)
EndFunc ;_IncProgressBarStatus
#EndRegion ### Fonctions de routine ###
#Region ### Fonctions évènements ###
Func _EnableOrDisableInputPCName() ;Active ou desactive l'InputBox selon que la case "Changer le nom de l'ordinateur" est cochée ou non.
if _IsChecked($CBPCName) Then
GUICtrlSetState($InputPCName,$GUI_ENABLE)
else
GUICtrlSetState($InputPCName,$GUI_DISABLE)
EndIf
EndFunc ;_EnableOrDisableInputPCName
Func _EnableOrDisableInputWGName() ;Active ou desactive l'InputBox selon que la case "Changer le nom du groupe de travail" est cochée ou non.
if _IsChecked($CBWGName) Then
GUICtrlSetState($InputWGName,$GUI_ENABLE)
else
GUICtrlSetState($InputWGName,$GUI_DISABLE)
EndIf
EndFunc
Func _RestoreSystem() ;Ouvre les paramètres sytème avancés à l'onglet "Protection du système" et désactive la GUI tant que les paramètres sytème avancés ne sont pas fermés.
EndFunc ;_RestoreSystem
Func _Close() ;Affiche un message d'annulation et quitte le script.
MsgBox (64, "Annulation", "Vous avez annulé le programme de paramétrage et d'optimisation de Windows 10" & @CRLF & "Aucun changement n'a été apporté au système")
$StopScript = True
EndFunc ;_Close
Func _Apply() ;Désactive la GUI et applique les actions des CheckBox cochés avant d'afficher un message de fin ou une demande de redémarrage si nécessaire.
GUISetState (@SW_DISABLE) ;Désactive la GUI.
GUICtrlSetData ($LabelStatus, "Terminé")
#Region ### Confirmation de fin et demande de redémarrage
If $RebootNeeded = True Then ;Si un reboot est nécessaire, lance une demande de redémarrage.
$RebootMsg = MsgBox (68, "Terminé", "Le paramétrage et l'optimisation de Windows 10 sont maintenant terminés." & @CRLF & "Un redémarrage est nécessaire." & @CRLF & @CRLF & _
"Voulez-vous redémarrer maintenant ?")
If $RebootMsg = 6 Then ;Si on clique sur "Oui", lance le redémarrage.
Sleep (500)
Shutdown (6)
EndIf
Else ;Si le redémarrage n'est pas nécessaire, annononce la fin du programme.
MsgBox (64, "Terminé", "Le paramétrage et l'optimisation de Windows 10 sont maintenant terminés.")
EndIf
$StopScript = True ;Quitte le programme en quittant la boucle.
#EndRegion ### Confirmation de fin et demande de redémarrage
EndFunc ;_Apply
#EndRegion ### Fonctions évènements ###
#Region ### Association des évènements ###
Opt ("GUIOnEventMode", 1) ;Active le mode évènement.
GUISetOnEvent ($GUI_EVENT_CLOSE, "_Close")
GUICtrlSetOnEvent ($CBPCName, "_EnableOrDisableInputPCName")
GUICtrlSetOnEvent ($CBWGName, "_EnableOrDisableInputWGName")
GUICtrlSetOnEvent ($ButtonRestoreSystem, "_RestoreSystem")
GUICtrlSetOnEvent ($ButtonClose, "_Close")
GUICtrlSetOnEvent ($ButtonApply, "_Apply")
#EndRegion ### Association des évènement ###
While Not $StopScript
Sleep (100)
WEnd
Comme d'habitude, merci d'avance pour votre aide !