我目前在C#Windows应用程序中使用WM_GETICON
消息来获取与hWnd
相关联的图标,但它不会为我提供ApplicationFrameHost
的图标(Windows Store应用商店) )进程(这是有道理的,因为它隐藏了实际的应用程序)。
以下是我目前使用的代码,适用于“普通”应用:
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)]
static extern IntPtr SendMessage(IntPtr hWnd, int msg, int wParam, int lParam);
public static IntPtr GetAppIcon(IntPtr hwnd)
{
var iconHandle = SendMessage(hwnd, WM_GETICON, ICON_BIG, 0);
if (iconHandle == IntPtr.Zero)
iconHandle = SendMessage(hwnd, WM_GETICON, ICON_SMALL, 0);
if (iconHandle == IntPtr.Zero)
iconHandle = SendMessage(hwnd, WM_GETICON, ICON_SMALL2, 0);
return iconHandle;
}
获取ApplicationFrameHost.exe
图标对我没有帮助。似乎是这样的图标,因为a)我可以在任务栏中看到它,b)我也可以在任务管理器中看到它。
我如何获得此图标?
答案 0 :(得分:1)
今天没有好的答案。
您需要确定应用程序的身份。有关详情,请参阅您的其他帖子=> How to get the "Application Name" from hWnd for Windows 10 Store Apps (e.g. Edge)
完成后,您可以使用PackageManager.FindPackage(pkgfullname)获取Windows.ApplicationModel.Package,然后使用Package.GetAppListEntriesAsync获取AppListEntry对象的列表,包中的每个应用程序1个。对于每个,请使用.DisplayInfo.DisplayName,.Description和.GetLogo()。
警告:这会给多应用程序包(MAP)带来问题,因为您在程序包中有多个应用程序。您无法直接查询应用程序的AppListEntry,也无法告知AppListEntry的应用程序标识。您知道该流程的AUMID = 1,但GetAppListEntriesAsync()可能会返回4个值的列表,但您无法确定您要查找的是哪个。