Page 1 sur 1

Associer une touche de raccourci

Publié : lun. 23/févr./2004 15:29
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:

Publié : mar. 24/févr./2004 0:27
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.

Publié : mar. 24/févr./2004 6:56
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 :)

Publié : mar. 24/févr./2004 9:15
par Le Soldat Inconnu
ok, v tripoter le callback

merci

Publié : mar. 24/févr./2004 11:00
par Fred
Regarde du coté des 'Hot Keys' dans l'API, c'est ce qui correspond a ce que tu veux faire.

Publié : mar. 24/févr./2004 14:51
par Le Soldat Inconnu
Merci :D

Publié : mer. 25/févr./2004 14:32
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 çà

Publié : mer. 25/févr./2004 14:54
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)

Publié : mer. 25/févr./2004 15:11
par Le Soldat Inconnu
Génial, à par le commentaire en anglais dans le code qui m'a fait marrer :lol:

Publié : mer. 25/févr./2004 16:15
par Fred
Faut croire que ca devient un reflexe :lol: