Advertisement
Guest User

Untitled

a guest
Oct 15th, 2019
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.15 KB | None | 0 0
  1. #import <Cocoa/Cocoa.h>
  2. #import <libproc.h>
  3. #import <string.h>
  4. #import <stdlib.h>
  5. #import <stdio.h>
  6.  
  7. bool activate_window_of_id(long wid) {
  8. bool success = false;
  9. const CGWindowLevel kScreensaverWindowLevel = CGWindowLevelForKey(kCGScreenSaverWindowLevelKey);
  10. CFArrayRef windowArray = CGWindowListCopyWindowInfo(kCGWindowListOptionOnScreenOnly | kCGWindowListExcludeDesktopElements, kCGNullWindowID);
  11. CFIndex windowCount = 0;
  12. if ((windowCount = CFArrayGetCount(windowArray))) {
  13. for (CFIndex i = 0; i < windowCount; i++) {
  14. NSDictionary *windowInfoDictionary = (__bridge NSDictionary *)((CFDictionaryRef)CFArrayGetValueAtIndex(windowArray, i));
  15. NSNumber *ownerPID = (NSNumber *)(windowInfoDictionary[(id)kCGWindowOwnerPID]);
  16. NSNumber *level = (NSNumber *)(windowInfoDictionary[(id)kCGWindowLayer]);
  17. if (level.integerValue < kScreensaverWindowLevel) {
  18. NSNumber *windowID = windowInfoDictionary[(id)kCGWindowNumber];
  19. if (wid == windowID.integerValue) {
  20. CFIndex appCount = [[[NSWorkspace sharedWorkspace] runningApplications] count];
  21. for (CFIndex j = 0; j < appCount; j++) {
  22. if (ownerPID.integerValue == [[[[NSWorkspace sharedWorkspace] runningApplications] objectAtIndex:j] processIdentifier]) {
  23. NSRunningApplication *appWithPID = [[[NSWorkspace sharedWorkspace] runningApplications] objectAtIndex:j];
  24. [appWithPID activateWithOptions:NSApplicationActivateAllWindows | NSApplicationActivateIgnoringOtherApps];
  25. char buf[PROC_PIDPATHINFO_MAXSIZE];
  26. proc_pidpath(ownerPID.integerValue, buf, sizeof(buf));
  27. NSString *buffer = [NSString stringWithUTF8String:buf];
  28. long location = [buffer rangeOfString:@".app/Contents/MacOS/" options:NSBackwardsSearch].location;
  29. NSString *path = (location != NSNotFound) ? [buffer substringWithRange:NSMakeRange(0, location)] : buffer;
  30. NSString *app = [@" of application \\\"" stringByAppendingString:[path lastPathComponent]];
  31. NSString *index = [@"set index of window id " stringByAppendingString:[windowID stringValue]];
  32. NSString *execScript = [[index stringByAppendingString:app] stringByAppendingString:@"\\\" to 1"];
  33. char *pointer = NULL;
  34. size_t buffer_size = 0;
  35. NSMutableArray *array = [[NSMutableArray alloc] init];
  36. FILE *file = popen([[[@"osascript -e \"" stringByAppendingString:execScript] stringByAppendingString:@"\""] UTF8String], "r");
  37. while (getline(&pointer, &buffer_size, file) != -1)
  38. [array addObject:[NSString stringWithUTF8String:pointer]];
  39. char *error = (char *)[[array componentsJoinedByString:@""] UTF8String];
  40. if (strlen(error) > 0 && error[strlen(error) - 1] == '\n')
  41. error[strlen(error) - 1] = '\0';
  42. if ([[NSString stringWithUTF8String:error] isEqualToString:@""])
  43. success = true;
  44. [array release];
  45. free(pointer);
  46. pclose(file);
  47. break;
  48. }
  49. }
  50. }
  51. }
  52. }
  53. }
  54.  
  55. CFRelease(windowArray);
  56. return success;
  57. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement