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

时间:2016-07-31 15:51:50

标签: javascript node.js macos electron nw.js

我正在编写一个将在Mac计算机上运行的node.js脚本。我想让应用程序的坐标在前台运行并处理细节。

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

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

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

  • ps-node:进程查找实用程序

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

1 个答案:

答案 0 :(得分:3)

您可以使用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');