CGEventPost - maintenir une touche appuyée (shift)

bonjour tout le monde,

 

je cherche à  créer un petit panneau sous Xcode avec dessus des boutons représentant des touches de clavier particulières : shift, command... le but est de pouvoir cliquer dessus comme sur un clavier virtuel.

 

je cherche à  obtenir ça :

 

- je clique sur le bouton shift de mon panneau.

- la touche shift reste appuyée, et le reste tant que je ne clique pas dessus à  nouveau.

- je tape un truc sur mon clavier, un "a" deviendra un "A" par exemple.

- je clique sur le bouton de mon panneau, la touche shift est relâchée.

 

voilà  le code que j'utilise :

 



CGEventSourceRef source = CGEventSourceCreate(kCGEventSourceStateHIDSystemState);
CGEventRef shiftKeyDown = CGEventCreateKeyboardEvent(source, (CGKeyCode)56, true);
CGEventRef shiftKeyUp = CGEventCreateKeyboardEvent(source, (CGKeyCode)56, false);


CGEventPost(kCGAnnotatedSessionEventTap, shiftKeyDown);
CGEventPost(kCGAnnotatedSessionEventTap, shiftKeyUp);


CFRelease(shiftKeyUp);
CFRelease(shiftKeyDown);
CFRelease(source);


je n'arrive pas à  trouver un moyen pour garder la touche shift bloquée. je pensais que changer le type du NSButton en "Push On Push Off" serait la solution mais ce n'est pas aussi simple on dirait !  :lol:

 

j'ai aussi essayé :

 



{
if ([sender state] == NSOnState) {
// mon code.
}
if ([sender state] == NSOffState) {
// mon code.
}


mais ça ne donne rien.

 

auriez vous une idée ?

 

merci de m'avoir lu.  ;)

Réponses

  • Si je comprends bien tu essaies de reproduire le fonctionnement des touches à  auto-maintien de l'accès universel.


    Il faut donc que tu captes tous les événements clavier et souris pour pouvoir y ajouter les modificateurs qui auront été définis avec ton panneau.


     


    Cela me paraà®t ambitieux d'aller trifouiller les événements système pour un premier projet, mais c'est aussi vrai que c'est en codant que l'on devient coderon.


     


    Sinon concrètement je ne peux pas t'aider, j'ai le sentiment qu'il me manque une description plus précise du contexte de ton code.


  • Pour faire des boutons à  auto-maintien, ça existe directement dans "Interface Builder" ou son équivalent intégré dans Xcode 4.


    Après, pour faire ce que tu indiques, il faut effectivement traiter les évènements clavier et peut être souris.


    Je suppose qu'en plus tu veux que ça marche pour tous les programmes?




  • Si je comprends bien tu essaies de reproduire le fonctionnement des touches à  auto-maintien de l'accès universel.


    Il faut donc que tu captes tous les événements clavier et souris pour pouvoir y ajouter les modificateurs qui auront été définis avec ton panneau.


     


    Cela me paraà®t ambitieux d'aller trifouiller les événements système pour un premier projet, mais c'est aussi vrai que c'est en codant que l'on devient coderon.


     


    Sinon concrètement je ne peux pas t'aider, j'ai le sentiment qu'il me manque une description plus précise du contexte de ton code.




    c'est exactement ça. il faut par contre que je me documente un peu sur les événements souris pour comprendre comment les inclure dans ma démarche.  ;)


     




    Pour faire des boutons à  auto-maintien, ça existe directement dans "Interface Builder" ou son équivalent intégré dans Xcode 4.


    Après, pour faire ce que tu indiques, il faut effectivement traiter les évènements clavier et peut être souris.


    Je suppose qu'en plus tu veux que ça marche pour tous les programmes?




    oui, dans tous les programmes.  ;)

  • Et qu'est ce qui ne va pas dans les touches à  auto-maintien de l'accès universel ?


  • dans l'idée, je souhaiterais avoir un panneau spécialement dédié à  cet effet, dont la fonction de maintient de touche se fasse à  la demande (et non en activant / désactivant un paramètre un peu planqué).


     


    pourquoi pas faire un clavier virtuel entier (celui de OS X ne gère pas le maintient appuyé des modifier keys).




  • dans l'idée, je souhaiterais avoir un panneau spécialement dédié à  cet effet, dont la fonction de maintient de touche se fasse à  la demande (et non en activant / désactivant un paramètre un peu planqué).




    Une série de 5 appuis répétés sur la touche Maj permet de basculer du mode auto-maintien au mode normal (option à  activer dans les Préférences / Accès Universel / Clavier).


     


     




     


    pourquoi pas faire un clavier virtuel entier (celui de OS X ne gère pas le maintient appuyé des modifier keys).




     


    Si, bien sûr. Les touches à  auto-maitien standards fonctionnent parfaitement et aussi bien avec le clavier normal, le clavier virtuel et la souris.


     


    C'est une fonction que j'utilise intensément, par exemple lorsque j'ai papier-crayon dans une main et clavier sous l'autre.

  • merci du tuyau. 


     


    mais tant qu'à  faire, j'aimerais me passer de la fonction auto maintien du système.


Connectez-vous ou Inscrivez-vous pour répondre.