PureBasic

Forums PureBasic
Nous sommes le Jeu 02/Juil/2020 6:50

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 3 messages ] 
Auteur Message
 Sujet du message: "iconiser" un programe dans le systray
MessagePosté: Jeu 13/Sep/2012 22:00 
Hors ligne

Inscription: Dim 14/Mai/2006 20:41
Messages: 140
Bonjour,

Pour les besoins d'un programme, je dois faire appel à un autre utilitaire assez encombrant. Etant un transfuge de Visual Basic, dans ce langage j'avais trouvé une classe permettant de mettre ce que l'on voulait dans le systray (tant que le programme était visible). Dans Purebasic je nage complètement pour faire un code analogue.

Si quelqu'un a déjà réussi cette action, je serais aux anges d'en connaitre la méthode.

J'insiste bien sur le fait que ce n'est pas le programme créé qui doit être envoyé dans le systray mais bien un programme externe que l'on indiquerait dans le code (ou détecté via la souris ou le focus, ça reste à définir dans mon projet)

D'avance, merci :)

_________________
.:NY152:.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: "iconiser" un programe dans le systray
MessagePosté: Jeu 28/Fév/2013 23:02 
Hors ligne
Avatar de l’utilisateur

Inscription: Ven 13/Fév/2004 0:57
Messages: 3702
Tu peux toujours simuler l'action, en gros tu crée un systray dans ton programme, tu récupères l'icône de l'exe et tu t'en sert pour le systray, tu crées un menu afficher réduire mais en fait dans ton programme tu caches où tu montres l'application en question.

C'est simple à faire et je crois que c'est comme ça que font les programmes en question.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: "iconiser" un programe dans le systray
MessagePosté: Ven 01/Mar/2013 3:04 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 22/Aoû/2010 15:24
Messages: 6928
Localisation: IDF (Yvelines)
Pour illustrer partiellement (je ne me suis pas occupé de chercher l'icone de l'application externe) les propos de Nico avec l'application Calculette.

Lance la calculette puis le code ci-dessous.
La touche F8 permet d'afficher ou montrer l'application externe.
L'icone de l'application externe ne sera pas affichée dans la barre des taches.
Un menu contextuel(popup) est associé à l'icone affichée dans la zone de notification.
Quand on ferme cette icone, l'icone de l'application externe apparaît de nouveau dans la barre des taches.

Code:
;Mette une application externe dans la zone de notification (Systray)
;Contributeur : Falsam (01 mars 2013)
;
; OS : Windows


Enumeration
  #Mainform ;Fenetre de l'application qui restera invisible
  #MenuPopUp;Menu contextuel de l'icone figurant dans la zone de notification
EndEnumeration

;Handle de l'application externe
Global ExeHwnd.l

;Status de l'application externe
;#False : L'application est cachée
;#True  : L'application est visible
Global ExeStatus.b

;Affiche ou pas le programme externe (Thread)
;On a choisi la touche F8 pour cacher ou afficher l'application externe
Procedure ExeShowHide(*Value)
  Repeat
    If GetAsyncKeyState_(#VK_F8) & $1
     
      If ExeStatus = #False
        ;L'application externe est cachée -> Affichage de l'application
        ExeStatus = #True
        ShowWindow_(ExeHwnd, #SW_SHOW)
       
      Else
        ;L'application externe est visible -> Cacher l'application
        ShowWindow_(ExeHwnd, #SW_HIDE)
        ExeStatus = #False
      EndIf
     
    EndIf
  ForEver
EndProcedure

;Supprime l'icone de l'application extene de la barre des tache by (TsSoft)
Procedure HideFromTaskBar(ExeHwnd.l, Flag.l)
  Protected TBL.ITaskbarList

  CoInitialize_(0)
  If CoCreateInstance_(?CLSID_TaskBarList, 0, 1, ?IID_ITaskBarList, @TBL) = #S_OK
    TBL\HrInit()
    If Flag
      TBL\DeleteTab(ExeHwnd)
    Else
      TBL\AddTab(ExeHwnd)
    EndIf
    TBL\Release()
  EndIf
  CoUninitialize_()

  DataSection
    CLSID_TaskBarList:
    Data.l $56FDF344
    Data.w $FD6D, $11D0
    Data.b $95, $8A, $00, $60, $97, $C9, $A0, $90
    IID_ITaskBarList:
    Data.l $56FDF342
    Data.w $FD6D, $11D0
    Data.b $95, $8A, $00, $60, $97, $C9, $A0, $90
  EndDataSection
EndProcedure

;Start
Procedure Start()
  ;Fenetre de l'application
  OpenWindow(#MainForm, 0, 0, 0, 0, "", #PB_Window_Invisible)
 
  ;Menu pour le sytray
  CreatePopupMenu(#MenuPopUp)
  MenuItem(0, "Afficher la fenetre")
  MenuItem(1, "Quitter")
 
  ;Cache la fenetre principale
  HideWindow(#Mainform, #True)
 
  ;Ajoute une icône et un texte d'aide dans la zone de notification
  AddSysTrayIcon(1, WindowID(#Mainform), LoadIcon_(#Null, #IDI_WARNING))
  SysTrayIconToolTip(1, "Touche F8" +#CRLF$+ "Pour afficher la fenetre")
 
  ;Créé un thread tournant en arrière plan de l'application
  ;Afficher ou cacher l'application externe
  CreateThread(@ExeShowHide(), #Null)
 
  ;Cherche l'application externe en se servant du titre de l'application (Exemple pour la calculatrice)
  ExeHwnd = FindWindow_(0,"Calculatrice")

  ;Enlever de la barre des taches l'icone de l'application externe.
  HideFromTaskbar(ExeHwnd, #True)
 
  ;Au premier lancement de ce code, l'application externe est affichée
  ExeStatus = #True
 
EndProcedure


Start()


Repeat
 
  Select WaitWindowEvent()   
    Case #PB_Event_Menu
      Select EventMenu()
        Case 0 ;
          ShowWindow_(ExeHwnd, 1)
         
        Case 1
         ;Afficher de nouveau dans la barre des taches l'icone de l'application externe.
         HideFromTaskbar(ExeHwnd, #False)
         
         ;et fin du programme
         End
 
      EndSelect
     
    Case #PB_Event_SysTray
      ;Affichage de l'application externe
      If EventType() = #PB_EventType_LeftDoubleClick
        ShowWindow_(ExeHwnd, 1)
       
      EndIf
     
      ;Affichage du menu contectuel
      If EventType() = #PB_EventType_RightClick
        DisplayPopupMenu(#MenuPopUp, WindowID(#Mainform))
      EndIf     
           
  EndSelect
ForEver

_________________

➽ Config PureBasic : Windows 10 - PB 5.72 LTS

➽ Je ne réponds pas aux MP techniques


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 3 messages ] 

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye