2016-07-31 1 views
2

J'écris un script node.js qui fonctionnera sur un ordinateur Mac. J'aimerais obtenir les coordonnées de l'application en cours d'exécution au premier plan et traiter les détails.Comment obtenir les coordonnées d'une fenêtre d'application s'exécutant en premier plan sur Mac à l'aide de Node.js?

Par exemple, si je lance le script et le seul programme que j'ai ouvert est Google Chrome alors je devrais obtenir un tableau avec 1 objet contenant:

  • processus Google Chrome ID
  • x/y coordonnées de la fenêtre Google Chrome.

Jusqu'à présent, tout ce que j'ai pu faire est d'obtenir la liste des processus en cours d'exécution:

  • ps-node: Un utilitaire de recherche de processus

Si elle aide, je vais aussi utiliserai le cadre nw.js pour exécuter mon application.

Répondre

2

Vous pouvez utiliser NodObjC - le Node.js ⇆ pont 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'); 
+0

Whoa, c'est cool. N'a pas pensé à ça. Laissez-moi essayer cela et rendre compte. Sorte de question connexe: si je voulais maintenant étendre cette fonctionnalité à Windows 7+, comment ferais-je cela? 'NodObjC' ne fonctionne probablement pas sous Windows. –

+1

Sous Windows, essayez d'appeler 'FindWindow' à partir de' user.dll' - https://github.com/node-ffi/node-ffi –