Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C++ (Qt) cross-platform library for simulating keyboard input, sendkeys, send kestrokes, etc [closed]

Does anybody know true cross-platform C++ library for simulating keyboard input?

I'd make a google plus stackoverflow research, but didn't found neither Qt-based, nor generic C++ library for Windows, Linux/X11 and Mac OS X.

Only some code snippens are avaliable like these:

Windows:

  • There are tons of examples how to make this via keybd_event function.

Linux:

  • http://www.doctort.org/adam/nerd-notes/x11-fake-keypress-event.html (Simple X11 example)
  • http://homepage3.nifty.com/tsato/xvkbd/

Mac OS X

  • Add library to Qt project - Use CGEvent with Qt on Mac Os X
  • Should use CGEventCreateKeyboardEvent instead of CGPostKeyboardEvent because the latter is deprecated - How to simulate a low level keypress on os x?
  • Turning a character (probably an NSString) into a keycode - Simulating key press events in Mac OS X

So, the question is did I missed something? Is this world have a cross-platform C++ library for simulating keyboard input?

P.S.: when i wrote this question, site suggests in "Similar Questions" block a cool idea - to research in free game engines. Indeed, there are many cross-platform open source game engines, that have keyboard input modules. So, even they doesn't have a keyboard emulation, they have a good starting point for develop such library.

UPDATE 1: it's not quiet fun, that FreePascal/Lazarus already have such library. It is nice to see that library architecture: http://wiki.lazarus.freepascal.org/MouseAndKeyInput

like image 567
Maxim Korobov Avatar asked Oct 24 '22 08:10

Maxim Korobov


1 Answers

You could achieve this with Qt, but not in a true platform independant manner. With Qt you have two ways:

  1. Use the Qt methods keyClick(), keyPress(), ... methods to simulate the coresponding events. But note, that this only works for the own program, not for other processes.
  2. Use the events winEvent(), x11Event() and macEvent() and fire the platform specific messages. These messages are not reflected by Qt and must be surrounded with #ifdef ... #endif to make the source compileable on all platforms.
like image 111
Alexander Nassian Avatar answered Oct 31 '22 13:10

Alexander Nassian