由于开始接触iOS开发,所以最近一直在Mac下工作。在Windows上,有个显示桌面的图标,对于有点洁癖的人来说,点击一下还我清爽,非常实用。在Mac下,⌘+F3快捷键虽然可以达到类似的效果,但触发后桌面边缘有阴影,且点击桌面文件后会重新显示之前隐藏的应用,不是很爽。知乎上有人问过Mac显示桌面的问题,应该有不少Mac用户需要这个功能,AppStore搜索了一下,真有相关应用,但需要付费,所以我就打算自己开发一款。
没有太多精力,第一个版本我只想实现两个功能:
首先要在状态栏显示图标,代码如下:
注意 :由于只显示状态栏图标,不显示窗口和菜单栏,所以需要在plist文件中设置
statusItem = [[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength];
[statusItem setImage:[NSImage imageNamed:@”StatusIcon”]];
[statusItem setHighlightMode:YES];
[statusItem setAction:@selector(onStatusItemClicked:)];
[statusItem setTarget:self];
Application is background only
为 YES
。
如何实现显示桌面呢?其实显示桌面是有快捷键的,CMD+ALT+H+M,按下CMD+ALT+H就会隐藏当前窗口除外的窗口,CMD+M会隐藏当前窗口,所以同时按下CMD+ALT+H+M就会达到显示桌面的效果。
所以现在需要做的就是模拟按键,之前做Java桌面应用开发的时候,有个Robot类非常方便,查阅了一下资料,Mac开发也有类似方法:
其中
GEventSourceRef src = CGEventSourceCreate(kCGEventSourceStateHIDSystemState);
CGEventRef cmdDown = CGEventCreateKeyboardEvent(src, kVK_Command, true);
CGEventPost(kCGHIDEventTap, cmdDown);
kVK_Command
参数是指虚拟按键,对应的是 0x37
,代指Command按键。 kVK_Command
在 <Carbon/Carbon.h>
中枚举定义,所以需要 #import <Carbon/Carbon.h>
。
Mac开发实现开机启动有多种方式,比较方便的是使用 LSSharedFileListInsertItemURL
方法,腾讯的老谭有篇 文章 ,参考了一下,不过其中的 LSSharedFileListItemResolve
已被废弃,需要用 LSSharedFileListItemCopyResolvedURL
代替。
代码比较简单,也已在 Github 上开源,最终效果图如下:
http://jiajixin.cn/ShowDeskTop.app.zip
时间仓促,应用有些不足之处:
应用程序
文件夹中,后续会添加此功能。