我正在使用代码在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);
}
它仅使用一个字母即可工作,但与命令组合时,则根本无法工作。