1

我希望能够使用 Node-ffi 来获取 Windows 操作系统中所有当前打开的窗口/程序的列表,大概是来自 User32.dll 的 EnumWindows 或类似的东西。我希望能够从 User32 中的“FindWindowW”中获得一个句柄,以及一个进程名称的字符串,所以我知道它是哪个。

感谢某种善良的灵魂,我已经让“FindWindowW”工作并且知道关于 EnumWindows 的这个问题,但我就是无法让该解决方案正常工作,总是进入Uncaught ReferenceError: libm is not definednode_modules\ffi\lib_foreign_function.js:59

谢谢,非常感谢您的帮助。

4

1 回答 1

3

好吧,最终我用 EnumWindows 解决了这个问题,如下所示:

var ref = require('ref');
var ffi = require('ffi');

var voidPtr = ref.refType(ref.types.void);
var stringPtr = ref.refType(ref.types.CString);

var user32 = ffi.Library('user32.dll', {
    EnumWindows: ['bool', [voidPtr, 'int32']],
    GetWindowTextA : ['long', ['long', stringPtr, 'long']]
});

windowProc = ffi.Callback('bool', ['long', 'int32'], function(hwnd, lParam) {
  var buf, name, ret;
  buf = new Buffer(255);
  ret = user32.GetWindowTextA(hwnd, buf, 255);
  name = ref.readCString(buf, 0);
  console.log(name);
  return true;
});

user32.EnumWindows(windowProc, 0);
于 2016-06-10T02:07:08.630 回答