L'utilisateur et le bureau

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
pat
Messages : 411
Inscription : mar. 24/nov./2009 15:13

L'utilisateur et le bureau

Message par pat »

Bonjour à tous,

Je souhaite savoir, par programme, quant l'utilisateur retourne dans le bureau après, par exemple, avoir sélectionné un programme plein écran et que cet utilisateur veuille retourner sur le bureau.

Exemple :
mon programme est dans le bureau et l'utilisateur est dessus. Cet utilisateur décide de sélectionner un programme de jeux qui fonctionne en plein écran. Avec Alt+Tab l'utilisateur bascule et retourne sur le bureau mais par exemple va dans un autre programme que le mien (par exemple le bloc-notes).
Je souhaite savoir par programme quand l'utilisateur sera sur le bureau.

Avec IsScreenActive()=0 on sait que l'utilisateur est sorti du programme et donc avec IsScreenActive()<>0 on sait que l'utilisateur est rentré dans mon programme. Mais si l'utilisateur est dans le bureau mais ne sélectionne pas mon programme IsScreenActive() sera non égal à 0 alors que je serais quand même dans le bureau.

J'espère que j'ai été assez clair.
Dernière modification par Atlante le mer. 11/juil./2012 23:11, modifié 1 fois.
Raison : pas d'huile sur le feu. Merci
Warkering
Messages : 808
Inscription : ven. 08/janv./2010 1:14
Localisation : Québec, Canada

Re: L'utilisateur et le bureau

Message par Warkering »

Je ne peux pas vraiment t'aider, mais je jetterais un coup d'œil dans la documentation de l'API de Windows, ses fonctions étant accessibles directement sous PureBasic.
pat
Messages : 411
Inscription : mar. 24/nov./2009 15:13

Re: L'utilisateur et le bureau

Message par pat »

Merci Warkering.
Je compte sur ta collaboration.
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: L'utilisateur et le bureau

Message par falsam »

Je pense que ce code pourra t'aider.

Code : Tout sélectionner

Enumeration
  #MainForm
  #Timer
  #Message
EndEnumeration

Global CurrentWindow.s
  
OpenWindow(#MainForm, 0, 0, 400, 100, "Mon application", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
TextGadget(#Message, 10, 40, 300, 20, "")
AddWindowTimer(#Mainform, #Timer, 100)  

Repeat
  Event = WaitWindowEvent(10)

  Select Event 
    Case #PB_Event_Timer
      If EventTimer() = #Timer
        Handle=GetForegroundWindow_()
        CurrentWindow = Space (256)
        GetWindowText_ (Handle, CurrentWindow, 256)
        SetGadgetText(#Message, Str(Handle)+" - "+CurrentWindow )  
      EndIf 
      
    Case #PB_Event_CloseWindow
      End
  EndSelect  
ForEver
Clique sur le bureau, sur une autre appli, fenêtre, bouton démarrer, etc ...
Dernière modification par Atlante le mer. 11/juil./2012 23:12, modifié 1 fois.
Raison : citation effacée
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%
pat
Messages : 411
Inscription : mar. 24/nov./2009 15:13

Re: L'utilisateur et le bureau

Message par pat »

Merci falsam.
Comme je ne suis pas chez moi, j'ai imprimé ton code et je vais le saisir sur mon ordi.
En tout cas d'avance, un grand merci, et connaissant ta grande compétence, je suis persuadé d'avance que cela fonctionnera.
pat
Messages : 411
Inscription : mar. 24/nov./2009 15:13

Re: L'utilisateur et le bureau

Message par pat »

A falsam :
J'ai saisi ton code sur mon ordi et j'ai testé.
A priori cela donne du bon résultat mais des fois dans la fenêtre qui donne le handle de la fenêtre et son nom j'ai le nom du programme qui était en plein écran (bascule avec Alt+Tab) et qui s'est minimisé (environ 1 fois sur 5).
Je pense que le minuteur de 100 est trop important alors je l'ai essayé à 10 et cela semble mieux aller mais la fenêtre saccade beaucoup trop.
Il faudrait, je pense, un indicateur système qui indique quand l'utilisateur est effectivement dans le bureau et peut-être que les APIs sont la solution mais je ne sais pas comment faire car cela me semble trop difficile à faire.
En tout cas merci d'avoir essayé et de m'aider.
Avatar de l’utilisateur
MLD
Messages : 1124
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: L'utilisateur et le bureau

Message par MLD »

regarde comme ceci ?

Code : Tout sélectionner

Enumeration
  #MainForm
  #Timer
  #Message
EndEnumeration

Global CurrentWindow.s
  
OpenWindow(#MainForm, 0, 0, 400, 100, "Mon application", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
StickyWindow(#MainForm, 1)
TextGadget(#Message, 10, 40, 300, 20, "")
AddWindowTimer(#Mainform, #Timer, 100)  

Repeat
  Event = WaitWindowEvent();(10)

  Select Event 
    Case #PB_Event_Timer
      If EventTimer() = #Timer
        Handle=GetForegroundWindow_()
        CurrentWindow = Space (256)
        GetWindowText_ (Handle, CurrentWindow, 256)
        SetGadgetText(#Message, Str(Handle)+" - "+CurrentWindow )  
      EndIf 
      
    Case #PB_Event_CloseWindow
      End
  EndSelect  
ForEver

pat
Messages : 411
Inscription : mar. 24/nov./2009 15:13

Re: L'utilisateur et le bureau

Message par pat »

Merci MLD.
Tu rajoutes la commande StickyWindow(#MainForm, 1) au programme de falsam.
Je connais cette commande mais je verrais bien si cela fonctionne correctement sur mon ordi.
Avatar de l’utilisateur
MLD
Messages : 1124
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: L'utilisateur et le bureau

Message par MLD »

oui et enlever le délai a WaitWindowEvent()
Bon courage :wink:
pat
Messages : 411
Inscription : mar. 24/nov./2009 15:13

Re: L'utilisateur et le bureau

Message par pat »

Merci MLD de ton aide.
Répondre