通过使用TaskbarManager.SetApplicationIdForSpecificWindow(IntPtr windowHandle,String appID) 方法可以修改窗口的AppID。但是目前下载的Windows API 1.0.1 版本有些小问题,使得SetApplicationIdForSpecificWindow 方法根本不起作用。根源就在TaskbarNativeMethods.cs 的SetWindowProperty 方法,没有对pv 进行任何赋值操作,导致propStore 根本没有值,所以在该方法中增加pv.SetString(value),重新编译并替换掉原来的 Microsoft.WindowsAPICodePack.Shell.dll 即可:
internal static void SetWindowProperty(IntPtr hwnd, PropertyKey propkey,
string value)
{
// Get the IPropertyStore for the given window handle
IPropertyStore propStore = GetWindowPropertyStore(hwnd);
// Set the value
PropVariant pv = new PropVariant();
pv.SetString(value);
propStore.SetValue(ref propkey, ref pv);
// Dispose the IPropertyStore and PropVariant
Marshal.ReleaseComObject(propStore);
pv.Clear();
}
程序改好后,就可以使用SetApplicationIdForSpecificWindow(IntPtr, String) 干活了:
Window newWindow = new TestWindow();
newWindow.Show();
WindowInteropHelper helper = new WindowInteropHelper(newWindow);
IntPtr ptr = helper.Handle;
TaskbarManager.Instance.SetApplicationIdForSpecificWindow(ptr, "AppID");
修改了TestWindow 的AppID,两个窗口的任务栏图标才真正的完成了分离:
通过SetOverlayIcon(IntPtr, Icon, String) 来设置指定窗口(TestWindow)的Overlay Icon:
TaskbarManager.Instance.SetOverlayIcon(ptr, icon, "Overlay Icon Demo");
分离后再来看看效果,只显示MainWindow 图标:
两个窗口的图标都显示:
出处:http://www.cnblogs.com/gnIElee/
标签: