将击键事件“粘贴”发送到特定的应用程序Mac

时间:2018-08-15 19:20:22

标签: objective-c macos accessibility macos-carbon cgeventtap

我正在使用代码在MacOS上使用Carbon模拟最前端应用程序的“粘贴”。现在,我需要对最前面的特定应用程序执行此操作。到目前为止,我一直在通过PostToPsn使用此代码:

   ProcessSerialNumber psn;
   //Using 8844 for testing purposes (safari)
   OSStatus err = GetProcessForPID(8844, &psn);

   CGEventSourceRef source = CGEventSourceCreate(kCGEventSourceStateCombinedSessionState);
   CGEventRef cmdDown = CGEventCreateKeyboardEvent(source,kVK_ANSI_V, YES);
   CGEventSetFlags(cmdDown, kCGEventFlagMaskCommand);
   CGEventRef cmdUp = CGEventCreateKeyboardEvent(source, kVK_ANSI_V, NO);

   if(err == noErr){

       CGEventPostToPSN(&psn, cmdDown);
       CGEventPostToPSN(&psn, cmdUp);

       CFRelease(cmdUp);
       CFRelease(cmdDown);
       CFRelease(source);

   }

它仅使用一个字母即可工作,但与命令组合时,则根本无法工作。

0 个答案:

没有答案