Page 1 sur 1

Lanceur d'applications

Publié : mar. 10/juin/2025 13:38
par Micoute
Bonjour à tous,

aujourd'hui, je viens vous offrir un lanceur d'applications tout simple, il suffit de choisir des applications qui peuvent vous servir souvent, le programme les enregistre dans un fichier texte appelé apps.txt dans le même répertoire que le lanceur.

Quand vous relancez le lanceur, vous sélectionnez l'application à lancer et cliquez le bouton "Lancer".

Code : Tout sélectionner

Enumeration Fichiers
  #Fichier
EndEnumeration
Enumeration fenetres
  #Fenetre_principale
EndEnumeration
Enumeration Gadgets
  #Btn_Ajouter
  #Btn_Lancer
  #Btn_Quitter
  #Lst_Applis
EndEnumeration
Enumeration Polices
  #Police
EndEnumeration

LoadFont(#Police, "Arial Nova", 12, #PB_Font_Bold)
SetGadgetFont(#PB_Default, FontID(#Police))

Procedure.s Extraire_Nom_de_Fichier(chemin$)
  ; Trouver la dernière barre oblique inversée pour isoler le nom du fichier
  position = FindString(chemin$, "\", -1)
  If position > 0
    ProcedureReturn Mid(chemin$, position + 1)
  Else
    ProcedureReturn chemin$
  EndIf
EndProcedure


Procedure ChargerApplications()
  If FileSize("apps.txt") = -1
    CreateFile(#Fichier, "apps.txt")
    CloseFile(#Fichier)
  EndIf

  If ReadFile(#Fichier, "apps.txt")
    Debug "Lecture du fichier..."
    While Not Eof(#Fichier)
      chemin$ = ReadString(#Fichier)
      
      ; Vérifie si c'est une URL ou un fichier
      If FindString(chemin$, "http", 1) > 0
        nomAffiche$ = chemin$  ; Garde l'URL telle quelle
      Else
        nomAffiche$ = GetFilePart(chemin$)  ; Extrait uniquement le nom du fichier
      EndIf
      
      Debug "Ajout : " + nomAffiche$
      AddGadgetItem(#Lst_Applis, -1, nomAffiche$)
    Wend
    CloseFile(#Fichier)
  Else
    Debug "Impossible de lire le fichier apps.txt"
  EndIf
EndProcedure

Procedure AjouterApplication()
  application$ = OpenFileRequester("Sélectionner une application", "", "", 0)
  If application$ <> ""
    fileName$ = Extraire_Nom_de_Fichier(application$)  ; Extraire le nom du fichier

    ; Enregistrer le chemin complet dans le fichier
    If OpenFile(#Fichier, "apps.txt", #PB_File_Append)
      WriteStringN(0, application$)
      CloseFile(#Fichier)

      ; Ajouter uniquement le nom du fichier dans la liste
      AddGadgetItem(#Lst_Applis, -1, fileName$)
    Else
      MessageRequester("Erreur", "Impossible d'ouvrir le fichier apps.txt")
    EndIf
  EndIf
EndProcedure

Procedure LancerApplication()
  indexSeletionne = GetGadgetState(#Lst_Applis)
  If indexSeletionne >= 0
    ; Lire le fichier pour récupérer le chemin complet correspondant
    If ReadFile(#Fichier, "apps.txt")
      i = 0
      While Not Eof(#Fichier)
        chemin$ = ReadString(#Fichier)
        If i = indexSeletionne
          RunProgram(chemin$)
          CloseFile(#Fichier)
          ProcedureReturn
        EndIf
        i + 1
      Wend
      CloseFile(#Fichier)
    EndIf
  Else
    MessageRequester("Erreur", "Aucune application sélectionnée !")
  EndIf
EndProcedure

OpenWindow(#Fenetre_principale, 1910, 0, 340, 300, "Lanceur d'Applications", #PB_Window_BorderLess)
ListViewGadget(#Lst_Applis, 10, 10, 320, 240)
ButtonGadget(#Btn_Ajouter, 10, 260, 100, 30, "Ajouter")
ButtonGadget(#Btn_Lancer, 120, 260, 100, 30, "Lancer")
ButtonGadget(#Btn_Quitter, 230, 260, 100, 30, "Quitter")

SetWindowColor(#Fenetre_principale, $F63035)
SetGadgetColor(#Lst_Applis, #PB_Gadget_BackColor, $F63035)
SetGadgetColor(#Lst_Applis, #PB_Gadget_FrontColor, $FFFFFF)

ChargerApplications()

Repeat
  Evenement = WaitWindowEvent()
  If Evenement = #PB_Event_Gadget
    Select EventGadget()
      Case #Btn_Ajouter
        AjouterApplication()
      Case #Btn_Lancer
        LancerApplication()
      Case #Btn_Quitter
        End
    EndSelect
  EndIf
Until Evenement = #PB_Event_CloseWindow

Re: Lanceur d'applications

Publié : mar. 10/juin/2025 13:47
par SPH
[14 :46 :09] Attente du démarrage du programme...
[14 :46 :09] Type d'exécutable: Windows - x64 (64bit, Unicode)
[14 :46 :09] Exécutable démarré.
[14 :46 :09] [ERREUR] Ligne: 34
[14 :46 :09] [ERREUR] Le #File spécifié n'est pas initialisé.
[14 :46 :15] Le programme a été arrêté.
Désolé :?

Re: Lanceur d'applications

Publié : mar. 10/juin/2025 15:23
par falsam
@SPH : Enregistre le cde dans un dossier.

@MIcoute : A part une fenêtre de debug, je ne vois rien d'autres. Ton exécutable est visible uniquement dans la barre des taches.
Micoute a écrit : mar. 10/juin/2025 13:38 il suffit de choisir des applications qui peuvent vous servir souvent, le programme les enregistre dans un fichier texte appelé apps.txt
C'est ce que j'ai fait ! Le fichier apps.txt est vide.

Question : Comment choisir une ou plusieurs applications ?

Re: Lanceur d'applications

Publié : mar. 10/juin/2025 18:10
par Mouillard
Merci Micoute, très utile, marche très bien chez moi, PB 6.00 LTS 8)

Re: Lanceur d'applications

Publié : mer. 11/juin/2025 8:24
par Jacobus
Salut Micoute,
Ton idée est sympa mais code incomplet. Je te donne quelques suggestions pour que ce soit plus fonctionnel.
J'ai apporté des modifs à ton code : (testé avec PB 6.21 x86 sur Windows 10)
Les points conseils :
- Positionnement de la fenêtre, invisible sur les écrans de moins de 1910 de large.
- Offrir l'option de positionnement à l'utilisateur
- Ajouter la possibilité de mettre des dossiers dans le lanceur
- Ajouter la possibilité de minimiser la fenêtre et de la réafficher (depuis la zone de notification peut-être)
- Attention de ne pas fermer 2 fois un fichier, cela pourrait planter puisque plus initialisé...
Bonne journée :wink:

Code : Tout sélectionner

Enumeration Fichiers
  #Fichier
EndEnumeration
Enumeration fenetres
  #Fenetre_principale
EndEnumeration
Enumeration Gadgets
  #Btn_Ajouter
  #Btn_Lancer
  #Btn_Quitter
  #Lst_Applis
EndEnumeration
Enumeration Polices
  #Police
EndEnumeration

LoadFont(#Police, "Arial Nova", 12, #PB_Font_Bold)
SetGadgetFont(#PB_Default, FontID(#Police))

;**************
;-Inutile, il y a GetFilePart() pour ça
;**************
; Procedure.s Extraire_Nom_de_Fichier(chemin$)
;   ; Trouver la dernière barre oblique inversée pour isoler le nom du fichier
;   position = FindString(chemin$, "\", -1)
;   If position > 0
;     ProcedureReturn Mid(chemin$, position + 1)
;   Else
;     ProcedureReturn chemin$
;   EndIf
; EndProcedure


Procedure ChargerApplications()
  
  If FileSize("apps.txt") = -1
    CreateFile(#Fichier, "apps.txt")
    CloseFile(#Fichier)
  EndIf

  If ReadFile(#Fichier, "apps.txt")
    Debug "Lecture du fichier..."
    While Not Eof(#Fichier)
      chemin$ = ReadString(#Fichier)
      
      ; Vérifie si c'est une URL ou un fichier
      If FindString(chemin$, "http", 1) > 0
        nomAffiche$ = chemin$  ; Garde l'URL telle quelle
      Else
        nomAffiche$ = GetFilePart(chemin$)  ; Extrait uniquement le nom du fichier
      EndIf
      
      Debug "Ajout : " + nomAffiche$
      AddGadgetItem(#Lst_Applis, -1, nomAffiche$)
    Wend
    Debug "Fichier clos"
    CloseFile(#Fichier)
  Else
    Debug "Impossible de lire le fichier apps.txt"
  EndIf
  
EndProcedure

Procedure AjouterApplication()
  application$ = OpenFileRequester("Sélectionner une application", "", "", 0)
  If application$ <> ""
    
    ;fileName$ = Extraire_Nom_de_Fichier(application$)  ; Extraire le nom du fichier
    fileName$ = GetFilePart(application$) ; cette fonction le fait déjà

    ; Enregistrer le chemin complet dans le fichier
    If OpenFile(#Fichier, "apps.txt", #PB_File_Append)
      WriteStringN(0, application$) ; ajout du chemin complet dans le fichier
      CloseFile(#Fichier)

      ; Ajouter uniquement le nom du fichier dans la liste
      AddGadgetItem(#Lst_Applis, -1, fileName$)
    Else
      MessageRequester("Erreur", "Impossible d'ouvrir le fichier apps.txt")
    EndIf
  EndIf
EndProcedure

Procedure LancerApplication()
  indexSeletionne = GetGadgetState(#Lst_Applis)
  If indexSeletionne >= 0
    ; Lire le fichier pour récupérer le chemin complet correspondant
    If ReadFile(#Fichier, "apps.txt")
      i = 0
      While Not Eof(#Fichier)
        ;ici on récupère le nom du fichier dans la Listview
        File$ = GetGadgetItemText(#Lst_Applis,indexSeletionne)
        ;le chemin complet dans le fichier
        chemin$ = ReadString(#Fichier)
        ;on cherche le nom du fichier à lancer dans les chaines de chemins complets du fichier texte
        If FindString(chemin$, File$) > 0
          ;si on le trouve on le démarre
          If i = indexSeletionne
            RunProgram(chemin$)
           ; CloseFile(#Fichier)
           ; ProcedureReturn
          EndIf
          
        EndIf 
        i + 1
      Wend
      
      CloseFile(#Fichier)
    EndIf
  Else
    MessageRequester("Erreur", "Aucune application sélectionnée !")
  EndIf
EndProcedure

;Modification de la position de la fenêtre pour qu'elle soit visible
;Tu devrais ajouter ensuite seulement l'option du positionnement
OpenWindow(#Fenetre_principale, 0, 0, 340, 300, "Lanceur d'Applications", #PB_Window_ScreenCentered|#PB_Window_BorderLess)
ListViewGadget(#Lst_Applis, 10, 10, 320, 240)
ButtonGadget(#Btn_Ajouter, 10, 260, 100, 30, "Ajouter")
ButtonGadget(#Btn_Lancer, 120, 260, 100, 30, "Lancer")
ButtonGadget(#Btn_Quitter, 230, 260, 100, 30, "Quitter")

SetWindowColor(#Fenetre_principale, $F63035)
SetGadgetColor(#Lst_Applis, #PB_Gadget_BackColor, $F63035)
SetGadgetColor(#Lst_Applis, #PB_Gadget_FrontColor, $FFFFFF)

ChargerApplications()

Repeat
  Evenement = WaitWindowEvent()
  If Evenement = #PB_Event_Gadget
    Select EventGadget()
      Case #Btn_Ajouter
        AjouterApplication()
      Case #Btn_Lancer
        LancerApplication()
      Case #Btn_Quitter
        End
    EndSelect
  EndIf
Until Evenement = #PB_Event_CloseWindow

Re: Lanceur d'applications

Publié : mer. 11/juin/2025 10:27
par Micoute
J'oublie toujours que tout le monde n'a pas une résolution de 2560x1080, veuillez m'en excuser.

Re: Lanceur d'applications

Publié : jeu. 10/juil./2025 8:27
par pasbel
Salut
Ça fonctionne bien.

Tu devrais y ajouter un système de "catégories".
Par exemple :
On choisit la catégorie "PureBasic", la fenêtre affiche tout ce qu'on a entré concernant PureBasic, le logiciel, les liens vers le forum, les références en ligne,... des raccourcis vers des dossiers et fichiers (PDF de référence pat exemple, ou fichiers Help) locaux.
Autres catégorie "Outils" qui affiche les programme utiles genre Bloc note, Calculatrice, Paint, des programmes de nettoyage Win ou d'autres trucs.

Un affichage par icônes optionnel serait sympa aussi (en remontant l'icône du programme ou type de fichier).
Et une fenêtre redimensionnable.

Je te donne beaucoup de travail ;-)