如何在C/C++中以编程方式查找"已保存的游戏"文件夹?

use*_*461 2 c c++ windows winapi game-development

我正在写一个游戏.我打算将保存存储在"已保存的游戏"目录中.

如何以编程方式查找"已保存的游戏"文件夹的位置?

它需要在非英语Windows上运行.像黑客一样%USERPROFILE%\Saved Games不是一种选择.

use*_*461 10

可以使用自Windows Vista和Windows Server 2008以来可用的SHGetKnownFolderPath()函数找到已保存的游戏目录.

请注意,该FOLDERID_SavedGames参数是C++引用.替换&FOLDERID_SavedGames为从C代码调用.

在我发现的第一个在线MSVC编译器上成功测试:

https://rextester.com/l/cpp_online_compiler_visual

#define WINVER 0x0600
#define _WIN32_WINNT 0x0600

#include <stdio.h>
#include <shlobj.h>
#include <objbase.h>

#pragma comment(lib, "shell32.lib")
#pragma comment(lib, "ole32.lib")

int main(void)
{
    PWSTR path = NULL;
    HRESULT r;

    r = SHGetKnownFolderPath(FOLDERID_SavedGames, KF_FLAG_CREATE, NULL, &path);
    if (path != NULL)
    {
        printf("%ls", path);
        CoTaskMemFree(path);
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)