Page 1 sur 1
L'utilisateur et le bureau
Publié : mer. 20/juin/2012 13:13
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.
Re: L'utilisateur et le bureau
Publié : lun. 09/juil./2012 3:10
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.
Re: L'utilisateur et le bureau
Publié : mar. 10/juil./2012 13:08
par pat
Merci Warkering.
Je compte sur ta collaboration.
Re: L'utilisateur et le bureau
Publié : mar. 10/juil./2012 14:30
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 ...
Re: L'utilisateur et le bureau
Publié : mer. 11/juil./2012 13:40
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.
Re: L'utilisateur et le bureau
Publié : mar. 17/juil./2012 13:21
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.
Re: L'utilisateur et le bureau
Publié : mar. 17/juil./2012 17:39
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
Re: L'utilisateur et le bureau
Publié : mer. 18/juil./2012 13:06
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.
Re: L'utilisateur et le bureau
Publié : mer. 18/juil./2012 14:45
par MLD
oui et enlever le délai a WaitWindowEvent()
Bon courage

Re: L'utilisateur et le bureau
Publié : ven. 20/juil./2012 13:05
par pat
Merci MLD de ton aide.