je fait parti de la liste francophone de NVDA (lecteur d'écran libre pour non voyants)
une personne de framakey avait demandé au responsable de la liste, de reguarder les logiciels libre et lanceur qui serai accessible avec nvda, pour faire une framakey accessible, c'est pour cette raison qu'on est entrain de travailler sur une nvda key ou nous chercheons tous les logiciels portables et accessible avec NVDA, nous avons vu qu'aucun lanceur d'application ne l'était vraiement, c'est allors que je me suis mis a essayer d'en créer un en autohotkey.
le lanceur fonctionne bien avec une liste contenant les programmes en vrac.
Par contre nous sommes entrain de travailler sur une version où on choisirait une catégorie, puis selon le choix les logiciels de cette catégorie sont affichés. puis l'utilisateur peux revenir avec le clavier a la liste des catégories pour en choisir une autre.
Pour cela nous devons remplacer le contenu d'une listbox par un nouveau contenu mais la j'ai du mal avec la fonction GuiControl, laliste est désespérément vide, malgrè que la variable qui lui est affecté contient ce que devrait contenir la liste.
voici mon code. sûrement que vous le trouverez pas optimisé car je suis débutant en autohotkey :
bureau_portable.ahk :
- Code: Tout sélectionner
Version = r8
NomDuScript = Bureau Portable %Version%
;----------------------------------------------------------------------------------------------------------------------------------------
; Nom : Bureau Portable
; Language: Français
; Platform: WinXP
; Auteurs: Luc S, Michel Such
; AutoHotkey Version: 1.0.47
; Version : Alpha rrelease 1
; Lissence : GPL
; Description : Lanceur des applications de la nvda key
;
; Script Function:
; Template script (you can customize this template by editing "ShellNew\Template.ahk" in your Windows folder)
;
#NoTrayIcon
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
; Le fichier .ini doit avoir le même nom que le programme
; ce qui permet de copier le programme sous des noms différents
; avec des .ini différents
SplitPath, A_ScriptName,,,, ScriptNoExt
ScriptIni = %ScriptNoExt%.ini
; Recherche du titre de la fenêtre
IniRead WinTitle, %ScriptIni%, Fenetre, Titre, False ;lit le titre de la fenêtre
if WinTitle = False ; Titre non défini
{
WinTitle = %NomDuScript% - NVDA Key ; Titre par défaut
}
; Lancement de NVDA
Run, nvda\nvda.exe
Gosub TestIFMenus
;initialiser la fenêtre avec le texte et la liste
Gui, Font, S12 CDefault, Arial ; Choix de la police d'affichage du logiciel et de sa taille
Gui, Add, Text, x6 y10 w250 h20, Choisissez une Application
Gui, Add, ListBox, vChoice w500 h300 hscroll vscroll AltSubmit, %items%
Gui, Add, Button, vSend gValideMenu x110 y340 w60 h21 +Default, &Valider
Gui, Add, Button, vCancel gGuiClose x260 y340 w60 h21, Annuler
;création de la fenêtre du sous-menu
listitems =
Gui, 2:Font, S12 CDefault, Arial ; Choix de la police d'affichage du logiciel et de sa taille
Gui, 2:Add, Text, x6 y10 w250 h20, Choisissez une Application
Gui, 2:Add, ListBox, vChoiceApp w500 h300 hscroll vscroll AltSubmit,
Gui, 2:Add, Button, vSend gValide x110 y340 w60 h21 +Default, &Valider
Gui, 2:Add, Button, vCancel gGuiClose x260 y340 w60 h21, Annuler
Gosub ShowMainWindow
;la touche échap a pour effet de quitter imédiatement le programme
Escape::
Gosub GuiClose
return
; la touche backspace a pour effet de revenir au premier menu
BS::
Gui, submit, ; fait disparaitre la fenêtre
Gosub ShowMainWindow ; affiche le menu principal
return
;--------------------------------------------------------------------------------------------
; Fonctions
;------------------------------------------------------------------------------------------
; fonction qui affiche la fenêtre du programme
ShowMainWindow:
Gui, Show,, %Wintitle%
return
;----------------------------------------------------------------------------------------------
; affiche le sous-menu
ShowSubMenu:
MsgBox, Contenu de la variable de la liste `n %listitems%
GuiControl,, ChoiceApp, %listitems%
Gui, 2:Show,, %Wintitle%
return
;-----------------------------------------------------------------------------------------------
; teste si il y a plusieurs menus
TestIFMenus:
IniRead MenuName, %ScriptIni%, Menus, MenuName1, False ; teste si il y a plusieurs menus
if MenuName = False ; si il n'y à pas plusieurs menus les variables sont remplit avec false,
{
Menus = 0
Gosub ReadItemsInIniFile ; il n'y a pas plusieurs menus, donc on lis les programmes normalement
}
else
{
Menus = 1
Gosub ReadMenuInIniFile ; lance la fonction qui lis la liste des menus dans le fichier ini
}
return
;-----------------------------------------------------------------------------------------------------
; fonction qui lis la liste des menus dans le fichier ini
ReadMenuInIniFile:
MenuCount = 1
Loop ; boucle sans fin se termine uniquement quand il n'y a plu de menus
{
IniRead MenuName, %ScriptIni%, Menus, MenuName%MenuCount%, False
if MenuName = False ; si on arrive a la fin des menus les variables sont remplit avec false,
{
break ; On est arrivé a la fin de la liste des menus, donc on sort de la boucle
}
if MenuCount = 1 ; si c'est la première fois qu'on ajoute un élément a la liste
{
items = %MenuName%|| ; ajouter le nom du menu qu'on atrouvé dans le fichier ini
}
else ; sinon dans tous les autres cas
{
items = %items%%MenuName%| ; on concatenne la liste avec les nouveaux éléments trouvés dans le fichier ini
}
MenuCount +=1 ; on incrémente le compteur d'application
}
return
;-------------------------------------------------------------------------------------------------------------
; défini et affecte la variable items, qui remplira la zonne de liste et dont les valeurs sont dans un fichier ini
ReadItemsInIniFile:
IniCount = 1 ;Met a 1 le compteur des sections du fichier ini
loop ; boucle sans fin se termine uniquement quand le fichier ini est terminé
{
IniRead AppName, %ScriptIni%, App%IniCount%, AppName, False ;lit le nom du programme
if AppName = False ; si on arrive a la fin du fichier ini les variables sont remplit avec false,
{
break ; on sort de la boucle loop
}
if IniCount = 1 ; si c'est la première fois qu'on ajoute un élément a la liste
{
items = %AppName%|| ; ajouter le nom de l'application qu'on atrouvé dans le fichier ini
}
else ; sinon dans tous les autres cas
{
items = %items%%AppName%| ; on concatenne la liste avec les nouveaux éléments trouvés dans le fichier ini
}
IniCount +=1 ; on incrémente le compteur d'application
}
return
;-----------------------------------------------------------------------------------------------
; Met dans la liste les applications qui correspondent au menu choisit
ReadItemsWithMenuInIniFile:
IniCount = 1 ;Met a 1 le compteur des sections du fichier ini
MenuCount = 1 ; met a un le compteur d'items du menu
loop ; boucle sans fin se termine uniquement quand le fichier ini est terminé
{
IniRead AppName, %ScriptIni%, App%IniCount%, AppName, False ;lit le nom du programme
IniRead MenuNumber, %ScriptIni%, App%IniCount%, MenuNumber, False ;lit le numéro du menu
if AppName = False ; si on arrive a la fin du fichier ini les variables sont remplit avec false,
{
break ; on sort de la boucle loop
}
if MenuNumber = %Choice% ; si le numéro du menu correspond au choix
{
if MenuCount = 1 ; si c'est la première fois qu'on ajoute un élément a la liste
{
listitems = %AppName% || ; ajouter le nom de l'application qu'on atrouvé dans le fichier ini
MsgBox, Première fois %listitems%
AppNumber = %IniCount% ; Enregistre le numéro de l'application
}
else ; sinon dans tous les autres cas
{
listitems = %listitems%%AppName%| ; on concatenne la liste avec les nouveaux éléments trouvés dans le fichier ini
AppNumber = %AppNumber%%IniCount% ; on concatène les numéros a la suite
}
MenuCount += 1
}
IniCount +=1 ; on incrémente le compteur d'application
}
return
;-----------------------------------------------------------------------------------------------
; cette fonction est lancé quand on valide sur la liste, elle renvoie le choix dans la variable Choice et l'exécute
Valide:
Gui,Submit,NoHide
GuiControlGet, ChoiceApp ; Renvoie le choix fait par l'utilisateur
StringMid, number, AppNumber, ChoiceApp, 1
IniRead AppPath, %ScriptIni%, App%number%, AppPath, False ; enregistre le chemin pourlancer le programme
Run, %AppPath%
return
;----------------------------------------------------------------------------------------------------------------------------------------
; sub qui valide la liste des menus
ValideMenu:
if Menus = 1
{
Gui, submit, ; fait disparaitre la fenêtre
GuiControlGet, Choice ; Renvoie le choix fait par l'utilisateur
llistitems = ""
Gosub ReadItemsWithMenuInIniFile ; raffraichit la liste avec les nouvelles valeurs
Gosub ShowSubMenu ; raffiche le sous-menu
}
else
{
Gui,Submit,NoHide
GuiControlGet, Choice ; Renvoie le choix fait par l'utilisateur
IniRead AppPath, %ScriptIni%, App%Choice%, AppPath, False ; enregistre le chemin pourlancer le programme
Run, %AppPath%
}
return
;-------------------------------------------------------------------------------------------------------------------------------------
;Ferme le programme
GuiClose:
Gui cancel
GuiEscape:
ExitApp
J'ai mis deux msgbox pour débugué pour voir si la variable qui contient les valeurs de la liste était bien affecté, et c'est le cas.
Merci pour vôtre aide
Si vous voulz exécuter el programme, Vous pouvez télécharger la dernière version de la toute petite nvda key ici :
http://www.nvda.fr/dl/NVDAKey.zip
Merci pour vôtre aide, merci d'expliquer vos modiffications ou par des comentaires ou par des explications car je suis débutant.
[Edit Pseudogaëtan]Correction d'une faute de frappe dans le sujet[/Edit Pseudogaëtan]
-
lucs
- Messages : 16