首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过steam://rungameid/#获取启动蒸汽游戏后的进程Id或进程名称

通过steam://rungameid/#获取启动蒸汽游戏后的进程Id或进程名称
EN

Stack Overflow用户
提问于 2017-03-07 23:19:59
回答 4查看 2.6K关注 0票数 1

有没有办法获取通过以下方式启动的Steam游戏的进程名称/id:

代码语言:javascript
复制
Process.Start("steam://rungameid/#");

不出所料,上述方法返回Steam.exe。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-04-06 15:36:03

每个游戏在注册表的HKCU\SOFTWARE\Valve\Steam\Apps下都有一个注册表项

您应该能够从那里检查游戏的Installed值,然后使用steam://rungameid/#运行游戏,然后等待RunningUpdating值更改为1,然后再次等待0

这使得跟踪游戏执行成为可能,但是,您仍然不能直接获得游戏的进程id。

票数 3
EN

Stack Overflow用户

发布于 2018-03-31 12:03:17

这是一个古老的问题,但我刚刚做完了同样的事情(对于一个与您正在工作的项目有点相似的项目)。您可以使用System.Management中的ManagementObjects来查找进程的ParentId。如果您正在启动Steam,您将拥有Steam的进程Id,尽管按照您当前启动游戏的方式,您将需要查找Steam的进程Id。

你会发现每个游戏通常会产生2-3个不同的子进程。steam覆盖,webclienthelper,然后是游戏本身(可能还有另一个游戏的启动器)。但是,它们都应该是Steam进程的子进程,并且所有进程都应该显示在找到的进程列表中。

它看起来像这样。

代码语言:javascript
复制
List<Process> procs = Process.GetProcesses();
Process steam = procs.Find(x => x.ProcessName == "Steam");
int steamId = steam.Id;

foreach (var proc in procs)
{
    using (ManagementObject mo = new ManagementObject($"win32_process.handle='{proc.Id}'"))
    {
        if (mo != null)
        {
            try
            {
                mo.Get();
                int parentPid = Convert.ToInt32(mo["ParentProcessId"]);
                if (parentPid == steamId)
                {
                    Console.WriteLine($"{proc.ProcessName} is running as a child to {mo["ParentProcessId"]}");
                }
            }
            catch (Exception ex)
            {
                // the process ended between polling all of the procs and requesting the management object
            }
        }
    }
}
票数 2
EN

Stack Overflow用户

发布于 2017-03-07 23:31:39

一般来说,不是。

Steam只使用一个自定义URI前缀,它允许您指定哪个应用程序将为该请求提供服务。但是它不会为每个游戏创建一个新的前缀-相反,它是由steam.exe处理的,它决定实际运行什么应用程序。

Steam本身当然会跟踪它运行的游戏,但我假设它只是简单地跟踪它们的进程it,可能会受到Steam集成或Steam overlay注入的一些影响,以跟踪使用启动器的游戏。我不认为有任何简单的方法来保存这些信息,如果你不愿意摆弄其他应用程序的隐私。

在某些情况下,您可能有其他解决方案;例如,如果您不介意同时运行多个Steam游戏,您可以尝试查找具有Steam overlay的所有进程,但这些都是相当具体的-它们可能对您很有效,但对其他用户无效。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42651987

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档