c# 如何检测 Netflix 是否正在运行

标签 c# netflix

我想检测 Netflix 是否正在运行。我正在使用 Windows 窗体应用程序。

Netflix 是一个由进程 WWAHost.exe 托管的 Metro 应用程序。我使用以下代码:

Process[] ps = Process.GetProcessesByName("WWAHost");
foreach(var p in ps)
{
  if(p.MainWindowTitle == "Netflix")
  {
    return true;
  }
}

代码在 Netflix 启动后运行大约 0.6 秒。 0.6 秒后,MainWindowTitle 包含一个空字符串。这意味着只有在 Netflix 启动后才能检测到它。

更新:实际上我的代码只有在 Netflix 最小化或启动时才有效(0.6 秒只是从开始开始)。

这是一个错误吗?有没有更好的方法来解决这个问题?

我的系统:Win10 1809,VS2015,.Net4.5.2

最佳答案

我没有看到 MainWindowTitle 的这种行为消失了,但这里有一个替代解决方案。如果您在运行 Netflix 应用程序的情况下查看 TaskManager,我们可以看到是的,它正在作为 wwahost.exe 运行,但它提供了一个命令行,可以轻松地将其识别为 Netflix 应用程序 -ServerName: Netflix.App.wwa.

enter image description here

因此,从您的 C# 应用程序中,您可以使用 WMI 提取进程命令行(为此您需要对 System.Management 的引用)。

这是一个例子:

class Program
{
    static void Main(string[] args)
    {
        var processes = Process
            .GetProcesses()
            .Where(a => a.IsNetflix());

        Console.ReadKey();
    }
}

static class Extensions
{
    public static bool IsNetflix(this Process process)
    {
        if (process.ProcessName.IndexOf("WWAHost", StringComparison.OrdinalIgnoreCase) == -1) return false;

        using (ManagementObjectSearcher searcher = new ManagementObjectSearcher($"SELECT CommandLine FROM Win32_Process WHERE ProcessId = {process.Id}"))
        using (ManagementObjectCollection objects = searcher.Get())
        {
            var managementObject = objects
                .Cast<ManagementBaseObject>()
                .SingleOrDefault();

            if (managementObject == null) return false;
            return managementObject["CommandLine"].ToString().IndexOf("netflix", StringComparison.OrdinalIgnoreCase) > -1;
        }
    }
}

关于c# 如何检测 Netflix 是否正在运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54280947/

相关文章:

c# - 执行位于远程机器上的批处理文件

C# 将不同版本的程序集加载到同一个项目

docker - 在 Windows 8.1 上运行 netflixoss Docker

java - 为什么 Spring MVC 4 和 Hystrix 集成在没有 Spring boot API 的情况下无法工作?

java - 如何使用 Jackson 将 Java Map 转换为组合的 POJO?

java - 如何启用 Hystrix DEBUG 级别的日志记录

c# - sc.exe如何设置对windows服务的描述?

c# - 在车辆路径问题中使用图论

c# - 如何从IPageStructure中找出父页面Id? (复合C1)

netflix - 编程竞赛(有奖)