[OK] Systray sans fenêtre ?

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

[OK] Systray sans fenêtre ?

Message 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) ?
Dernière modification par Ar-S le sam. 10/août/2013 15:25, modifié 1 fois.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Fred
Site Admin
Messages : 2809
Inscription : mer. 21/janv./2004 11:03

Re: Systray sans fenêtre ?

Message par Fred »

La fenetre est obligatoire pour gerer l'evenement.
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Systray sans fenêtre ?

Message par Ar-S »

Ok, merci.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: [OK] Systray sans fenêtre ?

Message 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
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: [OK] Systray sans fenêtre ?

Message par Ar-S »

Merci pour le complément ;)
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: [OK] Systray sans fenêtre ?

Message 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
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Répondre