Skip to content

Instantly share code, notes, and snippets.

@Kamilake
Created February 2, 2023 02:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Kamilake/742f84350bd274c46bc6543a7066a4f9 to your computer and use it in GitHub Desktop.
Save Kamilake/742f84350bd274c46bc6543a7066a4f9 to your computer and use it in GitHub Desktop.
Get Steam Game Installation location with C
int main(int argc, char *argv[])
{
char cmd_buffer[1024];
char steamInstallPath[1024];
HKEY hKey;
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\WOW6432Node\\Valve\\Steam", 0, KEY_READ, &hKey) == ERROR_SUCCESS)
{
DWORD dwType = REG_SZ;
DWORD dwSize = sizeof(steamInstallPath);
RegQueryValueEx(hKey, "InstallPath", NULL, &dwType, (LPBYTE)steamInstallPath, &dwSize);
RegCloseKey(hKey);
}
else
{
printf("Error: Steam not found\n");
system("pause");
return 1;
}
printf("Steam install path: %s\n", steamInstallPath);
char vrchatSteamId[] = "438100";
char steamLibraryFoldersPath[1024];
char vrchatSteamLibraryRootPath[1024];
char vrchatInstallPath[1024];
sprintf(steamLibraryFoldersPath, "%s\\steamapps\\libraryfolders.vdf", steamInstallPath);
FILE *steamLibraryFoldersFile = fopen(steamLibraryFoldersPath, "r");
if (steamLibraryFoldersFile == NULL)
{
printf("Error: Steam library folders not found\n");
system("pause");
return 1;
}
char line[1024];
while (fgets(line, sizeof(line), steamLibraryFoldersFile))
{
if(strstr(line, "path") != NULL)
{
char *token = strtok(line, "\"");
token = strtok(NULL, "\"");
token = strtok(NULL, "\"");
token = strtok(NULL, "\"");
sprintf(vrchatSteamLibraryRootPath, "%s", token);
//replace "\\" to "\"
for (int i = 0; i < strlen(vrchatSteamLibraryRootPath); i++)
{
if (vrchatSteamLibraryRootPath[i] == '\\' && vrchatSteamLibraryRootPath[i + 1] == '\\')
{
for (int j = i; j < strlen(vrchatSteamLibraryRootPath); j++)
{
vrchatSteamLibraryRootPath[j] = vrchatSteamLibraryRootPath[j + 1];
}
}
}
break;
}
}
printf("VRChat steam library path: %s\n", vrchatSteamLibraryRootPath);
char vrchatAppManifestPath[1024]; // appmanifest_438100.acf
sprintf(vrchatAppManifestPath, "%s\\steamapps\\appmanifest_%s.acf", vrchatSteamLibraryRootPath, vrchatSteamId);
printf("VRChat app manifest path: %s\n", vrchatAppManifestPath);
FILE *vrchatAppManifestFile = fopen(vrchatAppManifestPath, "r");
if (vrchatAppManifestFile == NULL)
{
printf("Error: VRChat not found\n");
system("pause");
return 1;
}
char line2[1024];
while (fgets(line2, sizeof(line2), vrchatAppManifestFile))
{
if (strstr(line2, "installdir") != NULL)
{
char *token = strtok(line2, "\"");
token = strtok(NULL, "\"");
token = strtok(NULL, "\"");
token = strtok(NULL, "\"");
sprintf(vrchatInstallPath, "%s\\steamapps\\common\\%s", steamInstallPath, token);
break;
}
}
printf("VRChat install path: %s\n", vrchatInstallPath);
return 0;
}
@Kamilake
Copy link
Author

Python

import os
import re
import winreg

def get_steam_install_path():
    try:
        hkey = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, r"SOFTWARE\WOW6432Node\Valve\Steam", 0, winreg.KEY_READ)
        steam_install_path, _ = winreg.QueryValueEx(hkey, "InstallPath")
        steam_install_path = os.path.normpath(steam_install_path)
        winreg.CloseKey(hkey)
        return steam_install_path
    except WindowsError:
        print("Error: Steam not found")
        input("Press any key to exit...")
        return None

def get_vrchat_install_path(steam_install_path):
    vrchat_steam_id = "438100"
    steam_library_folders_path = os.path.join(steam_install_path, "steamapps", "libraryfolders.vdf")

    try:
        with open(steam_library_folders_path, "r") as steam_library_folders_file:
            for line in steam_library_folders_file:
                match = re.search(r'"path"\s+"([^"]+)"', line)
                if match:
                    vrchat_steam_library_root_path = os.path.normpath(match.group(1))
                    break
    except IOError:
        print("Error: Steam library folders not found")
        input("Press any key to exit...")
        return None

    vrchat_app_manifest_path = os.path.join(vrchat_steam_library_root_path, "steamapps", f"appmanifest_{vrchat_steam_id}.acf")

    try:
        with open(vrchat_app_manifest_path, "r") as vrchat_app_manifest_file:
            for line in vrchat_app_manifest_file:
                match = re.search(r'"installdir"\s+"([^"]+)"', line)
                if match:
                    vrchat_install_path = os.path.join(steam_install_path, "steamapps", "common", match.group(1))
                    break
    except IOError:
        print("Error: VRChat not found")
        input("Press any key to exit...")
        return None

    return vrchat_install_path

if __name__ == "__main__":
    steam_install_path = get_steam_install_path()
    if steam_install_path:
        vrchat_install_path = get_vrchat_install_path(steam_install_path)
        if vrchat_install_path:
            print(f"VRChat install path: {vrchat_install_path}")

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment