2013-04-02 11 views
7

Jestem nowy na węźle Mam ten prosty serwer node.js działa na windowspołączeń Windows API z node.js MSG

kod serwera

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

Chcę po prostu zadzwonić Windows API insted linia

console.log(msg); 

jest jakiś sposób, aby to zrobić bez użycia zewnętrznej biblioteki

jakieś pomysły?

Odpowiedz

10

Myślę, że node-ffi może ci w tym pomóc. node-ffi zapewnia funkcjonalność ładowania i wywoływania bibliotek dynamicznych. Z node-ffi możesz uzyskać dostęp do biblioteki user32 (na przykład) i wywoływać ich funkcje z 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

dzięki Próbowałem go, niestety nie działa „npm zainstalować Node-FFI” nie działa dla mnie, więc zapytałem, czy istnieje jakieś rozwiązanie bez korzystania z zewnętrznej biblioteki –

+4

O ile wiem, node-ffi wymaga zainstalowania w systemie python. Node.js nie ma natywnych metod wywoływania funkcji winapi. –

+2

Mam zainstalowany, ale są błędy konfiguracji: gyp ERR! skonfiguruj błąd gyp ERR! stack Błąd: 'gyp' nie powiodło się z kodem wyjścia: 1 gyp ERR! stack na ChildProcess.onCpExit (C: \ ProgramFiles \ nodejs \ node_modules \ npm \ node_modules \ node-gyp \ lib \ configure.js: 415: 16) i tak ... –

4

Nie chciałem edytować odpowiedzi @ Vadima, ponieważ jest ona akceptowana, ale myślę, że nazwa pakietu została zmieniona na "ffi". Ten pracował dla mnie:

npm install -s ffi 

i korzystania @ źródła Vadima ale zmiana nazwy pakietu do 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 
); 
Powiązane problemy