如何使用Node.js获取在Mac前台运行的应用程序窗口的坐标

How do I get the coordinates of an application window running in foreground on Mac using Node.js?

本文关键字:运行 应用程序 窗口 坐标 前台 Mac Node 何使用 js 获取      更新时间:2023-09-26

我正在编写一个node.js脚本,该脚本将在Mac计算机上运行。我想得到在前台运行的应用程序的坐标和进程的详细信息。

例如,如果我运行脚本,并且我打开的唯一程序是Google Chrome,那么我应该得到一个包含1个对象的数组:

  • Google Chrome的进程ID
  • Google Chrome窗口的x/y坐标

到目前为止,我所能做的就是得到正在运行的进程的列表:

  • ps节点:进程查找实用程序

如果有帮助的话,我还将使用nw.js框架来运行我的应用程序。

您可以使用NodObjC-Node.js⇆Objective-C桥接:

var $ = require('nodobjc')
$.framework('Foundation');
$.framework('Cocoa');
var pool = $.NSAutoreleasePool('alloc')('init');
var result = $.CGWindowListCopyWindowInfo($.kCGWindowListExcludeDesktopElements |
                                          $.kCGWindowListOptionOnScreenOnly,
                                          $.kCGNullWindowID);
var windowList = $.CFBridgingRelease(result);
var error = $.alloc($.NSError).ref();
var jsonData = $.NSJSONSerialization('dataWithJSONObject', 
                                     windowList, 
                                     'options',
                                     $.NSJSONWritingPrettyPrinted,
                                     'error', 
                                     error);
var jsonString = $.NSString('alloc')('initWithData', 
                                     jsonData, 
                                     'encoding',                                          
                                     $.NSUTF8StringEncoding);
var parsed = JSON.parse(jsonString);
console.log(parsed);
pool('drain');