objective-c - Cocoa中的CMD+Option+D模拟

标签 objective-c cocoa api keyboard-shortcuts

我需要同时模拟 CMD+Option+D 按键。我已经做了各种查找,到目前为止我见过的最好的方法就是这样做:

CGEventSourceRef src =
    CGEventSourceCreate(kCGEventSourceStateHIDSystemState);

    CGEventRef cmdd = CGEventCreateKeyboardEvent(src, kVK_Command, true);
    CGEventRef cmdu = CGEventCreateKeyboardEvent(src, kVK_Command, false);
    CGEventRef optd = CGEventCreateKeyboardEvent(src, kVK_Option, true);
    CGEventRef optu = CGEventCreateKeyboardEvent(src, kVK_Option, false);
    CGEventRef dd = CGEventCreateKeyboardEvent(src, kVK_ANSI_D, true);
    CGEventRef du = CGEventCreateKeyboardEvent(src, kVK_ANSI_D, false);

    CGEventSetFlags(dd, kCGEventFlagMaskCommand); //NO idea why this is here.
    CGEventSetFlags(du, kCGEventFlagMaskCommand); //NO idea why this is here.


    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);

但是,这样做不会像我使用键盘时那样切换坞站?为什么是这样?我究竟做错了什么?我导入了 Carbon.h,所以看起来这应该可行?

最佳答案

你尝试过这个吗?

// as before ...
CGEventSetFlags(dd, kCGEventFlagMaskCommand ^ kCGEventFlagMaskAlternate); 
CGEventSetFlags(du, kCGEventFlagMaskCommand ^ kCGEventFlagMaskAlternate);
// continues...

我认为您必须为 D 事件设置命令备用(选项键)标志。

关于objective-c - Cocoa中的CMD+Option+D模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15206825/

相关文章:

cocoa - 更改 CALayer 属性 : EXC_BAD_INSTRUCTION

objective-c - 使用 LSUIElement (又名无 Dock 图标)但保留 "File, Edit, View"菜单栏?

php - 将 MySQL 数据库连接到 InfusionSoft 联系人

ios - 当页面更改时,我的 UIPageViewController 中的下一页仅部分加载

objective-c - 如何使 C 函数和预处理器宏可供多个 Objective-C 类使用?

objective-c - 应用程序卡在__semwait_signal()中

objective-c - 使用 NSScanner 删除字符串中的注释?

objective-c - Cocoa 应用程序内部的 Applescript

api - 什么是流式 API

php - 拉维 API 404 错误