Page 1 sur 1

[OK] Systray sans fenêtre ?

Publié : sam. 10/août/2013 14:10
par Ar-S
Salutation.

Est-il possible de créer un systray avec popup menu sans avoir à créer une fenêtre ou est-on obligé de créer une fenêtre invisible (ce que je trouve dommage) ?

Re: Systray sans fenêtre ?

Publié : sam. 10/août/2013 14:25
par Fred
La fenetre est obligatoire pour gerer l'evenement.

Re: Systray sans fenêtre ?

Publié : sam. 10/août/2013 15:25
par Ar-S
Ok, merci.

Re: [OK] Systray sans fenêtre ?

Publié : sam. 10/août/2013 19:01
par falsam
Bonjour Ar-s. Petite astuce en utilisant le DeskTop comme handle de fenêtre.

A prioris on ne peut pas mettre de menu mais on peut tester des touches dont le traitement s'effectue dans un thread.

Tu peux tester les touches :
- F8 qui agit comme un interrupteur On Off.
- F10 qui fait rien :p
- F12 qui permet de fermer ce process

Code : Tout sélectionner

Global Status.b, EndSystray.b

Procedure WaitKey(*Value)
  Repeat
    If GetAsyncKeyState_(#VK_F8) & $1
     
      If Status = #False 
        Status = #True
        Debug "True"
        
      Else
        Status = #False
        Debug "False"
      EndIf
     
    EndIf
    
    If GetAsyncKeyState_(#VK_F10) & $1
      Debug "Touche F10"
    EndIf
    
    If GetAsyncKeyState_(#VK_F12) & $1
      Debug "C'est fini"
      EndSystray = #True
    EndIf
  
  ForEver
EndProcedure

WindowID = GetDesktopWindow_()

SysTray = AddSysTrayIcon(#PB_Any, WindowID, LoadIcon_( 0, #IDI_EXCLAMATION ) );

SysTrayIconToolTip(SysTray, "Presser la touche F12" +#CRLF$+ "pour quitter le systray")

;Créé un thread tournant en arrière plan de l'application
CreateThread(@WaitKey(), #Null)

Repeat : Until EndSysTray

Re: [OK] Systray sans fenêtre ?

Publié : sam. 10/août/2013 19:05
par Ar-S
Merci pour le complément ;)

Re: [OK] Systray sans fenêtre ?

Publié : sam. 10/août/2013 19:28
par falsam
le code minimum

Code : Tout sélectionner

WindowID = GetDesktopWindow_()

SysTray = AddSysTrayIcon(#PB_Any, WindowID, LoadIcon_( 0, #IDI_EXCLAMATION ) );

SysTrayIconToolTip(SysTray, "Presser la touche F12" +#CRLF$+ "pour quitter le systray")

Repeat 
Until GetAsyncKeyState_(#VK_F12) & $1