- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
设置事件点击后,我无法识别在给定 CGEvent 的情况下按下了哪个修饰键。
CGEventFlags flagsP;
flagsP=CGEventGetFlags(event);
NSLog(@"flags: 0x%llX",flagsP);
NSLog(@"stored: 0x%llX",kCGEventFlagMaskCommand);
if (flagsP==kCGEventFlagMaskCommand) {
NSLog(@"command pressed");
}
鉴于上面的代码片段,第一个 NSLog 返回与第二个 NSLog 不同的值。毫不奇怪,按下命令修饰键时永远不会触发条件。
我需要确定对于给定的 CGEvent 是否按下了命令、备用、选项、控制或移位。首先,我需要帮助来理解为什么上面的方法不起作用。
谢谢!
最佳答案
这些是位掩码,它们将按位或组合在一起成为您从 CGEventGetFlags 接收的值(或在自己创建事件时传递)。
您无法在此处测试相等性,因为没有一个位掩码会等于多个位掩码的组合。您需要测试单个位的相等性。
要从组合位掩码中提取单个位掩码的值,请使用按位与 (&
) 运算符。然后,将其与您感兴趣的一位掩码进行比较:
BOOL commandKeyIsPressed = (flagsP & kCGEventFlagMaskCommand) == kCGEventFlagMaskCommand;
为什么两者都有?
&
表达式的计算结果与其操作数的类型相同,在本例中为 CGEventFlags
,它可能不适合 BOOL< 的大小
,这是一个有符号字符
。 ==
表达式将其解析为 1 或 0,这是适合 BOOL
的所有内容。
该问题的其他解决方案包括对值取反两次 (!!
) 并将变量声明为 bool
或 _Bool
而不是 bool 值
或BOOL
。 C99 的 _Bool
类型(当您包含 stdbool.h 时,同义词为 bool
)强制其值为 1 或 0,就像 ==
和 !!
解决方案确实如此。
关于events - 获取 CGEvent Tap 中按下的修改键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4420995/
我正在使用CGEventPost()以编程方式发布键盘和鼠标事件。这些事件最终将触发其他事件/操作(例如,某些窗口变为事件状态、按下按钮、在文本字段中输入字母)。为了同步线程,我想知道何时由特定 CG
在继续之前,我想在这篇文章的序言中说,这可能是最黑客、最邪恶、最令人讨厌的话题,所以我不希望答案包含任何“合法”代码. 在尝试访问 OS X Mountain Lion 用于包含激活听写的热键组合的内
这是一篇关于如何通过代码按键的精彩文章。 CMD+Option+D simulation in Cocoa 这很有效,但是当您对应用程序进行沙箱处理时,它就不起作用了。有谁知道我应该在权利文件中请求异
我正在尝试学习如何使用 SO 和其他地方的示例创建 CGEvent tap。 我知道如何使用以下方法创建事件点击: let eventTap = CGEvent.tapCreate(*/argumen
我正在尝试自动执行一些任务(没有 applescript 支持),因此我必须使用 CGEvents 并发布这些事件。鼠标单击工作正常,但 NSKeyDown(输入)仅在我单击扩展坞中的应用程序时才有效
我的应用程序使用事件点击来捕获键盘事件,我想知道每个事件来自哪个设备(即哪个键盘)。是否存在某种设备识别信息以及点击获取的 CGEvent?我查看了 NSEvent 的方法和各种 CGEventFie
NSEvent有一个方法来获取事件的子类型: Getting Custom Event Information – data1 – data2 – subtype 是否可以从 CGEvent 访问相同
设置事件点击后,我无法识别在给定 CGEvent 的情况下按下了哪个修饰键。 CGEventFlags flagsP; flagsP=CGEventGetFlags(event); NSLog(
我正在尝试将回车键发送到这样的后台应用程序: CGEventRef a = CGEventCreateKeyboardEvent(eventSource, 36, true); CGEventRef
一旦我将 CGEvent 转换为 NSEvent (我需要),我就很难释放它。我正在使用 CGEventTap 来执行此操作。从文档中可以看出 Returns: An autoreleased NSE
我有一个带有 swift 桥接器的 C 文件,我可以为我的 macos 程序调用它,它工作正常。 但是它有一个函数 CGEventTapCreate 只能在终端中使用 sudo 才能工作,否则它会返回
我想在我的应用程序中模拟 Application Switcher,我认为 CGEvent 也许可以做到这一点。 好了,在学习了一些关于CGEvent的基本信息之后,我可以模拟按键按下Command
编辑 - 对此没有太多意见,所以这里是瘦子。我正在将键盘事件发布到 PSN。然后我切换到另一个窗口,发布更多事件(这次是 session 级别)并切换回第一个窗口。当我再次开始向 PSN 发帖时,什么
我需要在我的 Qt 应用程序上模拟 keyPress(我在 mac Os X 10.6 上)。 我写了这段代码: #include ... CGEventRef mkey = CGEventCrea
我是一名优秀的程序员,十分优秀!