Я не уверен, чего вы пытаетесь достичь, но, похоже, система продолжит удерживать кнопку нажатой. Этот простой эксперимент показывает это.
func applicationDidFinishLaunching(aNotification: NSNotification) {
print("waiting 4 seconds, use this time to position your cursor in a text field")
let delayTime = dispatch_time(DISPATCH_TIME_NOW, Int64(4 * Double(NSEC_PER_SEC)))
dispatch_after(delayTime, dispatch_get_main_queue(), {
self.insertLetterZ()
})
}
func insertLetterZ() {
print("pressing shift")
self.tapButton(56)
print("holding button for 2 seconds")
let delayTime = dispatch_time(DISPATCH_TIME_NOW, Int64(2 * Double(NSEC_PER_SEC)))
dispatch_after(delayTime, dispatch_get_main_queue(), {
print("tapping z, but Z will be selected (since shift is still being pressed)")
self.tapButton(6)
print("untapping z and shift")
self.untapButton(6)
self.untapButton(56)
})
}
func tapButton(button: CGKeyCode) {
let event = CGEventCreateKeyboardEvent(nil, button, true)
CGEventPost(CGEventTapLocation.CGSessionEventTap, event)
}
func untapButton(button: CGKeyCode) {
let event = CGEventCreateKeyboardEvent(nil, button, false)
CGEventPost(CGEventTapLocation.CGSessionEventTap, event)
}
Этот код однако делает не прописной буквы, если пользователь вводит на клавиатуре, когда сдвиг программно нажата. Я также заметил, что если местоположение курсора будет изменено между сдвигом и z, то будет добавлено «z» вместо «Z»
Я не уверен, что понимаю, что вы пытаетесь сделать здесь. Вы имеете в виду, что реакция кнопки должна быть отложена на 5 секунд и только срабатывает, если использование снова нажимает кнопку в течение 5 секунд? Визуально также нужно это отразить? Или, возможно, вам нужно проехать в течение 5 секунд назад и сделать кнопку нажатой в течение последних Х секунд, если пользователь снова нажмет ее в течение 5 секунд в будущем. (где Doc Brown, когда он вам нужен?) –
Я имею в виду, что когда пользователь нажимает конкретный ключ, система должна имитировать непрерывное нажатие. Например, я нажимаю «A» и немедленно отключаю его, но система действует так, как будто я держу клавишу «A», пока не нажму ее снова. –