У меня очень простой кусок кода, который предназначен для имитации событий клавиатуры. В простом примере ниже следует ввести "Cz" - клавиша смены идет вниз, клавиша c спускается, c появляется и сдвигается вверх. Затем клавиша z переходит вниз и вверх.
Кажется, что иногда порядок путается. Когда я создаю таймер для вызова этой процедуры каждую секунду, вывод должен быть CzCzCzCz.... Но вот что я получаю:
CZcZCZCzczCzczCzczCZCZCzCz
Я запустил его еще раз:
CzCzCzCzCZCzCZCzCZCzCZCzCZCzCzCz
Different. И одинаково неправильно.
Код:
e1 = CGEventCreateKeyboardEvent(NULL, (CGKeyCode)56, true);
CGEventPost(kCGSessionEventTap, e1);
CFRelease(e1);
e2 = CGEventCreateKeyboardEvent(NULL, (CGKeyCode)8, true);
CGEventPost(kCGSessionEventTap, e2);
CFRelease(e2);
e3 = CGEventCreateKeyboardEvent(NULL, (CGKeyCode)8, false);
CGEventPost(kCGSessionEventTap, e3);
CFRelease(e3);
e4 = CGEventCreateKeyboardEvent(NULL, (CGKeyCode)56, false);
CGEventPost(kCGSessionEventTap, e4);
CFRelease(e4);
e7 = CGEventCreateKeyboardEvent(NULL, (CGKeyCode)6, true);
CGEventPost(kCGSessionEventTap, e7);
CFRelease(e7);
e8 = CGEventCreateKeyboardEvent(NULL, (CGKeyCode)6, false);
CGEventPost(kCGSessionEventTap, e8);
CFRelease(e8);
Есть ли что-то, что мне не хватает в том, как реализовать keydown и keyup для клавиши shift? Я думаю, что это может быть ошибка - где я могу сообщить об этом?