[Résolu] surveiller les évènements sans être au 1er plan

Programmation d'applications complexes
Avatar de l’utilisateur
Dionyzos
Messages : 53
Inscription : jeu. 05/févr./2004 19:57

[Résolu] surveiller les évènements sans être au 1er plan

Message par Dionyzos »

Salut à tous ! :)


Je suis en train de développer un petit programme pour créer automatiquement une image00X.bmp dans un chemin bien définit du disk lorsque l’on appuie sur la touche ImprEcran

J’ai réussi à trouver la procédure pour capturer le code de la touche enfoncée (KEYUP=44)
J’ai également la procédure pour enregistrer l’image sur le disque en BMP
J’arrive à cacher la fenêtre de mon prog de la barre des taches, et à placer une icône dans le systray

Jusque là, no pb, mais le hic est que lorsque le prog n’est plus l’application de 1er plan, il ne surveille plus les touches enfoncées :cry:

Donc ma question est comment faire pour que mon prog continu de surveiller les touches pressées, et qu’il s’active lorsque la touche attendue est enfoncée, sans qu’il soit forcément au 1er plan ?

Ai-je été clair ? :roll:
Dernière modification par Dionyzos le ven. 18/juin/2004 15:05, modifié 1 fois.
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Je t'ai mis un petit exemple pour tester de suite:

Code : Tout sélectionner

  Enumeration
    #Window
  EndEnumeration

  Dim Key.b(255)
  Debug #VK_SNAPSHOT
  If OpenWindow(1,1,0,400,400,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"Pure Basic")
    SetTimer_(WindowID(1),1,500,0)
  
    Repeat
      EventID.l=WaitWindowEvent()
      Select EventID 
        Case #WM_TIMER
          If GetKeyboardState_(@Key())
            If Key(#VK_SNAPSHOT) & 1 
              Debug "Touche Impr écran Appuyé"
          EndIf
            Key(#VK_SNAPSHOT)=0
            SetKeyboardState_(@Key())
          EndIf
          
        Case #WM_CLOSE
          killtimer_(WindowID(1),1)
          Quit=1
      EndSelect
      
    Until Quit=1
  EndIf   


:)
Dernière modification par nico le mar. 15/juin/2004 17:58, modifié 1 fois.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

ça marche pas chez moi !!

peut etre a cause de mon clavier un peu special

un Logitech noir avec 19 touches programmable suplementaire et bouton de volume integré
plus roulette cliquable a souris integré dessus

mais il fait pas la vaisselle ! :D
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Dobro a écrit :
mais il fait pas la vaisselle ! :D
Et le café ?
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

@Dobro,


Tu peux faire ceci:

Code : Tout sélectionner

          If GetKeyboardState_(@Key()) 
            ;If Key(#VK_SNAPSHOT) & 1 
              Debug Key(#VK_SNAPSHOT) 
              ;Debug "Touche Impr écran Appuyé" 
            ;EndIf 
            Key(#VK_SNAPSHOT)=0 
            SetKeyboardState_(@Key()) 
          EndIf 
et me dire si la valeur change!

:)
Heis Spiter
Messages : 1092
Inscription : mer. 28/janv./2004 16:22
Localisation : 76
Contact :

Message par Heis Spiter »

Marche pas non plus chez moi, et pourtant j'ai un clavier tout bête (101/102 touches, j'ai jamais compté :mrgreen:). Et le deuxième test j'ai toujours 0. J'ai une seule fois réussi a avoir "Touche Impr écran Appuyé" dans le premier exemple, mais je sais plus comment j'ai fait. J'crois que j'avais un peu tapé parque ca marchait pas... :roll: :lol:
Heis Spiter, webmaster du site http://www.heisspiter.net
Développeur principal et administrateur du projet Bird Chat
Parti courir au bonheur du dév. public et GPL :D
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

j'ai une valeur de -127 a l'appuis de la touche

et une valeur de 1 au relachement !! :)

Mais seulement lorsque la fenetre du prog est active
c'est peut etre due a debug !.. :)

@Denis : non plus !! :D j'ai ruiné la cafetiere en essayant de la brancher a un relai !!

du coup j'ai achete une caffetiere "italienne" qui d'ailleur est une invention d'un pharmacien Français !! la "Cafeolette" :D
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Est ce que votre clavier est relié en USB? ? ça peut être rien à voir mais bon, j'essaye de comprendre.

:)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

non non mon clav est relier en Ps2 avec un fil ! (j'ai pris le moins chere !!
250 frs !! :D )


et pis les sans fil ça bouffe des piles !
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

J'ai changé d'API, c'est encore plus simple, ça donne quoi messieurs?

Code : Tout sélectionner

  Enumeration 
    #Window 
  EndEnumeration 
  
  If OpenWindow(1,1,0,400,400,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"Pure Basic") 
    SetTimer_(WindowID(1),1,500,0) 
    GetAsyncKeyState_(#VK_SNAPSHOT)
    Repeat 
      EventID.l=WaitWindowEvent() 
      Select EventID 
        Case #WM_TIMER 
          If GetAsyncKeyState_(#VK_SNAPSHOT) & 1
              Debug "Touche Impr écran Appuyé" 
          EndIf 
          
        Case #WM_CLOSE 
          killtimer_(WindowID(1),1) 
          Quit=1 
      EndSelect 
      
    Until Quit=1 
  EndIf
:)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

Bravo Nico ça marche !! Merci pour tes recherches !! :D
filperj
Messages : 395
Inscription : jeu. 22/janv./2004 1:13

Message par filperj »

Hé, bon truc, ça permettrai de faire des raccourcis clavier vraiment personnalisés :wink:
Par contre, j'ai essayé de supprimer le 1er appel à getasynckeystate, et le "&1" dans le test, et ça marche aussi bien.
Le chaos l'emporte toujours sur l'ordre
parcequ'il est mieux organisé.
(Ly Tin Wheedle)
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Le 1er appel GetAsyncKeyState_(#VK_SNAPSHOT) est là pour initialiser car cette fonction permet de connaitre si la touche a été appuyé depuis le dernier appel de cette même fonction, c'est une sécurité mais on peut s'en passer.

Sinon, ça marche très bien sans le &1 effectivement.

:)
Avatar de l’utilisateur
Dionyzos
Messages : 53
Inscription : jeu. 05/févr./2004 19:57

Message par Dionyzos »

Ah, au fait, je crois que j'ai oublié de vous dire : mon prog marche super, et c'est grace à vous ! :D

Un grand MERCI à tous !!! :wink:
Répondre