0

我编写了以下代码来设置键盘光标位置。但是捡垃圾。任何线索,我错过了什么?

var ffi = require('ffi');
var ref = require('ref');
var Struct = require('ref-struct');

var point = Struct({
    'x': 'long',
    'y': 'long'
  });
  var user32 = ffi.Library('user32.dll', {
      GetCaretPos:['bool',[locPtr]]
  });
var pbuf = new point();
  caretpos = user32.GetCaretPos(pbuf);

  console.log(":",pbuf.x  );

接下来,我尝试了以下方法,但效果不佳。

var ffi = require('ffi');
var ref = require('ref');
var Struct = require('ref-struct');

 var voidPtr = ref.refType(ref.types.void);
  var user32 = ffi.Library('user32.dll', {
      GetCaretPos:['bool',[voidPtr]]
  });
var pbuf = new Buffer(2);
  caretpos = user32.GetCaretPos(pbuf);
 var cpos =(new Uint8Array(pbuf));
  console.log(">",cpos  ); //Doesn't work **> Uint8Array [ 0, 0, 0, 0 ]**
4

2 回答 2

3

正如文章标题所述“节点 FFI 中的 GetCursorPos”并返回指针 x,y

下面的代码对我有用,它是获取 x,y 指针的技巧。

var ffi = require('ffi');
var repbuffer = new Buffer(16); // holder for windows structures
var user32 = ffi.Library('user32.dll', {
    'GetCursorPos':['bool',['pointer']]
});
//Show mouse cords at console every sec
setInterval( function() { getmousepos();}, 1000);
function getmousepos(){
    var p = user32.GetCursorPos(repbuffer);
    var x= repbuffer[0]+ (repbuffer[1]*256); 
    var y= repbuffer[4]+(repbuffer[5]*256);  
    console.log(x + " " + y);
}
于 2016-12-07T13:11:00.120 回答
1

什么对我有用:

var PointStruct = Struct({
    x: ffi.types.long,
    y: ffi.types.long,
});

var user32 = ffi.Library("user32", {
    GetCursorPos: ["bool", [ref.refType(PointStruct)]],
    SetCursorPos: ["long", ["long", "long"]],
});

export function GetMousePos() {
    let mousePosBuffer = ref.alloc(PointStruct);
    let success = user32.GetCursorPos(mousePosBuffer);
    let mousePos = mousePosBuffer["deref"]() as {x: number, y: number};
    return new Vector2i(mousePos.x, mousePos.y);
}

export function SetMousePos(x: number, y: number) {
    user32.SetCursorPos(x, y);
}
于 2019-12-13T13:20:59.053 回答