问候.我试着让孩子控制应用程序.键盘记录器是此应用程序的一部分.我使用CGEventTapCreate来观看键盘.这很好用,但有时我会重复关键事件.它们没有设置[NSEvent isARepeat],只是重复.例如,我可以输入"qwerty"但应用程序会获取这些字符的关键事件:"qqwweerrttyy".也许有人经历过这样的喜欢吗?我在10.5和10.6上都遇到了这个问题(两者都是英特尔).
我在这里发布键盘记录器安装和处理程序方法:
- (BOOL)installKeyboardLogger
{
CGEventMask keyboardMask = CGEventMaskBit(kCGEventKeyDown);
CGEventMask mouseMask = CGEventMaskBit(kCGEventMouseMoved) | CGEventMaskBit(kCGEventLeftMouseDown) |
CGEventMaskBit(kCGEventRightMouseDown);
CGEventMask mask = keyboardMask + mouseMask;// + mouseMask;//CGEventMaskBit(kCGEventKeyDown) | CGEventMaskBit(kCGEventMouseMoved);
// Try to create keyboard-only hook. It will fail if Assistive Devices are not set.
mMachPortRef = CGEventTapCreate(
kCGAnnotatedSessionEventTap,
kCGTailAppendEventTap, // kCGHeadInsertEventTap
kCGEventTapOptionListenOnly,
keyboardMask,
(CGEventTapCallBack)eventTapFunction,
self );
if (!mMachPortRef)
[mLogFile logNeedAssistiveDevice: @"Can't install keyboard hook."];
else
CFRelease(mMachPortRef);
mMachPortRef = CGEventTapCreate(
kCGAnnotatedSessionEventTap,
kCGTailAppendEventTap, // kCGHeadInsertEventTap
kCGEventTapOptionListenOnly,
mask,
(CGEventTapCallBack)eventTapFunction,
self );
if (!mMachPortRef)
{ …
Run Code Online (Sandbox Code Playgroud)