2013-04-02 9 views
7

: Ich bin Knoten, ich habe diese einfache Node.js Server funktioniert auf WindowsAnruf Windows-API von node.js msg

Server-Code

var ws = require("websocket-server"); 

var server = ws.createServer(); 

server.addListener("connection", function(client){ 
    console.log("new connection"); 
    client.send("aaaaaa"); 
    client.addListener("message", function(msg){ 
     console.log(msg); 
    }); 
}); 

server.listen(8080); 

Ich möchte nur Fenster rufen API insted

Linie
console.log(msg); 

ist es eine Möglichkeit, dies zu tun, ohne externe Bibliothek mit

irgendwelche Ideen?

Antwort

10

Ich denke, node-ffi kann Ihnen helfen, das zu tun. node-ffi bietet Funktionen zum Laden und Aufrufen dynamischer Bibliotheken. Mit node-ffi können Sie Zugriff auf user32 (zum Beispiel) lib und rufen Sie ihre Funktionen von node.js.

var FFI = require('node-ffi'); 

function TEXT(text){ 
    return new Buffer(text, 'ucs2').toString('binary'); 
} 

var user32 = new FFI.Library('user32', { 
    'MessageBoxW': [ 
     'int32', [ 'int32', 'string', 'string', 'int32' ] 
    ] 
}); 

var OK_or_Cancel = user32.MessageBoxW(
    0, TEXT('I am Node.JS!'), TEXT('Hello, World!'), 1 
); 
+0

dank ich es versucht haben, leider nicht nicht arbeiten ‚npm ​​installieren Knoten-ffi‘ funktioniert nicht für mich, also habe ich gefragt, ob es eine Lösung gibt, ohne externe Bibliothek zu verwenden –

+4

Soweit ich weiß, benötigt node-ffi Python auf Ihrem System installiert werden. Node.js verfügen nicht über systemeigene Methoden zum Aufrufen von winapi-Funktionen. –

+2

Ich habe es installiert, aber es gibt Konfigurationsfehler: gyp ERR! Fehler konfigurieren gyp ERR! Stack Fehler: 'gyp' ist fehlgeschlagen mit Exit code: 1 gyp ERR! stack bei ChildProcess.onCpExit (C: \ Programme \ nodejs \ node_module \ npm \ node_module \ node-gyp \ lib \ configure.js: 415: 16) und so ... –

4

wollte ich nicht @ Vadim Antwort bearbeiten, weil es angenommen wird, aber ich denke, das Paket nur ‚ffi‘ umbenannt wurde. Dieser arbeitete für mich:

npm install -s ffi 

Und mit @ Vadims Quelle, sondern die Änderung der Paketnamen ffi:

var FFI = require('ffi'); 

function TEXT(text){ 
    return new Buffer(text, 'ucs2').toString('binary'); 
} 

var user32 = new FFI.Library('user32', { 
    'MessageBoxW': [ 
     'int32', [ 'int32', 'string', 'string', 'int32' ] 
    ] 
}); 

var OK_or_Cancel = user32.MessageBoxW(
    0, TEXT('I am Node.JS!'), TEXT('Hello, World!'), 1 
);