2013-04-02 11 views
7

Sono un nodo, ho questo semplice server Node.js funziona su Windowschiamata API di Windows da node.js msg

codice server

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); 

Voglio solo chiamare API di Windows invece di linea

console.log(msg); 

c'è un modo per farlo senza l'utilizzo di librerie esterne

tutte le idee?

risposta

10

Penso che lo node-ffi possa aiutarti a farlo. node-ffi fornisce funzionalità per il caricamento e la chiamata di librerie dinamiche. Con node-ffi è possibile accedere a user32 (ad esempio) lib e chiamare le loro funzioni da 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

grazie ho provato, purtroppo non lavora 'NPM installare nodo-FFI' non funziona per me, quindi ho chiesto se c'è una soluzione senza usare la libreria esterna –

+4

Per quanto ne so, node-ffi richiede l'installazione di python sul tuo sistema. Node.js non ha metodi nativi per chiamare le funzioni winapi. –

+2

L'ho installato ma ci sono errori di configurazione: ERG gyp! configura l'errore ERG gyp! Stack Error: 'gyp' non è riuscito con il codice di uscita: 1 gyp ERR! stack su ChildProcess.onCpExit (C: \ ProgramFiles \ nodejs \ node_modules \ npm \ node_modules \ node-gyp \ lib \ configure.js: 415: 16) e quindi ... –

4

non volevo modificare @ risposta di Vadim perché è accettato, ma penso che il pacchetto è stato rinominato solo 'ffi'. Questo ha funzionato per me:

npm install -s ffi 

E usando @ fonte di Vadim ma cambiando il nome del pacchetto di 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 
); 
Problemi correlati