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 virtual keyboard, to interact with fields, search and global search panels, is 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:
๐ Microsoft Security Intelligence Portal
If you have any doubts, you can compile the main components yourself using AutoIt.
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.