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)
}
}
}
}
다른 앱이 포 그라운드에서 이미 키보드 이벤트를 처리하기 때문에 앱에 이벤트가 발생하지 않는다고 생각합니다. '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)의 [ 코코아 이벤트 처리 가이드] (https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/EventOverview/Introduction/Introduction.html#//apple_ref/doc/uid/10000060i-CH1-SW1). – Willeke