首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GetCursorPos节点FFI -如何通过引用获取指针返回

GetCursorPos节点FFI -如何通过引用获取指针返回
EN

Stack Overflow用户
提问于 2016-11-22 03:09:23
回答 2查看 975关注 0票数 0

我写了下面的代码来设置键盘光标的位置。但是去找垃圾吧。有什么线索,我漏掉了什么?

代码语言:javascript
复制
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  );

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

代码语言:javascript
复制
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 ]**
EN

回答 2

Stack Overflow用户

发布于 2016-12-07 21:11:00

正如文章标题所说的"GetCursorPos in Node FFI“和返回指针x,y

下面的代码对我来说很有效,这是一个获取x,y指针的技巧。

代码语言:javascript
复制
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);
}
票数 3
EN

Stack Overflow用户

发布于 2019-12-13 21:20:59

对我起作用的是:

代码语言:javascript
复制
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);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40727596

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档