2013-07-21 27 views
10

Üzerinde değiştirici tuşlar bulunan küçük bir panel tasarlamanın bir yolunu arıyorum (örneğin, vardiya, komut) ve sanal klavyede olduğu gibi tıklamaya imkan var. Sanal tuşu (shift) üzerineCGEventPost - bir tuşa basılı tutun (shift)

  • tıklayın:

    Ben bu davranışı olsun isterim.

  • Vardiya düğmesi basılı tutulur ve basılı tutulur. Standart klavyemle
  • bir şey yazın.
  • Sanal serbest bırakma anahtarında serbest bırakmak için başka bir zamana tıklayın. Ben onun üzerine başka bir tıklama zamanı kadar basılı tutmak için bir yol bulamıyorum

    CGEventSourceRef source = CGEventSourceCreate(kCGEventSourceStateHIDSystemState); 
    CGEventRef shiftKeyDown = CGEventCreateKeyboardEvent(source, (CGKeyCode)56, YES); 
    CGEventRef shiftKeyUp = CGEventCreateKeyboardEvent(source, (CGKeyCode)56, NO); 
    
    CGEventPost(kCGAnnotatedSessionEventTap, shiftKeyDown); 
    CGEventPost(kCGAnnotatedSessionEventTap, shiftKeyUp); 
    
    CFRelease(shiftKeyUp); 
    CFRelease(shiftKeyDown); 
    CFRelease(source); 
    

    : Burada

kullanıyorum kodudur. "Push On Push" Düğmesi Hücre tipi anahtar oldu ama ne yazık ki hayır. :-)

Herhangi bir yardım?

şimdiden teşekkürler.

+1

ben değiştirici tuşları basılı tutarak taklit çalışıyorum, CGEventPost ile benzer bir sorun var, ama benim asıl fareyi taşınmış veya benim gerçek klavyenizdeki herhangi bir tuşa, bu değiştirici tuşları sıfırlama olacağını basıldığında sadece ilginç buldum kanıtladı yerleşik klavye görüntüleyiciyi kontrol ederek. Senin için aynı durum mu? – Jerry

+0

Bu sorunu çözdünüz mü? Ben de aynı şeyi görüyorum. –

+0

Aynı sorunu yaşıyor. – aristidesfl

cevap

0

Bir vardiya tuşu bu şekilde neredeyse basılı tutulduğunda, vardiya bayrağı içermeyen bir olayın ardından otomatik olarak serbest bırakılır. Bu, aksi belirtilmedikçe belge türünü dikkate alarak bir sınırlama veya bir hata gibi görünüyor: https://developer.apple.com/reference/coregraphics/cgevent/1456564-init#discussion

Aradığınızı elde etmenin tek yolunu bulmak için bir olay dinleyicisi ayarlamak ve vardiya bayrağı eklemek Shift tuşu ile değiştirilmesi gereken her etkinliğe. Klavye olayları dinlemek için nasıl

Örnek: Bu yardımcı olur

event?.flags.insert(.maskShift) 

Hope: https://stackoverflow.com/a/31898592/1445812 (Swift) vardiya bayrağı vardı nasıl

Örnek olayları ele için. Her olay için bayrak eklemeye gerek kalmadan aynı şeyi yapmayı bilen varsa, lütfen söyleyin.

+0

AppleScript: '' uygulama '' Sistem Olayları '' tuşunu aşağı kaydırmak için '' uygulamayı uygula '' Sistem Olayları '' tuşunu kaydırır ''. – Willeke

+0

@Willeke bunun farkındadır, ancak elmalılardaki önemli olayları nasıl dinlersiniz? – aristidesfl

+0

Dinlemek zorunda değilsiniz, shift tuşu kalıyor. – Willeke