{"id":22678311,"url":"https://github.com/evilc/ucr","last_synced_at":"2026-02-01T22:31:35.335Z","repository":{"id":18503162,"uuid":"21699440","full_name":"evilC/UCR","owner":"evilC","description":"Universal Control Remapper [ALPHA]","archived":false,"fork":false,"pushed_at":"2022-03-14T22:16:34.000Z","size":3320,"stargazers_count":206,"open_issues_count":108,"forks_count":33,"subscribers_count":15,"default_branch":"master","last_synced_at":"2025-06-25T10:52:48.920Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"AutoHotkey","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/evilC.png","metadata":{"files":{"readme":"README.md","changelog":"Changelog.txt","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2014-07-10T15:31:03.000Z","updated_at":"2025-05-23T11:17:45.000Z","dependencies_parsed_at":"2022-09-19T10:22:01.922Z","dependency_job_id":null,"html_url":"https://github.com/evilC/UCR","commit_stats":null,"previous_names":[],"tags_count":44,"template":false,"template_full_name":null,"purl":"pkg:github/evilC/UCR","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/evilC%2FUCR","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/evilC%2FUCR/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/evilC%2FUCR/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/evilC%2FUCR/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/evilC","download_url":"https://codeload.github.com/evilC/UCR/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/evilC%2FUCR/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28993253,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-01T22:01:47.507Z","status":"ssl_error","status_checked_at":"2026-02-01T21:58:37.335Z","response_time":56,"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":[],"created_at":"2024-12-09T18:14:45.120Z","updated_at":"2026-02-01T22:31:35.315Z","avatar_url":"https://github.com/evilC.png","language":"AutoHotkey","funding_links":[],"categories":[],"sub_categories":[],"readme":"# UCR - Universal Control Remapper\n\n# THIS AHK VERSION OF UCR IS BEING PHASED OUT! PLEASE START TO MIGRATE TO THE [NEW C# VERSION](https://github.com/Snoothy/UCR) \n\n![ScreenShot](http://i.imgur.com/pSBxCbc.png)\n# [DOWNLOAD HERE](https://github.com/evilC/UCR/releases)  \n**DO NOT** Use the green \"Download\" button at the top of this page  \n# [Forum thread for news and discussion](https://autohotkey.com/boards/viewtopic.php?t=12249)\n## [Historical releases](https://github.com/evilC/UCR/releases)\n\n# IMPORTANT NOTES ON XBOX CONTROLLERS!\n## GENERAL\nUCR does **not** currently support remapping of a physical Xbox controller.  \nThat is to say, if you wish to alter how a game sees a physical Xbox controller, you cannot currently do this.  \nThis *may* be possible in the future via Nefarius' HidGuardian project.  \nReading input from an Xbox controller and sending output to vJoy etc is fine.  \nReading input from a non-Xbox stick and emulating an Xbox controlelr is fine.  \n## Input (Reading state of your XBox controller)  \n1) There is no \"Bind Mode\" for Xbox controllers, you must select from the menu to enable XInput support.  \n2) Some Xbox controller variants (One, Elite, Accessibility) will only work in Xinput mode.  \n**If Xbox controllers stop working while UCR is not active, then you are not using XInput mode! Select from the menu, don't use Bind Mode!**  \n## Output (Emulating Xbox controllers)\nFor Virtual XBox controllers to work, you must:  \n1) Install the latest version of vJoy from http://vjoystick.sourceforge.net/  \n2) On first run of UCR, check the vJoy log to make sure vJoy loaded OK  \nFrom the UCR main menu: IOClasses -\u003e vJoy -\u003e Show vJoy log  \n3) If all went well, install the SCPVBus:  \nFrom the UCR main menu: IOClasses -\u003e vJoy -\u003e Install SCPVBus  \nIf this step fails, open an admin command prompt and navigate to UCR's resources folder, there are .bat files in there  \n\n## About\nThe aim of UCR is to allow end-users to easily leverage the power of AHK without having to learn to code.  \nAt it's basest level, think of it as a way for an end-user to run a number of scripts written by various people, and manage when each script runs, what keys trigger it's functions, tweak each script's parameters, etc - solely by using a GUI application.\nThe primary target audience is gamers, UCR is intended to be able to replicate the functionality that comes with programmable keyboards / mice / joysticks etc.\n\n## Profiles\nUCR supports profiles. A number of plugins can be grouped together into a Profile.  \nProfiles can also have child profiles, and child profiles can \"inherit\" the plugins of a parent profile.  \nThis can be used to create \"Shift states\" to switch the functionality of inputs.  \nIn the future, it is also planned to allow profiles to be linked to a specific application - when that application gets the focus, the profile becomes active.\n\n### Command line profile switching\nProfiles can be changed through command line parameters when launching UCR through the CLI tool and subsequently to change the profile of the running instance. The syntax for profile switching is `UCR.exe CLI.ahk \u003cParentProfile\u003e \u003cChildProfile\u003e`. There are three different methods for changing profiles using the syntax. Passing a valid profile GUID as the `\u003cParentProfile\u003e` will find and activate the profile. Passing a string, quoted or unquoted, as `\u003cParentProfile\u003e` will select the first profile matching `\u003cParentProfile\u003e` (all matches are case insensitive). Passing both `\u003cParentProfile\u003e` and `\u003cChildProfile\u003e` will find and select a profile matching the `\u003cChildProfile\u003e` name with a parent profile matching the `\u003cParentProfile\u003e` name. The `\u003cParentProfile\u003e` will be selected as fallback if no `\u003cChildProfile\u003e` is found.\nExample: `UCR.exe CLI.ahk \"MAME\" \"megaman\"`\n\n## Plugins\nAt the core of the design of UCR is the idea of an AHK script as a \"Plugin\".  \nFrom an end-user's perspective, a plugin is a widget which can perform a small task - eg remap one key to another.  \nFrom a plugin author's point of view, a plugin is simply a text file containing AHK script.\nThe script contains an AHK class that derives from a base class which is part of the UCR source code.  \nEach instance of each plugin gets it's own GUI inside the UCR app when added by a user.\nThe GuiControls in the Gui can easily be made persistent across runs and you can add special GuiControls that allow the end-user to select the inputs (eg hotkeys) and outputs to configure your script.\nThere are varios provided methods and mechanisms to get notification of events (eg the profile containing the plugin went active or inactive)  \nPretty much anything that you could normally put in an AHK class should work inside a plugin.  \n\n## Persistent GuiControls\nPlugins can call UCR methods to add a GuiControl to their Gui whose value will be remembered between runs of UCR.  \nIt can be used to allow the end user to tweak the behavior of the plugin that it is part of.\n\n## Inputs and Outputs\nPlugins may also contain special GuiControls that allow the end user to bind inputs and outputs.  \nValid inputs are: Keyboard, Mouse, Joystick.  \nValid outputs are: Keyboard, Mouse, vJoy Virtual Joystick (Inc virtual XBox), Titan One hardware  \nMore inputs and output types can be added through the \"IOClass\" system - Each IOClass can add items to the UCR Main menu, handles adding of menu items to the Input/Output GuiControls, and handles processing of input and output (eg Calling DLLs).  \n\n\n## Requirements\nIf you are a typical end-user of UCR, you just need to download the zip from the releases page, unzip it and double-click UCR.exe. No installation is required, and you do not need to install AutoHotkey.  \n\n\nIn order to run UCR un-compiled:\nInstall AutoHotkey, then take a copy of UCR.exe from the download zip, rename it AutoHotkey.exe and place it in your AutoHotkey install folder. Optionally back up the old AutoHotkey.exe, but the files named like AutoHotkeyA32.exe in your AHK folder are already backups of the normal AHK executables.  \n\n## Debugging UCR\nA major design goal of UCR is to make it (and plugins) debuggable.  \nDevelopment is currently done using [SciTE4AutoHotkey](https://autohotkey.com/boards/viewtopic.php?f=6\u0026t=62), so if you wish to debug UCR or a plugin, that is the advised solution.  \nCurrently the relased version of SciTE4AutoHotkey does not support breakpoints in plugins etc properly, but Lexikos has a fix for this, and I posted instructions [here](https://autohotkey.com/boards/viewtopic.php?p=111383# p111383) on how to apply the fix.  \nUCR's code avoids the use of SetTimer, OnMessage etc in the main thread wherever possible, so that \"stepping in\" in the debugger does not end up dropping you into some random timer pseudo-thread. In general, it works around these situations by offloading any code that might interfere with the debugging process to a worker thread.\n\n## Debugging Plugins\nIf you wish to be able to set breakpoints within a plugin, then you must do the following:  \nEdit `UCRDebug.ahk` and place a line like `# include Plugins\\User\\MyPlugin.ahk` at the end.  \nAlso, make sure the line `# Include *iUCRDebug.ahk` in `UCR.ahk` is not commented out.  \nThis makes the debugger aware of the plugin, and allows you to place breakpoints within it.  \nYou may debug any number of plugins in this way.  \n\n## Documentation\nPlease see the [Wiki](https://github.com/evilC/UCR/wiki).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fevilc%2Fucr","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fevilc%2Fucr","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fevilc%2Fucr/lists"}