β

Mac下“一键回桌面”应用开发笔记

de部落格^_^ 336 阅读

偶然看到别人的写得一篇Mac下显示桌面应用开发,觉得挺有趣的,并且,一键回桌面,对我来说,也是挺常用的,所以,就试着自己开发了一个,不过原来的作者使用的是objective c开发的。这里使用的是Swift语言来进行开发,也是加深自己对于Swift的运用吧。

功能

  1. 状态栏点击图标,即显示桌面,所有显示窗口最小化。
  2. 开机默认自启动,用户可以选择是否开机自启动。

原来的作者开发的是纯状态栏应用,初衷也挺好的,但是,有一个瑕疵是,用户不能手动退出应用了。所以,我把它放在dock了(其实这也是瑕疵!),这样的好处,不用的时候,用户可以手动退出。

状态栏

要在状态栏中显示icon,并且添加点击它的action,代码如下:

let statusItem = NSStatusBar.systemStatusBar().statusItemWithLength(-1)

//icon showed in system status bar
let icon = NSImage(named: "desktop")
icon?.setTemplate(true)
statusItem.image = icon

// define the action when the icon was clicked!
statusItem.action = Selector("goBackDesktop:")

显示桌面

如何实现显示桌面呢?
其实显示桌面是有快捷键的,CMD+ALT+H+M,按下CMD+ALT+H就会隐藏当前窗口除外的窗口,CMD+M会隐藏当前窗口,所以同时按下CMD+ALT+H+M就会达到显示桌面的效果。

所以现在需要做的就是模拟按键,代码如下:

    //simulate option+command+h+m 

    var src = CGEventSourceCreate(CGEventSourceStateID(kCGEventSourceStateHIDSystemState)).takeRetainedValue()

    let cmdDown = CGEventCreateKeyboardEvent(src, 0x37, true).takeRetainedValue()
    let cmdUp = CGEventCreateKeyboardEvent(src, 0x37, false).takeRetainedValue()
    CGEventSetFlags(cmdDown, CGEventFlags(kCGEventFlagMaskCommand))
    CGEventSetFlags(cmdUp, CGEventFlags(kCGEventFlagMaskCommand))


    let loc = CGEventTapLocation(kCGHIDEventTap)

    CGEventPost(loc, cmdDown)

    CGEventPost(loc, cmdUp)

其中0x37,对应的是Command按键。

开机启动

Swift开机启动,我是看了这个stackoverflow的提问,了解的。

效果展示

应用下载

http://zhonghuan.info/ZHShowDesktop.app.zip

下载完后,直接拷贝到应用程序中即可

代码

代码都放在我的github上了,喜欢的朋友请点个赞,觉得有必要改进的朋友,可以fork之后,再合并给我。

地址: https://github.com/ZHONGHuanGit/ZHShowDesktop

笔者注:欢迎非商业转载,但请一定注明出处

如果你认为这篇不错,也有闲钱,那你可以用支付宝随便捐助一点,以慰劳笔者的辛苦:

作者:de部落格^_^
Enjoy your choice, enjoy your life.
原文地址:Mac下“一键回桌面”应用开发笔记, 感谢原作者分享。