Created
February 2, 2023 02:09
-
-
Save Kamilake/742f84350bd274c46bc6543a7066a4f9 to your computer and use it in GitHub Desktop.
Get Steam Game Installation location with C
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Python