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
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 ?

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 !

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

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é

). 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...

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 !!

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"

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 !!

)
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 !!

Publié : mer. 16/juin/2004 15:31
par filperj
Hé, bon truc, ça permettrai de faire des raccourcis clavier vraiment personnalisés
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 !
Un grand
MERCI à tous !!!
