Registre Windows - Modifier une donnée
Publié : mer. 01/oct./2014 9:19
Bonjour. Je sollicite à nouveau votre aide efficace.
Action attendue :
Cahier des charges
Modifier à partir de PureBasic une valeur de la base de registre.
J'ai fait l'acquisition de deux voix françaises chez IVONA (Céline et Matthieu).
Je souhaite alterner dans une application PureBasic l'emploi de ces deux voix.
Une façon souple et légère consiste à changer une donnée de la base de registre comme le fait le panneau "Propriétés de la synthèse vocale".
Méthode utilisée :
Pour utiliser la voix masculine:
Global Chemin$ = GetCurrentDirectory()
Procedure Matthieu ()
Matthieu=RunProgram(Chemin$ + "ChangerVoix\BatMatthieu.bat","","")
RunProgram(Chemin$ + "ChangerVoix\Exit.bat","","")
EndProcedure
Pour utiliser la voix féminine:
Global Chemin$ = GetCurrentDirectory()
Procedure Celine ()
RunProgram(Chemin$ + "ChangerVoix\BatCéline.bat","","")
RunProgram(Chemin$ + "ChangerVoix\Exit.bat","","")
EndProcedure
Ces deux procédures lance respectivement un fichier batch:
Pour la voix Céline, le fichier nommé BatCéline.bat contient:
REG ADD HKCU\Software\Microsoft\Speech\Voices /v DefaultTokenID /t REG_SZ /f /d "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\IVONA 2 Voice Celine22"
Pour la voix Matthieu, le fichier BatMatthieu.bat contient:
REG ADD HKCU\Software\Microsoft\Speech\Voices /v DefaultTokenID /t REG_SZ /f /d "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\IVONA 2 Voice Mathieu22"
Le fichier Exit.bat contient simplement :
exit
A l'appel de l'une ou l'autre des ces deux procédures, l'invite de commande est ouverte, et apparaît à l'écran durant une durée variant d'une fraction de seconde jusqu'à 2 ou 3 secondes. Le changement de voix est parfaitement obtenu. Donc l'objectif est atteint. Ce qui ne ma plait pas, c'est l'apparition de la fenêtre noire de l'invite de commande du plus mauvais effet.
Pour pallier cet inconvénient, j'ai ajouter à la fin de RunProgram l'option #PB_Program_Hide, exemple :
Matthieu=RunProgram(Chemin$ + "ChangerVoix\BatMatthieu.bat","","",#PB_Program_Hide)
En espérant cacher l'invite de commande. mais dans ce cas la commande RunProgram n'exécute pas le changement de voix, et ceci sans message d'erreur. Mon application reste sur la même voix, quelque soit la procédure appelée.
J'ai modifié les paramètres de l'invite de commande (taille, position, couleur de fond, police.....). Mais RunProgram appelle toujours la même fenêtre noire, dont la position est aléatoire à l'écran.
Un autre moyen:
En espérant trouver une solution, j'ai tenté de mettre en oeuvre RunProgram en appelant cmd.exe, avec passage de paramètre :
RunProgram("cmd.exe","dir *.*","") pour faire un essai. Mais le passage de paramètre n'est pas effectué.
Ma demande:
Pouvez vous m'aider soit en améliorant la première solution (appel de l'une ou l'autre procédure, sans apparition de l'invite de commande), soit en en m'indiquant comment la deuxième solution (lancer cmd.exe avec passage de paramètre)?
Enfin, il existe peut être une autre solution permettant de modifier la base de registre sans passer par l'invite de commande. J'ai cherché une procédure sans trouver dans le forum.
D'avance merci.
Action attendue :
Cahier des charges
Modifier à partir de PureBasic une valeur de la base de registre.
J'ai fait l'acquisition de deux voix françaises chez IVONA (Céline et Matthieu).
Je souhaite alterner dans une application PureBasic l'emploi de ces deux voix.
Une façon souple et légère consiste à changer une donnée de la base de registre comme le fait le panneau "Propriétés de la synthèse vocale".
Méthode utilisée :
Pour utiliser la voix masculine:
Global Chemin$ = GetCurrentDirectory()
Procedure Matthieu ()
Matthieu=RunProgram(Chemin$ + "ChangerVoix\BatMatthieu.bat","","")
RunProgram(Chemin$ + "ChangerVoix\Exit.bat","","")
EndProcedure
Pour utiliser la voix féminine:
Global Chemin$ = GetCurrentDirectory()
Procedure Celine ()
RunProgram(Chemin$ + "ChangerVoix\BatCéline.bat","","")
RunProgram(Chemin$ + "ChangerVoix\Exit.bat","","")
EndProcedure
Ces deux procédures lance respectivement un fichier batch:
Pour la voix Céline, le fichier nommé BatCéline.bat contient:
REG ADD HKCU\Software\Microsoft\Speech\Voices /v DefaultTokenID /t REG_SZ /f /d "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\IVONA 2 Voice Celine22"
Pour la voix Matthieu, le fichier BatMatthieu.bat contient:
REG ADD HKCU\Software\Microsoft\Speech\Voices /v DefaultTokenID /t REG_SZ /f /d "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\IVONA 2 Voice Mathieu22"
Le fichier Exit.bat contient simplement :
exit
A l'appel de l'une ou l'autre des ces deux procédures, l'invite de commande est ouverte, et apparaît à l'écran durant une durée variant d'une fraction de seconde jusqu'à 2 ou 3 secondes. Le changement de voix est parfaitement obtenu. Donc l'objectif est atteint. Ce qui ne ma plait pas, c'est l'apparition de la fenêtre noire de l'invite de commande du plus mauvais effet.
Pour pallier cet inconvénient, j'ai ajouter à la fin de RunProgram l'option #PB_Program_Hide, exemple :
Matthieu=RunProgram(Chemin$ + "ChangerVoix\BatMatthieu.bat","","",#PB_Program_Hide)
En espérant cacher l'invite de commande. mais dans ce cas la commande RunProgram n'exécute pas le changement de voix, et ceci sans message d'erreur. Mon application reste sur la même voix, quelque soit la procédure appelée.
J'ai modifié les paramètres de l'invite de commande (taille, position, couleur de fond, police.....). Mais RunProgram appelle toujours la même fenêtre noire, dont la position est aléatoire à l'écran.
Un autre moyen:
En espérant trouver une solution, j'ai tenté de mettre en oeuvre RunProgram en appelant cmd.exe, avec passage de paramètre :
RunProgram("cmd.exe","dir *.*","") pour faire un essai. Mais le passage de paramètre n'est pas effectué.
Ma demande:
Pouvez vous m'aider soit en améliorant la première solution (appel de l'une ou l'autre procédure, sans apparition de l'invite de commande), soit en en m'indiquant comment la deuxième solution (lancer cmd.exe avec passage de paramètre)?
Enfin, il existe peut être une autre solution permettant de modifier la base de registre sans passer par l'invite de commande. J'ai cherché une procédure sans trouver dans le forum.
D'avance merci.