9

我是 Node 的新手,我有这个简单的 Node.js 服务器可以在 Windows 上运行

服务器代码

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

我只想调用 Windows API insted of line

console.log(msg);

有没有办法在不使用外部库的情况下做到这一点

有任何想法吗?

4

3 回答 3

15

我认为node-ffi可以帮助你做到这一点。node-ffi提供加载和调用动态库的功能。通过node-ffi您可以访问user32(例如)lib 并从 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
);
于 2013-04-02T22:07:57.957 回答
8

我不想编辑@Vadim 的答案,因为它已被接受,但我认为该包已重命名为“ ffi ”。这对我有用:

npm install -s ffi

并使用@Vadim 的源,但将包名称更改为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
);
于 2017-10-13T18:58:51.373 回答
1

您还可以使用这个 NPM 包,它已经输入了(大部分)Win32 API(使用 ffi)并准备好从 NodeJS 使用:https ://github.com/waitingsong/node-win32-api

于 2019-07-13T09:56:24.350 回答