Sous Mac OS X 10.6, NSEvent
utilise une méthode de classe +modifierFlags
pour déterminer les indicateurs de modification actuellement activés. Dans 10.5, en utilisant [[NSApp currentEvent] modifierFlags]
seulement mises à jour après le déplacement de la souris. Est-il possible d'obtenir de façon asynchrone les drapeaux de modificateur?Les drapeaux du modificateur NSEvent ne sont pas mis à jour tant que la souris ne se déplace pas
2
A
Répondre
2
Selon un commentaire sur this blog post, vous pouvez utiliser CGEventCreate() et CGEventGetFlags().
CGEventRef event = CGEventCreate(NULL /*default event source*/);
CGEventFlags mods = CGEventGetFlags(event);
if (mods & kCGEventFlagMaskShift)
NSLog(@"Shift key is being pressed");
Les drapeaux modificateurs renvoyés par CGEventGetFlags() (CGEventFlags) sont les mêmes que ceux NSEvent.
2
GetCurrentKeyModifiers()
. C'est une fonction C mais elle est disponible dans les applications Cocoa (elle fait partie du framework Carbon, mais est toujours disponible sur les systèmes 64 bits, IIRC). Notez que les indicateurs qu'elle utilise ne sont pas égaux aux drapeaux Cocoa. changer de manière appropriée.
Est-il disponible uniquement sur les systèmes 64 bits? J'essaie de cibler les systèmes 32 bits exécutant 10.5. –
Alexsander Akers: Non. Il est disponible depuis l'époque de CarbonLib sur Mac OS, y compris sur tous les systèmes 32 bits entre maintenant et maintenant; il a mentionné la compatibilité 64 bits parce que beaucoup de gens, en voyant une fonction Carbon suggérée, vont bondir et crier "Carbon n'est pas disponible en 64 bits!". –