我有一个 RFID 阅读器,它会在扫描卡时发送一系列击键。我正在使用 iohook
监听按键并在按键序列被按下时执行一些操作。
确切的顺序是这样的
2
1
5
9
4
5
8
1
0
5
5
enter
问题是我不知道如何检查这个序列。 在此序列之前和之后还有其他按键被按下。 我尝试将每个按键都添加到一个数组中,但后来我的数组变得非常大,我不知道在什么时候应该清除我的数组。
到目前为止,这是我的代码
const ioHook = require('iohook')
let keys_pressed = []
ioHook.on("keydown", event => {
keys_pressed.push(event)
console.log(keys_pressed)
})
ioHook.start()
最佳答案
假设您想在输入后立即检测正确的序列,您可以使用 keys_pressed
数组始终具有相同的长度(这是您正在寻找的序列的长度) - 您不需要在内存中保留更多的元素。每次击键,删除最旧的元素并添加最新的元素,并查看最后按下的顺序是否与您要查找的顺序相同
const ioHook = require('iohook')
const predefinedSequence = ['2', '1', '5', '9', '4', '5', '8', '1', '0', '5', '5', 'enter']
const compareSequences = (seq1, seq2) => {
if (seq1.length !== seq2.length) return false
for (let i = 0; i < seq1.length; i++) {
if (seq1[i] !== seq2[i]) return false
}
return true
}
// create keys_pressed array of the same length as predefinedSequence
const keys_pressed = new Array(predefinedSequence.length)
ioHook.on("keydown", event => {
keys_pressed.shift() // remove the oldest item from the start of the array
keys_pressed.push(event) // push the newest item to the end
if (compareSequences(predefinedSequence, keys_pressed)) {
console.log('sequence detected')
}
})
ioHook.start()
关于javascript - 如何检测 Node.js 中的键序列以执行某些操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59824487/