我正在尝试获取使用给定ProcessID运行的
Windows 8应用程序的名称.
我可以访问wwahost,这是正在运行的进程的真实名称,但我想获取WWHOST实际运行的应用程序的名称.
我可以访问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); } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。