STEAM GROUP
Steam Client Beta SteamBeta
STEAM GROUP
Steam Client Beta SteamBeta
18,604
IN-GAME
88,961
ONLINE
Founded
8 January, 2013
All Discussions > Beta Feedback > Topic Details
Kaldaien 29 Apr, 2021 @ 3:31pm
How to disable Steam Input globally?
None of my games where a developer has enabled Steam Input have working input because Steam Input disables XInput, DirectInput and HID and then handles all of this stuff in a separate process.

I cannot use that, you just severed the connection between the game and input devices by doing this. It's been this way for years, but now that there's no system-wide way to disable Steam Input, I have a lot of games that are busted until I manually disable Steam Input.
< >
Showing 1-15 of 54 comments
TheOddsBodkins 30 Apr, 2021 @ 2:38am 
There's no option to disable it globally, but you can disable it for each controller.

There's an option to "hide" your device from Steam Input in the controller options. When you select a detected controller in the controller options screen, there should be a "hide device" button at the bottom of the screen, click that and restart Steam for the change to take effect.
Last edited by TheOddsBodkins; 30 Apr, 2021 @ 2:39am
austinp_valve 30 Apr, 2021 @ 3:02pm 
Steam Input defaults to disabled for both players and developers, so if a game has Steam Input enabled by the developer they've gone into Steamworks settings and turned it on. We do no provide an option to players to globally override developer's choices to Steam Input because it would silently break input in many games. If you want to force it off in a specific game you can in the per-game settings.
Kaldaien 11 May, 2021 @ 2:52am 
Originally posted by Bananarama:
You can deactivate the Steam in-game overlay globally. If deactivated, Steam Input et al. won't be initialized/called.
This isn't true. The Steam client DLL exports an HID interface that activates for anything using SteamAPI, whether the overlay's active or not.

Originally posted by austinp_valve:
Steam Input defaults to disabled for both players and developers, so if a game has Steam Input enabled by the developer they've gone into Steamworks settings and turned it on. We do no provide an option to players to globally override developer's choices to Steam Input because it would silently break input in many games. If you want to force it off in a specific game you can in the per-game settings.
You should really consider an option to turn it off completely, because you broadly kill all gamepad input APIs and make it much more difficult to get them working correctly when they're misbehaving. You actually do the opposite of what you're intending to do :-\

I know in 100% of cases that I do not want Steam Input screwing up my game, and would rather translate the input APIs myself. XInput, DirectInput, WinMM Joystick... whatever the game wants, I'm happy to translate it myself and don't want to be hassled with disabling this on a per-game basis. There's 0 chance I ever want Steam Input.
Last edited by Kaldaien; 11 May, 2021 @ 2:55am
Kaldaien 11 May, 2021 @ 3:13am 
Steam Input does not work cooperatively with any other add-on software that wants to use and fix issues related to gamepad input.

I can obviously just hook SteamAPI and intercept Steam Input myself, but that's abstracted around game-specific tasks. By blocking XInput and DirectInput, you've really made life extremely difficult.

----
Anyway, I know this is never going to change. But you did at one point have a default preference, I have no idea where it went and am basically assured that input in games only works correctly for native Xbox controllers, since you interfere with those the least. </frustration>
Kaldaien 11 May, 2021 @ 3:50am 
For context, this https://gtm.you1.cn/sharedfiles/filedetails/?id=2465720809 is exacerbated by Steam Input. It's so much easier to fix these problems in games when there's not ... Steam in the way.

Game runs fine when Steam Input is disabled and I can directly manipulate the bad Direct Input code that's the cause of that.

https://gtm.you1.cn/sharedfiles/filedetails/?id=2483847560

Games are not as well tested as you think they are. Steam Input's just being a giant nuisance.
Last edited by Kaldaien; 11 May, 2021 @ 3:53am
Kaldaien 11 May, 2021 @ 12:27pm 
Incidentally, among said game's input processing nightmares, it uses a Keyboard Hook and does not stop processing input from said hook when the Steam overlay is active.

I fixed the issue of keyboard input leaking through to the game by bypassing the keyboard hook when the overlay is active. I don't know if this is a common occurrence, it's certainly the first time I've ever had to fix this.

I don't think there's a good general purpose defense against this unless you install your own kb hook when activating the Steam overlay and remove it when deactivating. GeForce Experience does this, Steam doesn't.
Last edited by Kaldaien; 11 May, 2021 @ 12:34pm
AL2009man 12 May, 2021 @ 5:18pm 
Originally posted by Kaldaien:
For context, this https://gtm.you1.cn/sharedfiles/filedetails/?id=2465720809 is exacerbated by Steam Input. It's so much easier to fix these problems in games when there's not ... Steam in the way.

Game runs fine when Steam Input is disabled and I can directly manipulate the bad Direct Input code that's the cause of that.

https://gtm.you1.cn/sharedfiles/filedetails/?id=2483847560

Games are not as well tested as you think they are. Steam Input's just being a giant nuisance.

This reminds me of Death Stranding's PC Port at launch, but even after disabling Steam Input (and/or Steam Input API support) completely, there's still performance issues (I think Rumbles can cause the hit) regardless. Both Valve and Kojima Production/505 already fixed the issues since then.

Thankfully, Death Stranding can still do Windows.Gaming.Input/XInput/etc, we can still use Legacy Input as a fallback. (hey Kaldaien, WGI is a thing Microsoft is trying to replace XInput)

At this rate, NieR and bad PC Ports is becoming a running theme here, *sigh* at least we aren't dealing with Horizon Zero Dawn-levels of badly implemented input. /Despair emote/
Last edited by AL2009man; 12 May, 2021 @ 5:58pm
Kaldaien 13 May, 2021 @ 6:52pm 
Yeah, pirates get the superior version free from problems caused by Steam Input. It's ludicrous.

I'm deadset on nuking Steam Input out of the water in all of my mods, so my users don't have to deal with these performance problems. I initially liked Steam Input, but now I detest it. I've grown to hate the Steam platform in its entirety :-\

For @#$% sake, when I'm actively fixing bugs in the Steam overlay and can't get the time of day from Valve, there's a problem. I'm done fixing their crap.
Last edited by Kaldaien; 13 May, 2021 @ 6:54pm
austinp_valve 14 May, 2021 @ 2:40am 
I'm not aware of any overlay related input bugs that have been reported. Can you link me to a thread with repro steps?
Kaldaien 14 May, 2021 @ 1:25pm 
Originally posted by austinp_valve:
I'm not aware of any overlay related input bugs that have been reported. Can you link me to a thread with repro steps?
https://gtm.you1.cn/groups/SteamClientBeta/discussions/3/3123786356703008701/?tscn=1620985240#c3144053275983735077

NieR: Replicant uses a Windows Keyboard Hook for its keyboard input processing (WH_KEYBOARD).

It _does_ have an Overlay Activation callback that it uses to -kinda- pause the game (goes into a menu screen). However, because of that keyboard hook, it continues receiving keyboard input while the Steam overlay is active :)

I fixed the problem by adding my own WH_KEYBOARD hook when the Steam overlay is activated that doesn't pass the messages down to the game. The Steam overlay continues working with keyboard input as designed and the game stops activating random menu functions when you type anything in the overlay.
Kaldaien 15 May, 2021 @ 5:07am 
I apologize for the brash language, but please if you're still reading this...

SteamInput is a source of countless headaches and agitates me greatly due to the way it's implemented.

When it engages, it sabotages XInput, DirectInput and HID. So that no other code running in the game's process can communicate with gamepads in any capacity. That means, my overlay cannot use gamepad to do anything, it also means I cannot block gamepad input to make my overlay work cooperatively with the game (e.g. when overlay is active, don't pass input through to the game underneath).

You must understand the importance of being able to hook gamepad input APIs and do so in a way that's not game-specific. (i.e. poll face buttons, not hook into SteamAPI and ♥♥♥♥ around with action sets).

My only possible recourse would be to move all input processing out of the game itself and into a separate process, and while that's doable, it actually makes Special K's game fixing features less functional. Being able to block input APIs conditionally is very important to fix performance problems and various other issues, and as things stand Steam Input is playing by its own set of rules creating a ton of problems.

    Can you please consider what I'm saying?

Some compromise is needed such that I can intercept input before it goes through Steam Input and allow interaction with my software's overlay. I do not wish to disable Steam Input in any way, I just need it to work more cooperatively as all other input APIs in the HID stack do (i.e. w/ low-level hooks, window focus, etc.) to work harmoniously with the framework I've developed for fixing problems in games. It's ironic that Steam Input itself has become one of said problems.
Last edited by Kaldaien; 15 May, 2021 @ 5:09am
Lulu Rainsong 18 May, 2021 @ 9:17pm 
Please see Post #3. You cannot force the Steam Controller OR Remote Play off. If it does not go through Steam FIRST, and the game is installed & played THROUGH Steam (you can check this with ANY game that supports ANY controller input - DInput/XInput/Steam, et al.), and alt-tab out of the game, any inputs sent will not be read by the game.

In short: It's impossible. Even with the very first builds of Steam that supported controllers.
Last edited by Lulu Rainsong; 18 May, 2021 @ 9:18pm
Kaldaien 19 May, 2021 @ 3:04am 
I can check this with Special K much quicker. The Steam client DLL installs hooks for XInput, DirectInput, RawInput, WinMM Joystick, HID and then disconnects them from the Windows DLL and instead routes these things through the Steam client.

It's trivial to disable this, I just shouldn't have to do it by manually bypassing Steam's hooks.
Last edited by Kaldaien; 19 May, 2021 @ 3:04am
Kaldaien 2 Jun, 2021 @ 10:03pm 
I've more or less given up on this.

For anyone who might arrive here from Google, for the two things Steam both refers to as "Steam Input," the following solutions exist:


1) "Steam Input" that is just translating to XInput, prevent Steam from loading ordinal 100 from XInput*.dll, which it does hundreds of thousands of times.

* It then becomes possible to actually read gamepad input using a normal input API without Steam breaking stuff.


2) "Steam Input" that re-invents the input wheel completely, very much different.

#include <steamapi/isteamcontroller.h> #include <SpecialK/input/input.h> #define SK_STEAM_READ(type) SK_Steam_Backend->markRead (type); #define SK_STEAM_WRITE(type) SK_Steam_Backend->markWrite (type); #define SK_STEAM_VIEW(type) SK_Steam_Backend->markViewed (type); using SteamAPI_ISteamController_GetDigitalActionData_pfn = ControllerDigitalActionData_t (S_CALLTYPE *)(ISteamController *, ControllerHandle_t, ControllerDigitalActionHandle_t); using SteamAPI_ISteamController_GetAnalogActionData_pfn = ControllerAnalogActionData_t (S_CALLTYPE *)(ISteamController *, ControllerHandle_t, ControllerAnalogActionHandle_t); SteamAPI_ISteamController_GetDigitalActionData_pfn SteamAPI_ISteamController_GetDigitalActionData_Original = nullptr; SteamAPI_ISteamController_GetAnalogActionData_pfn SteamAPI_ISteamController_GetAnalogActionData_Original = nullptr; ControllerDigitalActionData_t SteamAPI_ISteamController_GetDigitalActionData_Detour (ISteamController *This, ControllerHandle_t controllerHandle, ControllerDigitalActionHandle_t digitalActionHandle) { static ControllerDigitalActionData_t neutralized = { false, false }; if (SK_Input_GamepadCapture ()) return neutralized; SK_STEAM_READ (sk_input_dev_type::Gamepad); return SteamAPI_ISteamController_GetDigitalActionData_Original (This, controllerHandle, digitalActionHandle); } ControllerAnalogActionData_t SteamAPI_ISteamController_GetAnalogActionData_Detour (ISteamController *This, ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t analogActionHandle) { static ControllerAnalogActionData_t neutralized = { k_EControllerSourceMode_None, 0.0f, 0.0f, false }; if (SK_Input_GamepadCapture ()) return neutralized; SK_STEAM_READ (sk_input_dev_type::Gamepad); return SteamAPI_ISteamController_GetAnalogActionData_Original (This, controllerHandle, analogActionHandle); }

The second problem is ludicrously complicated to solve, but the only way to keep games from processing input they should not be when they use this API. There really should be a kill switch, all other APIs could simply be told the window doesn't have focus and they'd stop.
Last edited by Kaldaien; 3 Jun, 2021 @ 2:12am
Voyant 13 Feb, 2022 @ 1:12pm 
Did we ever get an option on this its been an ongoing issue since 2018. Sitting here in 2022 still looking for a way to disable Steam Input so I can play my games.

Disabling them individually doesn't do anything you still get the dreaded "gamepad config loaded" and are screwed. Even if you turn forced off, disable every option under the sun it still appears.

Main reason not to buy a SteamDeck for those considering, what good is having controllers that don't work?
< >
Showing 1-15 of 54 comments
Per page: 1530 50

All Discussions > Beta Feedback > Topic Details