Control Playnite Desktop using your Xinput gamepad, with an integrated virtual keyboard and multiple functions mapped to the buttons!
โจ This extension lets you use your gamepad with Playnite Desktop, allowing you to control various functions (mouse, scrollbars, Playnite shortcuts) and reach specific sections through customizable positions. A built-in virtual keyboard to interact with fields, search and global search panels, is also included.
LB and RB). It also allows access to specific panels and can launch Playnite functions via shortcuts.GamepadDesktop-Wizard to edit panel and section positions: simply place the mouse over the indicated points and wait a few seconds. The Wizard saves the positions of the current slot. No restart required.Keys section in config.ini. Almost all buttons can be changed, with few exceptions:
tabjump_next (RT for default) is used for left mouse click. A is used to press buttons on the OnScreen Keyboard (this is the only non-configurable function).$explorerAndSlot_back (LS by default) and $FilterAndSlot_next (RS by default). Short-pressing toggles Playniteโs Explorer and Filter panels.$globalsearch (back by default) to launch Playnite fullscreen; short-press it to open Global Search.The default keys are:
-(Left Stick) LSX โ $mousemovx , LSY โ $mousemovy (mouse movement)
-(Right Stick) RSY โ $scroll (scrollbars)
-A โ $mouseleft (mouseleft click)
-B โ $mouseright (mouseright click)
-X โ $osk (open/close osk)
-Y โ $search (search panel)
-back โ $globalsearch (global search + Playnite Fullscreen mode by long press)
-start โ $enter (enter key)
-LB โ $section_back (jump to the previous section)
-RB โ $section_next (jump to the next section)
-LT โ $tabjump_back (jump to the previous panel of the current section)
-RT โ $tabjump_next (jump to the next panel of the current section)
-(Left Stick Button) LS โ $explorerAndSlot_back (toggle Playnite Explorer panel, or change slot by long press)
-(Right Stick Button) RS โ $filterAndSlot_next (toggle Playnite Filter panel, or change slot by long press)
-D-pad:OSK closed โ selects games in the second zone, or navigates UI components (fields, zoom controls, and elements of the Explorer and Filter panels) in the first or third zone.
-D-pad:OSK open โ moves between buttons on the OnScreen Keyboard.
config.ini and also edit manually several variables:$sensitivity, $deadzone and $smoothfactor ([Mouse] section).[Global] section):
$sectionNx, $sectionNy โ indicates the 3 points reachable with $section_back and $section_next (LB and RB by default).$sectionNpanelx, $sectionNpanely โ reachable points of the Explorer's Tab (if you are in the 1st zone) or the Zoom control bar (if you are in the 2nd zone) with $tabjump_back and $tabjump_next (LT and RT by default).$limit1,$limit2 โ horizontal points which divide the screen in three zones. They are calculated in this manner: DesktopXRes/ChosenMousePosition, rounded to the third decimal.$CurrentSlot ([Wizard] section) โ modified when you change slot with controller. Used by the wizard to save the points. You can modified it and run the wizard also without GamepadDesktop running.$time โ duration (in seconds) for which GamepadDesktop continues to allow mouse control after Playnite loses focus. Useful for interacting with game clients (e.g., Steam, GOG) to install games, or recovering if OS steals focus (e.g., popups, updates). You can customize this value in the [Global] section (default 17s).$sleepIdleTime โ sleep duration (in milliseconds) while in idle mode (default: 600 ms).Autorun = 1 in autorun.ini (also possible by clicking the Playnite context menu) to automatically start GamepadDesktop when Playnite launches.GamepadDesktop is not running before updating it.
GamepadDesktop still allows mouse control (movement, right click, and left click via both $mouseleft and $tabjump_next) for the duration set by $time. This lets you interact with other windows or recover if the OS steals focus. Please remember to click back on Playnite after interacting with any prompted clients or launchers. After this period, the script goes idle until Playnite regains focus.GamepadDesktop to enter idle mode (no mouse control, no other functions) by pressing Ctrl + Alt + Shift + 9.
If you want to automatically enter idle mode when a game is started, add the following script to (Global) Scripts โ Game scripts โ Execute after a game is startedโ in Playnite:
Add-Type -AssemblyName System.Windows.Forms
Start-Sleep -Milliseconds 500
[System.Windows.Forms.SendKeys]::SendWait("^%+9")
GamepadDesktop starts, $CurrentSlot (under [Wizard]) is set to the first slot.[Global] section. You can also edit them directly by opening the config.ini manually or by using the corresponding menu option. [Global.slot2] and [Global.slot3] contains the points of the other slots.Some antivirus software may incorrectly flag GamepadDesktop.exe or GamepadDesktop-Wizard.exe as potentially harmful.
These are false positives:
GamepadDesktop.exe v1.0.4 and GamepadDesktop-Wizard.exe v1.0.1) have been submitted to Microsoft for analysis, and the detections have been removed after confirming that they are safe.If future versions are flagged again, you are welcome to submit the new .exe files yourself for analysis via:
If you enjoy GamepadDesktop, you can buy me a coffee. It will be appreciated ;)
๐ Hereโs a quick demo of how GamepadDesktop works!
|
|
|
This gamepad script was written in AutoIt.
XInput support was added via the XInput UDF by Oxin8 (xoninx@gmail.com), a short, but useful, AutoIt script found on the web that allows reading the XInput state.