- (void)screenShot
{
CFArrayRef windowListArray = CGWindowListCreate(kCGWindowListOptionOnScreenOnly, kCGNullWindowID);
NSArray *windows = CFBridgingRelease(CGWindowListCreateDescriptionFromArray(windowListArray));
// NSLog(@"All on screen windows: %@", windows);
// Find window ID of "iTunes" window
// NSNumber *WindowNumber_ndowNumber = nil;
for (NSDictionary *window in windows)
{
if ([(NSString *)window[(__bridge NSString *)kCGWindowName] isEqualToString:@"iTunes"]) {
[self pressKeyboard:96 toApp:@"iTunes" close:NO];
NSNumber *iTunesWindowNumber = window[(__bridge NSString *)kCGWindowNumber];
NSDictionary *winInfoDic =[[NSDictionary alloc] initWithDictionary:window];
NSLog(@"dockWindowNumber: %@", iTunesWindowNumber);
CFRelease(windowListArray);
CGRect bounds;
CGRectMakeWithDictionaryRepresentation((__bridge CFDictionaryRef)[winInfoDic objectForKey:(id)kCGWindowBounds], &bounds);
CGImageRef image=CGWindowListCreateImage(bounds, kCGWindowListOptionOnScreenOnly,(unsigned int)iTunesWindowNumber, kCGWindowImageDefault);
NSImage *img=[[NSImage alloc]initWithCGImage:image size:NSZeroSize];
self.imasas.image = img;
break;
}
}
}
- (void)pressKeyboard:(CGKeyCode)kbCode toApp:(NSString *)appNameArr close:(BOOL)isClose
{
CFArrayRef windowList =CGWindowListCopyWindowInfo(kCGWindowListOptionOnScreenOnly |kCGWindowListExcludeDesktopElements,kCGNullWindowID);
BOOL hasFound = NO;
for(NSMutableDictionary *entry in (__bridge NSArray *)windowList) {
NSString *ownerName = [[entry objectForKey:(id)kCGWindowOwnerName]uppercaseString];
int ownerPID = [[entry objectForKey:(id)kCGWindowOwnerPID] intValue];
NSString *name = [entry objectForKey:(id)kCGWindowName];
if ([name isEqualToString:appNameArr]) {//检查是否要找的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);
}
}