2011-05-13 13 views
8

'a atıfta bulunmadan Objective-C'de klavye durumu nasıl edinilir? NSEvent'a bakılmaksızın klavyenin durumu Objective-C'de mümkün mü?NSEvent

Genel olarak -[NSResponder flagsChanged:] gibi NSResponder yöntemlerini kullanamıyorum, ancak Komut anahtarının şu anda basılı olup olmadığını bilmem gerekiyor.

+0

Um. ** Neden ** NSEvent'e başvuramıyorsunuz? – walkytalky

+0

Bugün bu sorunun cevabı yararlı olmalıdır: http://stackoverflow.com/questions/5994656/how-to-tell-if-a-modifier-key-is-down-during-drop-on-dock –

+0

@Josh bir olay kullanıyor. –

cevap

16

Hala neden NSEvent kullanamadığınızı merak ediyorum, ancak yine de soruyu yanıtlayacağım. Belki de bir "komut satırı aracı" oluşturuyorsunuz ve sadece Vakfın karşıtı mı? En az bir tane daha çerçeve eklemeniz gerekecek. AppKit ile bağlantı kurmak istiyorsanız, (yorumlarda belirttiğim gibi) +[NSEvent modifierFlags]; Bu, NSEvent'da bir sınıf yöntemidir, böylece her bir düğmeyi, tek tek bir olaya erişmeye gerek kalmadan, değiştirici tuşlarının geçerli durumunu bir bit maskesi olarak almak için kullanabilirsiniz. Dokümanlar, meaning of the bitmask'u açıklar.

if(NSCommandKeyMask & [NSEvent modifierFlags]){ 
    NSLog(@"Oh, yeah!"); 
} 

Ayrıca Quartz Event Services kullanarak bu bilgileri alabilirsiniz. Bu durumda ApplicationServices çerçevesini * eklemeniz gerekir. CGEventSource functions size verecektir same bitmask sen NSEvent aldığım:

CGEventFlags theFlags; 
theFlags = CGEventSourceFlagsState(kCGEventSourceStateHIDSystemState); 
if(kCGEventFlagMaskCommand & theFlags){ 
    NSLog(@"Uh huh!"); 
} 

* Bu zaten dahildir eğer, aslında, bir Kakao app yazma - bu Kuvars parçası.

+0

Teşekkürler Josh, tam ihtiyacım olan şey bu – shpoont