1
ウィンドウがフォアグラウンドで開いているときにコードが正常に機能し、スペースキーを押すと、マウスが予想どおりに動きますが、別のアプリケーションに移動してスペースキーは、マウスはもはやキーストロークで期待通りに動く、どのように私はそれはあなたがシステム全体のイベントをキャプチャする必要があります背景アプリケーションがバックグラウンドに設定されていると機能しなくなる
import Cocoa
class ViewController: NSViewController {
var timer: Timer!
@objc func movethemouse() {
let mouseLocx = NSEvent.mouseLocation.x
let mouseLocy = NSEvent.mouseLocation.y
let screenH = NSScreen.main?.frame.height
let deltaX = CGFloat(Int(1))
let deltaY = CGFloat(Int(1))
let newLoc = CGPoint(x: mouseLocx + deltaX , y: screenH! - mouseLocy - deltaY)
CGDisplayMoveCursorToPoint(CGMainDisplayID(), newLoc)
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override func viewDidAppear() {
view.window?.makeFirstResponder(self)
}
override var acceptsFirstResponder : Bool {
return true
}
var count3=0
var flag = false
override func keyDown(with event: NSEvent) {
if (event.keyCode == 49){
flag = true
if count3 == 0 {
timer = Timer.scheduledTimer(timeInterval: 0.001, target:self, selector: #selector(ViewController.movethemouse), userInfo: nil, repeats:true)
print(event)
}
count3 += 1
}
}
override func keyUp(with event: NSEvent) {
print(event)
if (event.keyCode == 49) {
if flag {
timer.invalidate()
count3 = 0
print(event)
}
}
}
}
他のAppがフォアグラウンドで既にキーボードイベントを処理しているため、あなたのAppはイベントを取得しないと思います。 'keyDown'と' keyUp'が実際に呼び出されたかどうかを確認するためにいくつかのログを追加しましたか? – mschmidt
アプリケーションがバックグラウンドになると、イベントKeyDownおよびKeyUpは呼び出されなくなりました。それが解決しようとしているのですが、アプリケーションがバックグラウンドで実行されている間、それらをアクティブに保つにはどうすればいいですか? – DeveloperSwift11
キーイベントとマウスイベントは最前面に表示されます。 [イベントの監視](https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/EventOverview/MonitoringEvents./MonitoringEvents.html#//apple_ref/doc/uid/10000060i-CH15-SW3)の[ Cocoa Event Handling Guide](https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/EventOverview/Introduction/Introduction.html#//apple_ref/doc/uid/10000060i-CH1-SW1)を参照してください。 – Willeke