Page 1 sur 1

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

Publié : mar. 15/juin/2004 16:09
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:

Publié : mar. 15/juin/2004 17:18
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   


:)

Publié : mar. 15/juin/2004 17:28
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

Publié : mar. 15/juin/2004 17:50
par Anonyme2
Dobro a écrit :
mais il fait pas la vaisselle ! :D
Et le café ?

Publié : mar. 15/juin/2004 18:02
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!

:)

Publié : mar. 15/juin/2004 18:17
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:

Publié : mar. 15/juin/2004 18:20
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

Publié : mar. 15/juin/2004 18:24
par nico
Est ce que votre clavier est relié en USB? ? ça peut être rien à voir mais bon, j'essaye de comprendre.

:)

Publié : mar. 15/juin/2004 18:25
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 !

Publié : mar. 15/juin/2004 18:37
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
:)

Publié : mar. 15/juin/2004 22:23
par Backup
Bravo Nico ça marche !! Merci pour tes recherches !! :D

Publié : mer. 16/juin/2004 15:31
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.

Publié : mer. 16/juin/2004 16:45
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.

:)

Publié : ven. 18/juin/2004 15:01
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: