C++ Qt - 编程方式检查Steam游戏是否正在运行

3
我想知道在Windows上是否有一种程序化的方式来检查Steam游戏是否正在运行,通过其steamid进行识别。我知道每个游戏都有其注册表键,在其中有一个Running值。然而,这个值似乎并不适用于所有游戏。例如,对于Undertale,它可以立即更新开启和关闭状态。问题是Rocket League的运行值在开启时并不会改变。我不知道这个问题是否发生在其他游戏中,或者它只发生在Rocket League中,但在这种情况下,这个解决方案似乎不够好。

我之所以问这个问题,是因为从外部程序运行游戏只能检索到steam.exe进程ID,而无法获取实际的游戏进程ID,所以我被卡住了需要手动检查。

谢谢!


你确定Rocket League的值没有改变吗?也许你需要将游戏置于前台,你是手动查找该值还是记录了它? - Holt
是的,我很确定。游戏是全屏显示的,但我怀疑这不会改变它的状态。我每次都手动检查值,但我的软件实际上记录了它,而且它从未在运行了2分钟后更改为 "运行中"(我没有尝试超过2分钟)。 - Roukira
显然它确实在运行,但只有一秒钟(在窗口弹出之前)。 - Roukira
Rocket League是一款Steam游戏还是外部游戏? - Holt
这是一款Steam游戏,我找到了更好的方法来跟踪正在运行的Steam游戏。如果你感兴趣,我会在几分钟内回答我的问题。 - Roukira
2个回答

8

对于那些想知道的人,我找到了一个解决方案。在 HKEY_CURRENT_USER\Software\Valve\Steam 中有一个 RunningAppID 值,它将当前运行的游戏 steamid 作为值。这个方法对我来说一直是100%可靠的,所以我相信这就是我一直寻找的解决方案。希望它也能帮助到你。


有没有其他的方法,比如通过带参数的命令运行一些命令,比如 steam --currently-running?我问这个问题是因为我想在Linux上使用它。我还尝试过使用注册表,因为目前我需要它来运行在质子下运行的游戏。我已经找到了这个主题 https://www.reddit.com/r/linux_gaming/comments/9ar9ru/how_do_i_access_the_registry_editor_in_proton/ ,但看起来质子注册表没有你所说的那个键。 - Ashark

0

对于那些寻找VR应用程序(被SteamVR掩盖)的人,请尝试列举HKCU\SOFTWARE\Value\Steam\Apps。每个条目都包含一个Running键,指示相应的应用程序是否正在运行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接