CGEventPost - possible bug when simulating keyboard events?

前端 未结 6 1300
挽巷
挽巷 2020-12-01 05:04

I have a very simple chunk of code that is designed to simulate keyboard events. The simple example below should type \"Cz\" - the shift key goes down, the c key goes down,

6条回答
  •  不知归路
    2020-12-01 05:32

    The cleanest way for this is bitwise OR'ing the current modifier flags with the flag of your desired modifier(s) , e.g.:

    CGEventFlags flags = kCGEventFlagMaskShift;
    CGEventRef ev;
    CGEventSourceRef source = CGEventSourceCreate (kCGEventSourceStateCombinedSessionState);
    
    //press down            
    ev = CGEventCreateKeyboardEvent (source, keyCode, true);    
    CGEventSetFlags(ev,flags | CGEventGetFlags(ev)); //combine flags                        
    CGEventPost(kCGHIDEventTap,ev);
    CFRelease(ev);              
    
    //press up                                  
    ev = CGEventCreateKeyboardEvent (source, keyCode, false);                       
    CGEventSetFlags(ev,flags | CGEventGetFlags(ev)); //combine flags                        
    CGEventPost(kCGHIDEventTap,ev); 
    CFRelease(ev);              
    
    CFRelease(source);
    

提交回复
热议问题