模拟OS X中的击键进行压力测试?

时间:2012-03-11 16:54:55

标签: macos

我想制作一个简单的程序,将随机击键发送到我的其他应用程序(一个简单的文本编辑器)。目的是通过随机字母或大量准备文本来对其他应用程序进行压力测试。

我需要的是一种将NSString中的字符转换为键码的方法,因此我可以将其传递给操作系统:

CGKeyCode code = [self convertLetter:myOneCharNSString];
CGEventRef e = CGEventCreateKeyboardEvent (NULL, code, true);
CGEventPost(kCGSessionEventTap, e);
CFRelease(e);

任何线索?

2 个答案:

答案 0 :(得分:3)

这样可以解决问题:

-(void) fakeAnUnicharWithString : (NSString*) characters
{
    CGEventSourceRef eventSource = CGEventSourceCreate(kCGEventSourceStateHIDSystemState); 
    CGEventRef keyEventDown = CGEventCreateKeyboardEvent(eventSource, 0, true); 
    UniChar buffer;
    for (int i = 0; i < [characters length]; i++) {
        [characters getCharacters:&buffer range:NSMakeRange(i, 1)];
        keyEventDown = CGEventCreateKeyboardEvent(eventSource, 1, true);
        CGEventKeyboardSetUnicodeString(keyEventDown, 1, &buffer);
        CGEventPost(kCGHIDEventTap, keyEventDown);
        CFRelease(keyEventDown);
    }
    CFRelease(eventSource);
}

答案 1 :(得分:1)

我最终修改了Shortcut Recorder项目的部分内容(http://code.google.com/p/shortcutrecorder/)。这有点棘手,但最终我占了上风。太糟糕了,压力测试没有摆脱我所希望的错误,但至少现在我有了工具供将来参考。