2016-12-27 12 views
0

FFIパッケージを使用して、nodejsのウィンドウApiからSendInput関数を使用したかったのです。Node-FFIでSendInputを使用

私のCの知識は限られているので、私は何の問題があるのか​​分かりません。 私は基本的にキーボードのキーを押しています。

私が持っているコードです:それはコンソールの「1」は、それはそれが動作するわけではないはずです、私を記録します

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

?メモ帳を開くとキーが押されないからです。

+0

'SendInput'は入力をハードウェア入力キューに入れます。この入力イベントが取得された時点で、フォアグラウンドにあるウィンドウ(またはスレッド)が入力を受け取ります。したがって、アプリケーションを起動すると、自然にメモ帳がフォアグラウンドウィンドウではありません。とにかく、あなたが説明したことがあなたの提案された解決策です。今あなたが解決しようとしている**問題**は何ですか? – IInspectable

+0

最終目標としてメモ帳への入力を偽装したことはありません。あなたは本当に何をしようとしていますか?あなたがそれを偽造することができたとしても、私はメモ帳にあなたの真の目標は同じように解決されません。 –

+0

@IInspectable私は現在のアクティブなウィンドウにボタン(キーボード上)をクリックするプログラムを書こうとしています。間隔は、基本的にオートクリッカーのようなものです。 – alphuite

答えて

0

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

関連する問題