我成功获得了一个拦截键盘事件的演示应用。这是他们的处理程序。
CGEventRef keyUpCallback (CGEventTapProxy proxy, CGEventType type, CGEventRef event, void *refcon) {
NSLog(@"KeyUp event tapped!");
return;
}
我想根据发送事件的应用程序做不同的事情。我怎么知道它是哪个应用程序?
答案 0 :(得分:2)
接收击键的应用程序可能是活动应用程序,因此您可以根据活动的应用程序以不同方式处理事件。您可以使用NSWorkspace中的activeapplication
方法获取活动应用程序的名称。
另请参阅this thread有关获取活动应用程序的信息。
答案 1 :(得分:1)
这是怎么回事:
int64_t processIdTarget = CGEventGetIntegerValueField(event, kCGEventTargetUnixProcessID);
int64_t processIdSource = CGEventGetIntegerValueField(event, kCGEventSourceUnixProcessID);
processIdSource
显示应用程序发件人,processIdTarget
代表接收者。
例如,您可以打开虚拟键盘并使用它发送事件。由于虚拟键盘在用户空间中处理,因此您将获得它作为processIdSource
的pid。但是对于大多数情况,您将获得0
processIdSource
。
获得应用程序的pid后,您可以创建NSRunningApplication
实例并从中获取大量信息。
答案 2 :(得分:0)
显示发送事件的应用程序的进程ID:
NSLog(@"Target PID:%lld",CGEventGetIntegerValueField(event, kCGEventTargetUnixProcessID));