Nous sommes le Jeu 19 Juin, 2025 21:29
Supprimer les cookies

Page 1 sur 21, 2 Suivantlanceur d'applications portable en autohotey

Image Image Forum dédié à notre projet de clé USB nomade libre sous Windows

Ven 18 Juil, 2008 14:09

Bonjour

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]
Dernière édition par lucs le Sam 19 Juil, 2008 16:49, édité 2 fois au total.
lucs

Messages : 16

Sam 19 Juil, 2008 13:39

Bonjour

Bon j'y ai passé toute la soirée (et une partie de la nuit) à essayer de faire marcher ton code; alors j'ai fini par trouver à force de fouiller dans la doc.

Ta ligne "GuiControl,, ChoiceApp, %listitems%" ben il faut mettre "GuiControl, 2: , ChoiceApp, %listitems%" . :D

MAIS :( si cela débloque l'affichage de la liste, cela fait hélas apparaitre un nouveau problème : les listes s'ajoutent à chaque appel !! Pourtant dans la doc ils citent ce cas en exemple et ils disent bien que cela remplace la valeur mais bernique. Alors je vais faire un code simplifié pour reproduire le bug et le soumettre sur le forum d'AutoHotKey.

On va y arriver on va y arriver

Bravo pour ton code : c'est bien organisé, bien documenté et clair.
Jeannot40

Messages : 28

Sam 19 Juil, 2008 14:52

félicitations Jeannot40, sitôt arrivé et tu suis déjà les conseils de pyg :wink:

En tout cas merci pour ton implication, et bravo à tous les deux, et croisons les doigts pour une longue vie à la nvda key.

Cordialement
L'homme n'est pas fait pour travailler et la preuve, c'est que ça le fatigue. (Marcel Proust)
dedenimes

Messages : 2410
Géo : proche de Nîmes

Sam 19 Juil, 2008 14:56

Justement je n'arrivai pas a comprendre le deuxième paramètre de la fonction guicontrôl, maintenant grâce a toi je l'ai compris.

Oui ça fait longtemps que ej programme et comme je code par moments, j'aime bien comprendre mon code quand j'y reviens apprès un ou deux mois sans avoir programmé.

Oui dans un essai que j'ai fait avec un code plus simple, j'avai cru comprendre qu'il y avait aussi ce bug, en attendant qu'il sois réglé, n'y aurait-il pas une manière de le contourné en supprimant le contenu de la zone de liste par exemple ?

j'avais oublié de joindre avec le fichier ini qui vas bien :

bureau_portable.ini :
Code: Tout sélectionner

[Fenetre]
Titre=NVDA Key de Michel

[Menus]
MenuName1="Bureautique"
MenuName2="Internet"
MenuName3="Multimédia"

[App1]
AppName="Bloc-notes"
AppPath="notepad.exe"
MenuNumber="1"

[App2]
AppName="Mozilla Firefox"
AppPath="apps\FirefoxPortable\FirefoxPortable.exe"
MenuNumber="2"

[App3]
AppName="Mozilla Thunderbird"
AppPath="apps\ThunderbirdPortable\ThunderbirdPortable.exe"
MenuNumber="2"

[App4]
AppName="Screamer Radio"
AppPath="apps\Screamer Radio\screamer.exe"
MenuNumber="3"

[App5]
AppName="VLC MediaPlayer"
AppPath="apps\VLCPortable\VLCPortable.exe"
MenuNumber="3"



Voila, merci encore, a toi, et a l'équipe de framakey pour leur accueil

Luc
lucs

Messages : 16

Sam 19 Juil, 2008 16:44

Ah oui cela m'aurait bien aidait le fichier ini : j'ai bin du passer 2 heures à chercher comment il fallait l'articuler et à le reconstituer:D

Pas grave cela m'a permit de bien comprendre le code.

Efficace le forum AutoHotKey : j'ai eu la réponse en 10 mn http://www.autohotkey.com/forum/viewtopic.php?t=33849 : il suffit de débuter la nouvelle liste par un | et tout rentre dans l'ordre.

Voili voilà ça marche :D :D :D
Jeannot40

Messages : 28

Sam 19 Juil, 2008 21:20

Rebonjour

Merci beaucoup jano, et merci aux membres du forum d'autohotkey pour leur rapidité. en passant une idée, ça serai pas mal d'avoir un forum ou un sujet sur autohotkey dans un forum en français, a ma conaissance il n'en existe pas.

Bon ça marche j'ai suivi tes indications et ait fait d'autres modifs etc etc...

Mais il me reste un problème, j'ai affecté deux touches du clavier a deux fonctions, et hélas quand on lance des programmes depuis le lanceur ces deux touches sont inutilisable dans les programmes, car le lanceur reste ouvert.

Comment les arrêter juste le temps où on utilise le programme, et les remettre en fonction quand on revient sur la fenêtre du lanceur ??

voici le code avec quelques nouvautées

bureau_portable.ahk :
Code: Tout sélectionner

Version = r16
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 16
; 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 D'un autre programme si nécessaire
IniRead Start, %ScriptIni%, Fenetre, Start, False
if Start <> False ; Lancer le programme
{
   Run, %Start%
}

   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 :
   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, &Quiter

   ;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 gReturnMainMenu x260 y340 w60 h21, &Retour

   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
;------------------------------------------------------------------------------------------

; sub qui est lancé quand on clique sur le bouton Retour
ReturnMainMenu:
   Gui, submit,                               ; fait disparaitre la fenêtre
   Gosub ShowMainWindow                      ; affiche le menu principal
return


;------------------------------------------------------------------------------



; fonction qui affiche la fenêtre du programme

ShowMainWindow:   
   Gui, Show,,   %Wintitle%
return

;----------------------------------------------------------------------------------------------

; affiche le sous-menu

ShowSubMenu:
   GuiControl, 2: , 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
            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                      ; extrait le numéro de l'aplication a lancer
   IniRead AppPath, %ScriptIni%, App%number%, AppPath, False      ;lis le chemin pour lancer le programme
   IniRead AppDir, %ScriptIni%, App%number%, AppDir, False      ;lit le répertoire de travail si précisé
   if AppDir = False
   {
      Run, %AppPath%                                             ; exécute le programme choisit par l'utilisateur
   }
   else
   {
      Run, %AppPath%, %Appdir%                                    ; exécute le programme choisit par l'utilisateur
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      ;lis le chemin pour lancer le programme
      IniRead AppDir, %ScriptIni%, App%Choice%, AppDir, False      ;lit le répertoire de travail si précisé
      if AppDir = False
      {
         Run, %AppPath%                                             ; exécute le programme choisit par l'utilisateur
      }
      else
      {
         Run, %AppPath%, %Appdir%                                    ; exécute le programme choisit par l'utilisateur
      }
   }
return

;-------------------------------------------------------------------------------------------------------------------------------------


;Ferme le programme

GuiClose:
   Gui cancel
   GuiEscape:
   ExitApp




bureau_portable.ini :
Code: Tout sélectionner

[Fenetre]
Titre="NVDA Key de Michel"
Start="nvda\nvda.exe"

[Menus]
MenuName1="Bureautique"
MenuName2="Internet"
MenuName3="Multimédia"


[App1]
AppName="Bloc-notes"
AppPath="notepad.exe"
MenuNumber="1"


[App2]
AppName="Mozilla Firefox"
AppPath="apps\FirefoxPortable\FirefoxPortable.exe"
MenuNumber="2"

[App3]
AppName="Mozilla Thunderbird"
AppPath="apps\ThunderbirdPortable\ThunderbirdPortable.exe"
MenuNumber="2"

[App4]
AppName="Screamer Radio"
AppPath="cmd.exe"
AppDir="apps\Screamer Radio"
MenuNumber="3"


[App5]
AppName="VLC MediaPlayer"
AppPath="apps\VLCPortable\VLCPortable.exe"
MenuNumber="3"



Voila je vous remerci encore, grâce a votre patiance et a votre ténassité, le projet de lanceur avance rapidement.
lucs

Messages : 16

Sam 19 Juil, 2008 23:00

lucs a écrit: ...
Mais il me reste un problème, j'ai affecté deux touches du clavier a deux fonctions, et hélas quand on lance des programmes depuis le lanceur ces deux touches sont inutilisable dans les programmes, car le lanceur reste ouvert.

Comment les arrêter juste le temps où on utilise le programme, et les remettre en fonction quand on revient sur la fenêtre du lanceur ??
...


ça c'est pas compliqué :

Code: Tout sélectionner
  ;la touche échap a pour effet de quitter imédiatement le programme
   Escape::
   WinGetActiveTitle , ActiveWin
   if ActiveWin = %WinTitle%
        Gosub GuiClose
   return

   ; la touche backspace a pour effet de revenir au premier menu
   BS::
      WinGetActiveTitle , ActiveWin
   if ActiveWin = %WinTitle%
     {
     Gui, submit,                               ; fait disparaitre la fenêtre
      Gosub ShowMainWindow       ; affiche le menu principal
     }
   return


Un petit raffinement que l'on pourrait rajouter : c'est le double clic sur un élément; il me semble avoir lu hier que c'était possible je recherche.

Edit : pardon ça marche pas mon truc : cela bloque la clé pour AutoHotKey, mais hélas aussi pour tout les autres logiciels. J'ai une autre piste que j'explore.
Jeannot40

Messages : 28

Dim 20 Juil, 2008 10:52

Merci Jeanot mais je viens de trouver, voici le code :

Code: Tout sélectionner
#IfWinActive ahk_class AutoHotkeyGUI             ; si la fenêtre du programme est active
   ;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
#IfWinActive


Par contre, la classe de la fenêtre est commune a tous les programmes qui ont été faits avec le gui d'autohotkey, peut-on modiffier la classe de la fenête pour en créer une personnalisé affin que les touches ne soient active que dans cette fenêtre.

Merci
lucs

Messages : 16

Dim 20 Juil, 2008 17:53

Super Luc je cherchais de ce côté mais j'arrivais pas à piger la syntaxe; grâce à toi j'ai compris. Maintenant, on peut rajouter les touches Entrée (Return) pour valider un élément, non ?

Bon le doubleclick ça marche : une fonction à rajouter :

Code: Tout sélectionner
;teste si un double click a été fait
DbleClick:                               
   IfNotEqual A_GuiControlEvent,DoubleClick ; si c'est bien un doubleclick car un simple click active aussi la fonction
   Return
   Else
   if ( A_GuiControl="Choice" and Menus=1) { ; si cela vient du mainmenu et qu'il y a des sous menu
      Gui , submit,
      gosub ValideMenu
      }
   else ; sinon on lance l'appli
   gosub Valide
Return   


Fonction à activer par un gDbleClick dans les 2 Gui de définition des ListBox.

Bon je suis pas certain que ça marche dans le cas où il n'y a pas de menu principal; à tester.
Jeannot40

Messages : 28

Dim 20 Juil, 2008 18:15

Bonjour

en fait le bouton valider est déclaré comme bouton par défaut, ce qui a pour effet de l'activer quand on appuy sur entré, du coup pas besoin de faire une fonction pou ça .

Je vais essayer ta fonction pour le double click mais je pese qu'il faut l'entouré des même test que tout a l'heure pour els touches, pour s'assurer que ça ne s'applique qu'à la fenêtre active non ?

je vais essayer ça et te tiens au courrent

merci et a plus
lucs

Messages : 16

Qui est en ligne ?

Utilisateur(s) parcourant actuellement ce forum : Aucun utilisateur inscrit