c# – 如何获取正在运行的HTML Windows 8应用程序(不是WWHOST)的名称

我正在尝试获取使用给定ProcessID运行的 Windows 8应用程序的名称.
我可以访问wwahost,这是正在运行的进程的真实名称,但我想获取WWHOST实际运行的应用程序的名称.

我在讨论中看到了这个帖子http://social.msdn.microsoft.com/Forums/en-US/windowsgeneraldevelopmentissues/thread/c9665bf4-00e4-476c-badb-37126efd3f4b/,但没有具体的答案.

有任何想法吗 ?

解决方法

你想拨打 GetApplicationUserModelId

提供的示例应用程序允许您传入PID并获取有关应用程序的信息.例如:

C:\src\GetAppInfo\Debug>GetAppInfo.exe 7400
Process 7400 (handle=00000044)
Microsoft.BingWeather_8wekyb3d8bbwe!App

要移植到C#,

const int QueryLimitedinformation = 0x1000;
   const int ERROR_INSUFFICIENT_BUFFER = 0x7a;
   const int ERROR_SUCCESS = 0x0;

   [DllImport("kernel32.dll")]
   internal static extern IntPtr OpenProcess(int dwDesiredAccess,bool bInheritHandle,int dwProcessId);

   [DllImport("kernel32.dll")]
   static extern bool CloseHandle(IntPtr hHandle);

    [DllImport("kernel32.dll")]
    internal static extern Int32 GetApplicationusermodelId(
        IntPtr hProcess,ref UInt32 AppModelIDLength,[MarshalAs(UnmanagedType.LPWStr)] StringBuilder sbAppusermodelID);

然后,您的代码应如下所示:

if (sProcessName.ToLower().Contains("wwahost") 
            && ((Environment.Osversion.Version.Major == 6) && (Environment.Osversion.Version.Minor > 1)))
            {
                IntPtr ptrProcess = OpenProcess(QueryLimitedinformation,false,iPID);
                if (IntPtr.Zero != ptrProcess)
                {
                    uint cchLen = 130; // Currently APPLICATION_USER_MODEL_ID_MAX_LENGTH = 130
                    StringBuilder sbName = new StringBuilder((int)cchLen);
                    Int32 lResult = GetApplicationusermodelId(ptrProcess,ref cchLen,sbName);
                    if (ERROR_SUCCESS == lResult)
                    {
                        sResult = sbName.ToString();
                    }
                    else if (ERROR_INSUFFICIENT_BUFFER == lResult)
                    {
                        sbName = new StringBuilder((int)cchLen);
                        if (ERROR_SUCCESS == GetApplicationusermodelId(ptrProcess,sbName))
                        {
                            sResult = sbName.ToString();
                        }
                    }
                    CloseHandle(ptrProcess);
                }
            }

相关文章

目录简介使用JS互操作使用ClipLazor库创建项目使用方法简单测...
目录简介快速入门安装 NuGet 包实体类User数据库类DbFactory...
本文实现一个简单的配置类,原理比较简单,适用于一些小型项...
C#中Description特性主要用于枚举和属性,方法比较简单,记录...
[TOC] # 原理简介 本文参考[C#/WPF/WinForm/程序实现软件开机...
目录简介获取 HTML 文档解析 HTML 文档测试补充:使用 CSS 选...