2016-12-27 12 views
0

Я хотел использовать функцию SendInput из окон Api в nodejs, используя пакет FFI.using SendInput в Node-FFI

Мои знания о 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» в консоли, не следует, что означает, что она работает? Потому что я не нажимаю клавишу, когда открываю блокнот.

+0

'SendInput' помещает ввод в очередь ввода оборудования. Независимо от того, какое окно (или поток, действительно) находится на переднем плане в момент получения этого входного события, получает вход. Поэтому, когда вы запускаете приложение, естественно, Notepad не является передним окном. Во всяком случае, то, что вы описали, является вашим предлагаемым решением. Теперь какая ** проблема ** вы действительно пытаетесь решить? – IInspectable

+0

Никто никогда не притворяется вводным документом в качестве конечной цели. Что вы действительно пытаетесь сделать. Вполне возможно, даже если вы можете подделать его, я запомнил, что ваша настоящая цель не будет решена одинаково. –

+0

@IInspectable Я пытаюсь написать программу, которая нажимает кнопку (на клавиатуре) в текущее активное окно. С интервалом это в основном как автоматический кликер. – alphuite

ответ

0

«1» сообщает вам, что было добавлено 1 событие, а не то, что на самом деле происходит. Я не знаю о FFI, но мне кажется, что у клавиатурыInput есть некоторые недопустимые определения типов. wVK и wScan должны быть 16-битными целыми числами (следовательно, «w» для WORD). Поскольку они набираются так же, как dwFlags («int»), это вызывает недопустимые входные значения.