CGEventSourceCreate采用CGEventSourceStateID,它是UInt32的类型,但是诸如kCGEventSourceStateHIDSystemState之类的常量被定义为Int,因此您必须转换它们,即CGEventSourceStateID(kCGEventSourceStateHIDSystemState).与CGEventFlags一样.
CGEventSourceCreate和CGEventCreateKeyboardEvent返回一个Unmanaged< CGEventSource> (或Unmanaged< CGEvent>).自动生成的用于Core Graphics的Swift API不知道是否需要释放返回的对象,因此您需要检查这些调用的api文档,然后相应地使用takeRetainedValue()或takeUnretainedValue() value,将它们转换为您要使用的基础类型.
最后,它们会隐式返回未包装的选项,因此您需要决定是否要检查nils,或者只是回想一下运行时爆炸的兴奋.
鉴于所有这一切都非常简单,将答案中的Objective-C转换为将Cmd-Space压缩为Swift,我只是尝试将其粘贴到临时应用程序中并且工作正常:
(虽然我没有检查api文档是否保留是正确的做法)
let src = CGEventSourceCreate(CGEventSourceStateID(kCGEventSourceStateHIDSystemState)).takeRetainedValue()let cmdd = CGEventCreateKeyboardEvent(src,0x38,true).takeRetainedValue()let cmdu = CGEventCreateKeyboardEvent(src,false).takeRetainedValue()let spcd = CGEventCreateKeyboardEvent(src,0x31,true).takeRetainedValue()let spcu = CGEventCreateKeyboardEvent(src,false).takeRetainedValue()CGEventSetFlags(spcd,CGEventFlags(kCGEventFlagMaskCommand));CGEventSetFlags(spcd,CGEventFlags(kCGEventFlagMaskCommand));let loc = CGEventTapLocation(kCGHIDEventTap)CGEventPost(loc,cmdd)CGEventPost(loc,spcd)CGEventPost(loc,spcu)CGEventPost(loc,cmdu)总结
以上是内存溢出为你收集整理的cocoa – 使用Swift模拟按键全部内容,希望文章能够帮你解决cocoa – 使用Swift模拟按键所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)