1

FFI パッケージを使用して、nodejs の Windows Api から SendInput 関数を使用したかったのです。

C に関する私の知識は限られているため、どのような問題があるのか​​ を実際に把握することはできません。基本的には、キーボードのキーを仮想的に押しようとしています。

それは私が持っているコードです:

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

var keyboardInput = struct({
    'type': 'int',
    'wVK': 'int',
    'wScan': 'int',
    'dwFlags': 'int',
    'time': 'int',
    'dwExtraInfo': 'int64'
});

var keyboardInputPtr = ref.refType(keyboardInput);
var keyboard = new keyboardInput();
keyboard.type = 1;
keyboard.wVK = 0x41;
keyboard.wScan = 0;
keyboard.dwFlags = 2;
keyboard.time = 0;
keyboard.dwExtraInfo = 0;

var user32 = ffi.Library('user32', {
    'SendInput': [ 'int', [ 'uint', keyboardInputPtr, 'int' ] ]
});

setInterval(function(){
    var r = user32.SendInput(1, keyboard.ref(), 40);
    console.log(r);
}, 500);

コンソールに「1」と記録されますが、それは機能していることを意味するのでしょうか? メモ帳を開いたときにキーが押されないためです。

4

3 に答える 3

0

「1」は、実際のイベントではなく、1 つのイベントが挿入されたことを示します。FFIについてはわかりませんが、keyboardInputには無効な型定義がいくつかあるようです。wVK と wScan は 16 ビット整数でなければなりません (したがって、WORD の 'w')。これらは dwFlags (「int」) と同じように型指定されているため、無効な入力値が発生します。

于 2016-12-27T19:18:47.447 に答える