{"id":24674060,"url":"https://github.com/dero/hideous","last_synced_at":"2026-04-07T14:02:28.675Z","repository":{"id":273933924,"uuid":"917586471","full_name":"dero/HIDeous","owner":"dero","description":"Map each keyboard separately in Windows","archived":false,"fork":false,"pushed_at":"2025-12-26T22:13:52.000Z","size":305,"stargazers_count":25,"open_issues_count":4,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-12-28T16:24:22.931Z","etag":null,"topics":["keyboard","macros","windows"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dero.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2025-01-16T09:16:32.000Z","updated_at":"2025-12-26T22:12:32.000Z","dependencies_parsed_at":"2025-01-23T21:18:49.312Z","dependency_job_id":"706c5a02-a406-4f85-8d08-d38c1a495026","html_url":"https://github.com/dero/HIDeous","commit_stats":null,"previous_names":["dero/hideous"],"tags_count":16,"template":false,"template_full_name":null,"purl":"pkg:github/dero/HIDeous","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dero%2FHIDeous","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dero%2FHIDeous/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dero%2FHIDeous/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dero%2FHIDeous/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dero","download_url":"https://codeload.github.com/dero/HIDeous/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dero%2FHIDeous/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31515152,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-07T03:10:19.677Z","status":"ssl_error","status_checked_at":"2026-04-07T03:10:13.982Z","response_time":105,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["keyboard","macros","windows"],"created_at":"2025-01-26T11:14:53.003Z","updated_at":"2026-04-07T14:02:28.648Z","avatar_url":"https://github.com/dero.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# HIDeous: Turn every keyboard into a macro pad\n\nHID = [Human Interface Device](https://en.wikipedia.org/wiki/USB_human_interface_device_class)\n\nFree Windows app that allows the keyboard lying in your drawer to be useful again.\n\n- [Features](#features)\n- [UI](#ui)\n- [Usage](#usage)\n- [Settings](#settings)\n- [Profiles](#profiles)\n- [Key names](#key-names)\n- [Similar Tools](#similar-tools)\n- [Troubleshooting \u0026 Support](#troubleshooting--support)\n- [Disclaimer](#disclaimer)\n- [License](#license)\n\n## Features\n\n- **Key -\u003e Combo**: Press a single key to send a combo like `Ctrl+C`.\n- **Key -\u003e Text**: Press a single key to send a text like `¯\\_(ツ)_/¯`. Supports control keys like `{ENTER}`!\n- **Key -\u003e Run**: Press a single key to run a command like `explorer.exe C:\\Some\\Path`.\n- **Profiles**: Switch between different sets of key bindings easily.\n- **Any USB keyboard**: No matter how old or cheap.\n- **Unicode support**: Emoji, math symbols, katakana? No problem.\n- **No drivers required**: Just run the `.exe`.\n- **Portable**: No installation required.\n- **Minimal UI**: Just the essentials.\n- **Configuration in `.ini`**: Simple format, set and forget.\n\n(Granted, the last two features can be viewed as _lack of features_ by the \"glass half empty\" folks, but I like to think of them as _simplicity_.)\n\n## UI\n\n![UI](./gui.png)\n\n## Usage\n\n0. Plug in a second (third, fourth, etc.) keyboard.\n1. Download the latest release from [Releases](https://github.com/dero/HIDeous/releases) and extract it.\n2. Run `HIDeous.exe`.\n3. Press a key, a key code will appear in one of the rows.\n4. Note down the \"Device Hash\" of that keyboard.\n5. Edit `settings.ini` in the application directory.\n6. Done! 🎉 Changes are applied automatically.\n\n## Settings\n\nAll settings are stored in `settings.ini` in the same directory as the app.\n\nThis is my actual `settings.ini` that I use at home, I just added comments to explain each section.\n\n```ini\n; ❌ Don't touch Global settings, unless something is broken.\n[Global]\n; When `1`, it will create `debug.log` in this directory with debug info.\n; ⚠ Can be a lot of data, keep this disabled when not needed.\nDebug=0\n\n; How long to give the app to register a key, in milliseconds.\n; If the app keeps missing keys, try increasing this.\nKeyWaitTime=30\n\n\n; ✅ Edit this section to name your keyboards.\n; Left side = Any name you want to give your keyboard.\n; Right side = Its Device Hash, find it in the UI.\n[Devices]\nMain_Keyboard=9CC297\nNumPad=1A5553\n\n; ✅ Edit this section to set bindings for a specific keyboard.\n; This section configures my main keyboard.\n;\n; `text:` prefix will send a text. Use {KEY} for special keys, e.g. text:Hello{ENTER}World.\n; `keys:` prefix will send a key combination.\n; `run:` prefix will run a command.\n;\n; ⚠ Never include a comment in the same line as a key binding. ⚠\n[Main_Keyboard]\nMULTIPLY=text:×\n\n; ✅ The same, but for my external numpad.\n[NumPad]\nNumpad0=keys:WIN+F10\nNumpad1=keys:WIN+F1\nNumpad2=keys:WIN+F2\nNumpad3=keys:WIN+F3\nDECIMAL=keys:WIN+F11\nENTER=keys:WIN+F12\nNumpad7=keys:CTRL+SHIFT+F9\nNumpad8=keys:CTRL+SHIFT+F10\nNumpad9=keys:CTRL+SHIFT+F11\nADD=keys:CTRL+SHIFT+F12\nMULTIPLY=text:×\nNumpad4=run:explorer.exe C:\\data\\ShareX\\Screenshots\n\n; Switch to the `settings.Secondary.ini` profile.\nESCAPE=profile:Secondary\n\n\n; That's it! Save the file and the app will reload automatically.\n```\n\n## Profiles\n\nBy default, only key bindings from the main `settings.ini` file are active.\n\nTo use a different set of key bindings, create a new `.ini` file in the same directory as the app, e.g. `settings.Secondary.ini`.\n\nTo switch to that profile, either select it from the UI or add a key binding with the `profile:` prefix, e.g. `ESCAPE=profile:Secondary`.\n\nThis allows you to have different sets of key bindings for different tasks or applications.\n\nExample of the `settings.Secondary.ini` file:\n\n```ini\n; https://github.com/dero/HIDeous\n\n; --------------------------------------------------------\n; CHANGES TO THIS FILE ARE AUTOMATICALLY RELOADED BY THE APP\n; --------------------------------------------------------\n\n; Don't repeat the [Global] and [Devices] sections, they are always\n; loaded from the main settings file.\n\n[NumPad]\n; Remap the 0 key to a key combination different from the main profile.\nNumpad0=keys:CTRL+SHIFT+ALT+F1\n\n; Switch back to the default profile.\nESCAPE=profile:Default\n```\n\n\n## Key Names\n\nYou can mostly just use the intuitive name of the key, like `A`, `F1`, `SHIFT`, etc. To find out key codes for more obscure keys, you can use the UI. Press a key and its code will appear in one of the rows.\n\nAnd if that's not enough, you can find the [long list of key codes baked into the app in the source code](https://github.com/dero/HIDeous/blob/a438428b1621a1244db15162217f867ebe90bb40/src/common/settings.cpp#L19-L131).\n\n## Scan Codes\n\nSometimes, virtual key codes (like `NUMPAD2`) change depending on the system state (e.g. NumLock). If you want to bind a specific *physical key* regardless of what the system thinks it is, you can use **Scan Codes**.\n\nThe syntax is `SC\u003cdecimal_number\u003e`, for example `SC80`.\n\n**How to find a Scan Code:**\n1. Open the HIDeous UI.\n2. Press the key you want to map.\n3. Look at the **Scan Code** column in the device list (e.g., `SC80 (0x50)`).\n4. Use the `SC80` part in your `settings.ini`.\n\n**Example:**\n```ini\n; This will trigger on the physical \"2\" key on the Numpad, \n; regardless of whether NumLock is ON (Numpad2) or OFF (ArrowDown).\nSC80=text:Hello World\n```\n\nYou can also use scan codes on the right side of the binding:\n```ini\n; Pressing F1 will simulate pressing the Enter key (Scan Code 28)\nF1=keys:SC28\n```\n\n## Similar Tools\n\nHow's this different from AutoHotkey or HIDMacros?\n\nIt can tell apart individual keyboards. [AHK](https://www.autohotkey.com/) can't easily do that.\n\nIt can print Unicode strings, which is something [HIDMacros](https://www.hidmacros.eu/) struggles with.\n\nThen there's [LuaMacros](https://www.hidmacros.eu/download.php), which is a great tool, but it can be a bit hard to wrap your head around.\n\nAnd it's newer, lighter and simpler than all of them. ⚖\n\n## Known Issues\n- **Rapid Toggle Key Usage**: If you map a text macro to a toggle key (CAPSLOCK, NUMLOCK, SCROLLLOCK) and press it very rapidly, the toggle state might get out of sync (staying ON or OFF incorrectly) due to timing conditions. This is a known limitation.\n\n## Troubleshooting \u0026 Support\n\nTry running the app as an administrator.\n\nIf that doesn't help, it'd be great if you took the time to [create an issue on GitHub](https://github.com/dero/HIDeous/issues). I'll do my best to help you out and you'll be helping make the app better for everyone.\n\n## Uninstall\n\nMake sure the \"Run on startup\" toggle in the UI is off, then just delete the app directory.\n\n## Disclaimer\n\nThis is essentially a keylogger. It doesn't do any shenanigans with your data, but thanks to access to your system, it could. Same as any other software you download from the internet.\n\nIf you can read and compile C++, you can check the source code and produce the binaries yourself. If you can't, either trust me or don't use this.\n\nAlso, I'm actually a web engineer, not a C++ developer by trade, so the code might be a bit rough around the edges. Constructive criticism is welcome. 🙇‍♂️\n\n\n## Development\n\nWant to build it yourself? Check out [CONTRIBUTING.md](./CONTRIBUTING.md) for build instructions.\n\n## License\n\nDo whatever you want with this. [MIT License](./LICENSE).\n\nAttribution and nice words are appreciated, but not required. 🙂\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdero%2Fhideous","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdero%2Fhideous","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdero%2Fhideous/lists"}