Atom Electron capture all keyboard events even when app is unfocused
Asked Answered
A

3

14

I would like to know if there is a way to make an application with Atom Electron that runs and gets my keyboard events when the user is/isn't focused on my app.

For example if he is on Chrome and writes something, my app will store all the keys that he pressed. I searched a little but didn't find something that solves my problem.

Atelectasis answered 8/9, 2016 at 13:15 Comment(2)
Sounds like you're trying to do something badKellikellia
There are valid uses for this for listening to all keys, like a clipboard utility. That doesn't sound like the case here though.Drove
T
12

The closest thing there is to what you're looking for is global shortcuts: https://github.com/electron/electron/blob/master/docs/api/global-shortcut.md. While you don't have anything in core Electron to support capturing all keyboard events out of the box, luckily node.js is pretty extensible with native node addons.

Tug answered 8/9, 2016 at 16:6 Comment(1)
Global shortcuts do not seem to be quite what he wants. When you capture a global shortcut, that combo is taken out of the pipeline and not passed to apps. I think he's looking for a way to monitor keystrokes.Roofdeck
N
10

For global shortcuts you can use Electron Keyboard-Shortcuts module

const {app, globalShortcut} = require('electron')

app.on('ready', () => {
  globalShortcut.register('CommandOrControl+X', () => {
    console.log('CommandOrControl+X is pressed')
  })
})

But this module support only shortcuts.
If you need any key listening/hooking you should use another module like iohook

const ioHook = require('iohook');

ioHook.on("keyup", event => {
   console.log(event); // {keychar: 'f', keycode: 19, rawcode: 15, type: 'keup'}
});

ioHook.start();
Nashom answered 3/1, 2018 at 14:29 Comment(0)
V
0

According to the doc using globalShortcut will apply keyboard short to everywhere even though our window is no in the focused state. But if you only want to listen key events within your application window. Then you can use the normal keyup, keydown events. But it is a little longer way because to communicate those events from render to main process we have to setup preload script.

You will get idea about listening events from render to main process inside this post.

Vltava answered 5/12, 2022 at 13:40 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.