这是我当前的代码无效:
CGEventSourceRef src =
CGEventSourceCreate(kCGEventSourceStateHIDSystemState);
CGEventRef cmdd = CGEventCreateKeyboardEvent(src, 0x37, true);
CGEventRef cmdu = CGEventCreateKeyboardEvent(src, 0x37, false);
CGEventRef optd = CGEventCreateKeyboardEvent(src, 0x3A, true);
CGEventRef optu = CGEventCreateKeyboardEvent(src, 0x3A, false);
CGEventRef dd = CGEventCreateKeyboardEvent(src, 0x02, true);
CGEventRef du = CGEventCreateKeyboardEvent(src, 0x02, false);
CGEventSetFlags(dd, kCGEventFlagMaskCommand ^ kCGEventFlagMaskAlternate);
CGEventSetFlags(du, kCGEventFlagMaskCommand ^ kCGEventFlagMaskAlternate);
CGEventTapLocation loc = kCGHIDEventTap; // kCGSessionEventTap also works
CGEventPost(loc, cmdd); //Cmd down
CGEventPost(loc, optd); //Option down
CGEventPost(loc, dd); //D down
CGEventPost(loc, cmdu); //Cmd up
CGEventPost(loc, optu); //Option up
CGEventPost(loc, du); //D up
CFRelease(cmdd);
CFRelease(cmdu);
CFRelease(optd);
CFRelease(optu);
CFRelease(dd);
CFRelease(du);
CFRelease(src);
我需要更改什么才能使其正常工作?有谁知道为什么它不起作用?
答案 0 :(得分:2)
我无法理解为什么你想通过模拟关键命令来做截图(可以通过改变btw使其脆弱)。以编程方式简单地执行此操作会更好。 Apple对此有example code,Quartz Display Services documentation除此之外可以帮助您。
答案 1 :(得分:0)
看一下'screencapture'命令行工具 - 手册页在这里: man screencapture
至少可以从10.6开始使用,这将使您不必自己编写逻辑代码。
例如,在终端中执行'screencapture -s~ / Desktop / screenshot.png'将运行基于区域的屏幕捕获,并将输出放在桌面上的'screenshot.png'中。
您可以使用C库的system()函数调用命令行工具。
答案 2 :(得分:0)
我设法解决了我的问题
我是这样做的:
然后我执行了以下代码:
NSString *path = @"/Applications/CloudSyncMac.app/Contents/Resources/screencapture.sh";
NSArray *args = [NSArray arrayWithObjects:nil, nil];
[[NSTask launchedTaskWithLaunchPath:path arguments:args] waitUntilExit];
有效!!!