Download (source + binary):
https://github.com/kurta999/CustomKeyboard
This is a personal project for myself to improve my daily computer usage, particularly with programming and testing. I've implemented things what I really needed to be more productive and accomplish things faster. It's open source, because why not, maybe somebody will benefit from it one day.
Features
- CustomMacro - Connect a second keyboard and binding macros to it's keys - full GUI support for macro editing (WIP recording mode)
- Backend for Corsair's G Keys - Bind macros to G keys as those were on second keyboard, without even installing iCUE
- CAN-USB Transreceiver - Send and Receive CAN Frames to/from CAN bus via computer trough USB - see more info below
- Command excutor - Bind specific commands (cmds) to GUI buttons, which is then excuted on GUI button click - see more info below
- StructParser - Generate offsets of C structures
- ScreenshotSaver - Saving screenshot to .png from clipboard
- DirectoryBackup - Backup folders to another place(s) from tray menu
- CPU Power Saver - Saves power by reducing CPU frequency after X idle time to Y percent. For example I can save 10-15W hourly by reducing my overclocked i7 10700K to 800 - 1200Mhz while my PC is in idle. If the median CPU usage gets above max configured percent due to some background tasks, the frequency will be restored and won't be limited again until it falls below configured minimum median load again.
- LinkCreator - Easy symlink & hardlink creator within Windows' file explorer
- Sensors - Backend for sensors with SQLite database for measurements & graphs generation to .html file
- wxWidget's GUI editor - A very basic GUI editor with move & resize support
- Filesystem browser - List files and directories recursively by size starting from specific path - useful for finding bloat on storage
- AntiLock - Bypass idle timeout for Windows to avoid lock screen by pressing SCROLL LOCK & moving mouse in given interval
- AntiNumLock - Doesn't allow to disable NumLock, re-enables it immendiately when it's disabled.
- TerminalHotkey - Hotkey for terminal, like in Linux. Can be started from Windows Explorer and from Desktop
- File explorer opener - Open file explorer by sending a specific TCP packet to this application
- CustomMacro - Currently requires an external Nucleo L495ZG board with UART-TTL to USB adapter for transmitting keypresses to PC. The nucleo is just a simple USB Host, which receives key-presses from the connected keyboard and transmits it to PC via UART. It could be done with hooking in windows, but this solution always crashed the debugger in MSVC, so I went with the more expensive way. Macros can be added in configuration page or in settings.ini file directly. Firmware for Nucle board is available here: https://github.com/kurta999/UsbHost
- Backend for Corsair's G Keys - Corsair pretty well fucked up it's iCUE, sometimes memory usage can grow to 500MB. That's enormeous for an application which runs in background and executes macro for binded keys. It's possible to use CustomMacro feature to bind everything to Corsair's G keys (beside second keyboard, of coruse). This is a simple HID API which receives keypresses for G keys. Supports K95 RGB (18 G keys, older one) and K95 RGB Platinum.
- CAN-USB Transreceiver - Requires LAWICEL CAN USB or NUCLEO-G474RE board with UART-TTL to USB adapter & Waveshare SN65HVD230 3.3v CAN Transreceiver or something else which converts TTL signals to real CAN signal. Supports standard, extended, ISO-TP (ISO 15765-2) CAN frames, logging and searching between them. Bits and bytes for CAN frame also can be binded to be able to manipulate them easyer with GUI. Firmware for nucleo board is available here: https://github.com/kurta999/CANUSB
- Command excutor - Binding commands to GUI buttons possible in Cmds.xml or in the "CMD Executor" panel. That command will be executed on Windows with CreateProcess if you click on it's button, see the image below. This is very usful feature if you work often with command line, you don't have to copy paste every comand or type it's alias. Currently one variable parameter can be added to each command, you can change that before execution by clicking with MIDDLE mouse to the command button instead of the LEFT.
- StructParser - Paste the structure to input dialog and click on prarse. The application automatically calculates offsets for it's members. It's useful if you work with communication and had to calculate the offset of members in bytes manually. Supports embedded structures, struct alignment (fixed alignment supported, pragma pack implementation isn't finished yet), preprocessor definitions & unions.
- ScreenshotSaver - Press screenshot save key (F12 by default, on second keyboard) and screenshot from the clipboard will be saved to (app path)/Screenshots folder by default as .png file. Can be changed in configuration.
- DirectoryBackup - Setup backups in configuration or in settings.ini manually and those will appear in tray menu of this application. Click on them, and backing up files will start. Supports ignore list & SHA-256 checksum for backed up files for more secure backups.
- LinkCreator - Select desired files from File Explorer and click the mark key (key down on second keyboard by default) and files (directories too) will be marked for link creation. Go to target directory where you want to place the links for marked files, press symlink key (KEY UP) by default for symlink or hardlink key (KEY RIGHT) by default for hardlinks. That's all, symlink or hardlink is created from marked files in target directory.
- Sensors - Backend means simple TCP server with boost asio where sensor conencts and sends measurements. Each measurement is inserted to a local SQLite database and a graph generated with last 30 measurements, last day & last week average data by default, this can be changed in settings.ini. Database is updated in every 10 minutes, but you can update manually by clicking on "Generate graphs" in front panel.
- wxWidget's GUI editor - Oversimplified GUI editor which sometimes can be useful beside wxFormBuilder. GUI items are movable & resizable - directly without sizers. C++ code generation also implemented, current workspace can be saved & loaded to/from XML file. This part of the project is deprecated, use it only when you know what you're doing. Otherwise stick to sizers.
- File explorer opener - This function can be useful if you work with VirtualBox or WSL and using samba for accessing specific parts on guest OS filesystem. First you have to map the network drive in Windows, default drive character is Z: (can be changed in settings.ini - "SharedDriveLetter"), also don't forget to enable TCP_Backend in settings.ini. Here is an example command for opening the file explorer on Windows: "echo expw$(pwd) | netcat <TCP_Backend port from settings.ini>". For the best experience, I recommend creating an alias for this command.
MainPage
Sensors
CAN-USB Transreceiver with Bitfield mapping
C Structure parser
Command executor
Macro editor
Main Page under Linux