Вот как это происходит:
int64_t processIdTarget = CGEventGetIntegerValueField(event, kCGEventTargetUnixProcessID);
int64_t processIdSource = CGEventGetIntegerValueField(event, kCGEventSourceUnixProcessID);
processIdSource
показывает отправителя приложения, а processIdTarget
означает получателя.
Например, вы можете открыть виртуальную клавиатуру и отправлять с нее события. Поскольку виртуальная клавиатура является процессом в пользовательском пространстве, вы получите ее pid как processIdSource
. Но в большинстве случаев вы получите 0
как processIdSource
.
После того как вы получили pid приложения, вы можете создать экземпляр NSRunningApplication
и получить от него кучу информации.