Associer une touche de raccourci

Programmation d'applications complexes
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Associer une touche de raccourci

Message par Le Soldat Inconnu »

Salut,

Comment faire pour associer un touche de raccourci à un programme.
j'explique : lorsqu'on utilise pas le programme et que celui ci est en arrière plan, je veux obtenir, lorsque que l'on appui sur touche, une action spécifique comme mettre le prog au premier plan.

Si vous savez comment faire.

dans PB, il y a AddKeyboardShortcut(#Fenetre, Raccourci, EventID) mais ceci ne marche que si le prog est actif.

Merci d'avance :wink:
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
ZapMan
Messages : 393
Inscription : ven. 13/févr./2004 23:14
Localisation : France
Contact :

Message par ZapMan »

La plupart des fonctions gérant l'entrée (clavier ou souris) ne renvoient une valeur pertinente que si ton application est au premier plan afin d'éviter que toutes les applications résidant en mémoire ne se mettent à réagir quand tu tape sur une touche. Il existe cependant des fonctions qui renvoient TOUJOURS la valeur du clavier et de la souris afin de gérer des cas comme celui qui t'intéresse :
Pour la souris : WindowMouseX() et WindowMouseY()
Pour le clavier : getasynckeystate_(#VK_CONTROL) par exemple
Il va falloir que tu écrive une petite boucle incluant un test de ce type. Si tu veux faire la distinction entre les frappes survenant quand ta fenêtre est active ou quand elle ne l'est pas, teste "Message = #WM_KEYDOWN" avec "WindowID = MafenetreHdl" dans une procedure Callback.
Tout obstacle est un point d'appui potentiel.
Avatar de l’utilisateur
cederavic
Messages : 1338
Inscription : lun. 09/févr./2004 23:38
Localisation : Bordeaux

Message par cederavic »

sinon il me semble avoir lu dans l'api que si tu met pas le handle de la fenetre (si tu me #NULL) dans la fonction pour recevoir les message, ça te renvoi les message de toute les fenetre, donc pas de probleme de focus, a toi de trouver :)
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

ok, v tripoter le callback

merci
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Fred
Site Admin
Messages : 2652
Inscription : mer. 21/janv./2004 11:03

Message par Fred »

Regarde du coté des 'Hot Keys' dans l'API, c'est ce qui correspond a ce que tu veux faire.
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

Merci :D
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Invité

Message par Invité »

j'ai fait ça :

Code : Tout sélectionner

OpenWindow(0, 0, 0, 200, 200, #PB_Window_ScreenCentered, "Test")

If CreateGadgetList(WindowID())
  TextGadget(1, 5, 5, 150, 15, "")
EndIf

Touche = #PB_Shortcut_A

RegisterHotKey_(WindowID(), Touche, #MOD_CONTROL, 0)

Repeat
  Event = WaitWindowEvent()
  
  If Event = #WM_HOTKEY
    SetGadgetText(1, "Touche appuyée")
  EndIf
    
Until Event = #WM_CLOSE

UnregisterHotKey_(WindowID(), Touche)
mais ça marche pô, on fait comment pour récupérer la touche du clavier ?
j'ai utilisé la constantes pb mais à mon avis, c pas çà
Fred
Site Admin
Messages : 2652
Inscription : mer. 21/janv./2004 11:03

Message par Fred »

Essaye plutot ca:

Code : Tout sélectionner

OpenWindow(0, 0, 0, 200, 200, #PB_Window_ScreenCentered, "Test") 

If CreateGadgetList(WindowID()) 
  TextGadget(1, 5, 5, 150, 15, "") 
EndIf 

#HotKeyID = 45

RegisterHotKey_(WindowID(), #HotKeyID, #MOD_CONTROL, #PB_Shortcut_A ) 

Repeat 
  Event = WaitWindowEvent() 
  
  If Event = #WM_HOTKEY
    If EventwParam() = #HotKeyID ; our id (see above)
      SetGadgetText(1, "Touche appuyée") 
    EndIf
  EndIf 
    
Until Event = #WM_CLOSE 

UnregisterHotKey_(WindowID(), #HotKeyID)
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

Génial, à par le commentaire en anglais dans le code qui m'a fait marrer :lol:
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Fred
Site Admin
Messages : 2652
Inscription : mer. 21/janv./2004 11:03

Message par Fred »

Faut croire que ca devient un reflexe :lol:
Répondre