栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用Swift模拟按键

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用Swift模拟按键

链接答案上的代码可以很容易地转换为Swift代码,但是在此过程中您需要注意一些技巧:

CGEventSourceCreate
接受a
CGEventSourceStateID
,这是a的类型别名
UInt32
,但是诸如的常量
kCGEventSourceStateHIDSystemState
被定义为as
Int
,因此您必须将它们强制转换为ie
CGEventSourceStateID(kCGEventSourceStateHIDSystemState)
。与相同
CGEventFlags



CGEventSourceCreate
CGEventCreateKeyboardEvent
返回一个
Unmanaged<CGEventSource>
(或
Unmanaged<CGEvent>
)。自动生成的用于核心图形的Swift
API不知道您是否需要释放返回的对象,因此您需要检查这些调用的API文档,然后对返回值使用
takeRetainedValue()
takeUnretainedValue()
相应地将其转换为您要使用的基础类型。

最后,它们返回隐式解包的可选变量,因此,您需要确定是否要检查nil,或者如果它们返回一个,则只是在运行时爆炸的刺激下生活。

鉴于在演示中将Objective-C转换为演示将Cmd-Space按下Swift相当简单,我只是尝试将其粘贴到草稿应用程序中,并且效果很好:

(尽管我还没有检查API文档中的保留内容是否正确)

let src = CGEventSourceCreate(CGEventSourceStateID(kCGEventSourceStateHIDSystemState)).takeRetainedValue()let cmdd = CGEventCreateKeyboardEvent(src, 0x38, true).takeRetainedValue()let cmdu = CGEventCreateKeyboardEvent(src, 0x38, false).takeRetainedValue()let spcd = CGEventCreateKeyboardEvent(src, 0x31, true).takeRetainedValue()let spcu = CGEventCreateKeyboardEvent(src, 0x31, 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)


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/371256.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号