いくつかのタスクを自動化しようとしています (applescript のサポートはありません) ので、CGEvents を使用してこれらのイベントを投稿する必要があります。マウスのクリックは正常に機能しますが、NSKeyDown (入力) は、ドックでアプリをクリックした場合にのみ機能します (これにより、ほとんどのアプリが前面に表示されます)。これまでのコードは次のとおりです。
for (NSDictionary *dict in windowList) {
NSLog(@"%@", dict);
if ([[dict objectForKey:@"kCGWindowName"] isEqualToString:@"Some Window..."]) {
WIDK = [[dict objectForKey:@"kCGWindowNumber"] intValue];
break;
};
}
CGEventRef CGEvent;
NSEvent *customEvent;
customEvent = [NSEvent keyEventWithType:NSKeyDown
location:NSZeroPoint
modifierFlags:0
timestamp:1
windowNumber:WIDK
context:nil
characters:nil
charactersIgnoringModifiers:nil
isARepeat:NO
keyCode:36];
CGEvent = [customEvent CGEvent];
for (int i=0; i <5; i++) {
sleep(3);
CGEventPostToPSN(&psn, CGEvent);
NSLog(@"posted the event");
}
CFRelease(eOne);
ループ内に posteventtopsn がある理由は、テスト目的のためです (一度だけ送信する必要があります)。プログラムがループしている間に、アプリを一番前にアクティブにすると、イベントは正常に機能します。
私は何を間違っていますか?バックグラウンドで動作する方法はありますか?ありがとう。