在控制台应用程序中使用swift处理可可键事件(按下键)

时间:2014-12-13 20:38:22

标签: macos cocoa swift

好的,所以我试图登录控制台输出按下了哪些键。我无法理解可可结构,无论是Obj-c还是swift。我不是这两种语言的大师,但是......这就是我的代码:

import Cocoa
import Foundation
import AppKit

var loop = true
var idRegisterdEvent: AnyObject? = nil

func handlerEvent(myEvent: (NSEvent!)) -> Void {
    print(myEvent.keyCode)
}

while loop {

    idRegisterdEvent = NSEvent.addGlobalMonitorForEventsMatchingMask(NSEventMask.KeyDownMask, handler: handlerEvent)
}

我知道一切都错了,是的..但是,伙计,这些事件,我无法理解它们是如何运作的。

1 个答案:

答案 0 :(得分:12)

在谷歌上花了几个小时后,我最终阅读了几个github资源。结果是someone has already figured it out

基本上您需要创建一个<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.0/jquery.min.js"></script> <div> <select id="companieslist" name="companieslist"></select> </div>,这样您的应用就可以收听系统事件。

以下显示了最低限度代码NSApplicationDelegate):

swift2

如果您只对仅捕获不可访问性事件感兴趣(例如:func acquirePrivileges() -> Bool { let accessEnabled = AXIsProcessTrustedWithOptions( [kAXTrustedCheckOptionPrompt.takeUnretainedValue() as String: true]) if accessEnabled != true { print("You need to enable the keylogger in the System Preferences") } return accessEnabled == true } class ApplicationDelegate: NSObject, NSApplicationDelegate { func applicationDidFinishLaunching(notification: NSNotification?) { acquirePrivileges() // keyboard listeners NSEvent.addGlobalMonitorForEventsMatchingMask( NSEventMask.KeyDownMask, handler: {(event: NSEvent) in print(event) }) } } // preparing main loop let application = NSApplication.sharedApplication() let applicationDelegate = MyObserver() application.delegate = applicationDelegate application.activateIgnoringOtherApps(true) application.run() ),那么您只需要更少的代码行即可获得NSWorkspaceDidActivateApplicationNotification 。我只添加了这个示例,因为我看到了NSRunLoop.mainRunLoop().run() 事件循环,它永远不会让你监听任何系统事件,因为它阻塞了主线程。

while true