我试图自动化一些任务(没有applescript支持),所以我必须使用CGEvents并发布这些事件。鼠标选择工作正常,但如果我点击在Dock中的应用程序(这使得它最前端的应用程序)NSKeyDown(输入)只能... 这里是我到目前为止的代码:只有当应用程序最前面时,CGEvent 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是为了测试目的(我只是需要它发送一次)。当程序在循环中时,如果我将应用程序激活到最前面,则该事件正常工作。
我在做什么错?如果它在后台可以工作吗?谢谢。
你的意思是说你想在后台使用你的应用程序,或者你想在后台发送事件给应用程序? – 2011-05-18 17:35:23
此代码(包含循环和“睡眠”)与您尝试发送事件的应用程序相同吗? – 2011-05-18 17:45:11
嗨,谢谢你的回复。 @Josh - 不,它不在同一个应用上运行。 @Nathan - 我想在后台发送事件到应用程序。鼠标点击工作正常,但nskeydown只适用于我使它最前端的应用程序。 – user635064 2011-05-18 17:48:53