如何使用Objective C按键盘键?

时间:2014-06-06 03:30:32

标签: objective-c macos

我想允许我的应用程序执行诸如按Enter键或键入单词而不实际触摸键的操作。这可能吗?如何制作一个允许您键入不同应用程序的屏幕键盘?

1 个答案:

答案 0 :(得分:2)

关于“如何创建屏幕键盘”的问题非常广泛,因为有许多有效的方法,而不是单一和规范的方法。因此,除非您能够缩小具体问题,否则您可能无法获得有关此任务的高级详细信息的帮助。

但是,就键盘事件而言,您可以使用Quartz Event Services API来制作键盘事件。具体而言,您正在寻找CGEventCreateKeyboardEventCGEventPost

// CGEvent functions
#import <ApplicationServices/ApplicationServices.h>

// kVK_* values
#import <Carbon/Carbon.h>

// press and release "abcd"
int virtualKeys[] = { kVK_ANSI_A, kVK_ANSI_B, kVK_ANSI_C, kVK_ANSI_D };

for (int i = 0; i < 4; i++)
{
    // press the letter
    CGEventRef event = CGEventCreateKeyboardEvent(NULL, virtualKeys[i], YES);
    CGEventPost(kCGHIDEventTap, event);
    CFRelease(event);

    // wait .1 seconds
    usleep(100000);

    // release the letter
    event = CGEventCreateKeyboardEvent(NULL, virtualKeys[i], NO);
    CGEventPost(kCGHIDEventTap, event);
    CFRelease(event);
}

对于大写字母,您需要在信件前“按”kVK_Shift(并且您还需要将其释放)。