GetCursorPos Node FFI - Как получить указатель возврата по ref

Я написал следующий код для установки положения курсора клавиатуры. Но получите мусор. Любая подсказка, что мне не хватает?

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 ]**

1 ответ

В заголовке статьи указывается "GetCursorPos в узле FFI" и указатель возврата 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);
}

Что сработало для меня:

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);
}
Другие вопросы по тегам