Is there even a way to access the files that steam has installed in an API?
Just checked the steam API, and there's a way to see the games that a user owns, but not the games that they have installed.
A formal or even unofficial API? I doubt it. Valve tend to be a tad jealous of their software and their service both; they seem to do a good job of providing necessary APIs for game developers selling through the storefront and managing ancillary functions (cloud saves, achievements, etc.) for the games themselves, but nothing beyond what's strictly necessary.
It took more than long enough for Valve to care about even allowing "customers" (end users) to replace Steam client-side game icons or grid-view game banners
with custom resources, and what's there is surprisingly primitive. Based on that sort of evidence, I wouldn't bet that there's a single client API call available to anything... outside of normal Windows desktop integration, at least. There is this, however
I'm reasonably certain that the official Steamworks API
is solely dedicated to interactions with the Steam service
itself, without reading any of it.
At any rate, when they're not working to enforce DRM requirements or prevent multiplayer cheating, Valve seem to greatly prefer open standards and simplicity for the Steam client and for items like the Source Engine
. By way of example: there's no official soundtrack for Left 4 Dead 2
(I know, because I wanted to get it), but it's entirely possible to grab the bare WAV (and I think Ogg Vorbis?) files out of the install directory.
As with the .ACF manifests @Nod5 mentioned earlier, there's considerable use of semi-structured plaintext, JSON, XML, and other trivial formats that would likely be very simple to use directly without significant conversion, let alone reverse-engineering. There may be times that the Steam client has a different internal state than is reflected in external files.
For the games themselves? Valve seem to be aiming for the greatest possible compatibility with the lowest possible effort. So far as I know, Steam doesn't even provide something like packaging system
primitives, even for its own internal use. Games are still installed as-is, with whatever binary blob(s) the developers decide to publish... which is how you end up with Steam games that use or need
additional third-party DRM or multiplayer systems or whatever.
If you'd like to start poking around the Steam client internals or just the games being installed, I think that there's very little preventing you from doing it, other than whatever EULAs you may have agreed to. 😉
End note: I haven't looked, but it's quite possible that Steam does integrate at least in part with the Windows Games Explorer
. HowToGeek does note
that Microsoft never added Steam or any other major "games provider" (Microsoft's term) to this facility, but my interpretation is that Valve may have
at some point added integration, or perhaps even wrote and published—but never activated—the necessary code in the client. It may even still be there. I have no idea what the Windows APIs for this looked like, but they were still there as of at least Windows 8.x, and they would have had to include some basic information about installed games: a name; an icon; some way to execute the game (or, more likely, STEAM.EXE), and I think a couple of other details. If
this still exists, you might be able to tap into it. You may have to go through the Wayback Machine to get your hands on API documentation, though.
From time to time, you'll see "Steam" games appear in this folder regardless, on account of they were written against Games for Windows Dead
. The service is defunct; however, it does have a very slight upside in that every(?) game binary still hitched to the decaying corpse should appear in the special "Games" folder aboard every Windows release that still has that functionality.
...Fortunately, a lot of angry people have worked very hard at removing GFWL runtime requirements from older, unsupported titles. PCGamingWiki has a lot of details on this
Alternately, you could see what's available through Windows Store APIs. I suspect Valve probably took that a lot more seriously than they did Microsoft's older gaming efforts. I'm still taking a wait-and-see attitude on upgrading from 7SP1, though, so I have no real idea how widespread support is. Valve may or may not have decided to make Steam or Steam-installed games at least appear in Windows Store facilities.