//kbCode = keyboard code
//F5=96
//F7=98
//F6=97
//F9=101
-(void)pressKeyboard:(CGKeyCode)kbCode toApp:(NSArray *)appNameArr close:(BOOL *)isClose
{
CFArrayRef windowList =CGWindowListCopyWindowInfo(kCGWindowListOptionOnScreenOnly |kCGWindowListExcludeDesktopElements,kCGNullWindowID);
BOOL hasFound=NO;
for(NSMutableDictionary *entry in (__bridgeNSArray *)windowList)
{
NSString *ownerName = [[entry objectForKey:(id)kCGWindowOwnerName]uppercaseString];
NSInteger ownerPID = [[entry objectForKey:(id)kCGWindowOwnerPID]integerValue];
NSString *name = [entryobjectForKey:(id)kCGWindowName];
for (NSString *appKw in appNameArr) {
if ([ownerName rangeOfString:appKw].length>0) {//检查是否要找的window or app
ProcessSerialNumber myPSN = {kNoProcess,kNoProcess};
GetProcessForPID(ownerPID, &myPSN);
SetFrontProcessWithOptions(&myPSN,kSetFrontProcessFrontWindowOnly);
[NSThread sleepForTimeInterval:0.2];
CGEventRef enterKeyUP =CGEventCreateKeyboardEvent(NULL, (CGKeyCode)kbCode,true);
//CGEventSetFlags(event,kCGEventFlagMaskAlternate | kCGEventFlagMaskControl);
CGEventPostToPSN(&myPSN, enterKeyUP);//先确保按键没有按下
CFRelease(enterKeyUP);
CGEventRef enterKeyDOWN =CGEventCreateKeyboardEvent(NULL, (CGKeyCode)kbCode,false);
//CGEventSetFlags(event,kCGEventFlagMaskAlternate | kCGEventFlagMaskControl);
CGEventPostToPSN(&myPSN, enterKeyDOWN);//按键按下
CFRelease(enterKeyDOWN);
NSLog(@"press key %@",kbCode==96?@"F5":(kbCode==97?@"F6":(kbCode==98?@"F7":(kbCode==101?@"F9":@"Err"))));
*isClose = YES;
hasFound=YES;
break;
}
}
if (hasFound) {
break;
}
}
CFRelease(windowList);
if (!hasFound) {
NSLog(@"no window match %@",appNameArr);
}
}