【问题标题】:GetCursorPos Node FFI - How to get pointer return by refGetCursorPos 节点 FFI - 如何通过 ref 获取指针返回
【发布时间】:2017-04-05 06:52:27
【问题描述】:

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

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

【问题讨论】:

    标签: node.js win32gui node-ffi


    【解决方案1】:

    正如文章标题所说“GetCursorPos in Node 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);
    }
    

    【讨论】:

    • 插入符号位置与光标不同。
    【解决方案2】:

    什么对我有用:

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

    【讨论】:

      猜你喜欢
      • 2018-09-20
      • 2021-11-30
      • 2021-10-25
      • 2021-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-13
      相关资源
      最近更新 更多