how to get windowid from applescript

前端 未结 2 1993
闹比i
闹比i 2020-12-18 15:59

I am trying to get window id of of every window.

set r to {}
tell application \"System Events\"
    repeat with t in windows of processes
        set sid to          


        
相关标签:
2条回答
  • 2020-12-18 16:28

    I wrote a little Objective-C program for you that gets the window owners, window names and window ids:

    ////////////////////////////////////////////////////////////////////////////////
    // windowlist.m
    // Mark Setchell
    //
    // Get list of windows with their WindowOwnerNames, WindowNames and WindowNumbers
    //
    // Compile with:
    // clang windowlist.m -o windowlist -framework coregraphics -framework cocoa
    //
    // Run with:
    // ./windowlist
    //
    // You can then run "screencapture" to capture that window:
    //
    // screencapture -l<windowid> -x someFile.[png|jpg|tif]
    ////////////////////////////////////////////////////////////////////////////////
    #include <Cocoa/Cocoa.h>
    #include <CoreGraphics/CGWindow.h>
    
    int main(int argc, char **argv)
    {
       NSArray *windows = (NSArray *)CGWindowListCopyWindowInfo(kCGWindowListExcludeDesktopElements|kCGWindowListOptionOnScreenOnly,kCGNullWindowID);
       for(NSDictionary *window in windows){
          int WindowNum = [[window objectForKey:(NSString *)kCGWindowNumber] intValue];
          NSString* OwnerName = [window objectForKey:(NSString *)kCGWindowOwnerName];
          NSString* WindowName= [window objectForKey:(NSString *)kCGWindowName];
          printf("%s:%s:%d\n",[OwnerName UTF8String],[WindowName UTF8String],WindowNum);
       }
    }
    

    Output

    ./windowlist
    
    Preview:(null):300
    Safari:(null):48
    Terminal:(null):231
    VirtualBox:(null):212
    Mail:(null):150
    Dropbox:(null):181
    Finder:(null):118
    Notification Center:(null):83
    Google Drive:(null):73
    Copy:(null):68
    InkServer:(null):49
    iTerm:(null):44
    Google Drive::69
    Copy::66
    Dropbox::63
    Creative Cloud::57
    Spotlight::41
    SystemUIServer::33
    SystemUIServer:(null):36
    SystemUIServer::31
    Window Server:Menubar:3
    Dock:Dock:23
    iTerm:2. bash:190
    iTerm:1. bash:336
    
    0 讨论(0)
  • 2020-12-18 16:43

    This is not possible with this code.

    In the processes array of System Events the property id of a window is not required to be available in AppleScript, that's the reason why you get the error.

    If an application has an AppleScript dictionary and the windows element is provided then all windows have an id property, but not all applications support AppleScript and the non-document based applications don't provide the windows element by default.

    0 讨论(0)
提交回复
热议问题