C#, WPF. Как изменить значок на панели задач ярлыка
Мне нужно создать ярлык с параметрами. Я сделал это так:
using System;
using System.IO;
using System.Runtime.InteropServices;
using System.Runtime.InteropServices.ComTypes;
using System.Text;
public void createShortcut()
{
IShellLink link = (IShellLink)new ShellLink();
// setup shortcut information
link.SetDescription("My shortcut");
link.SetWorkingDirectory(pathToExeFolder);
link.SetPath(pathToExe);
link.SetArguments("param_1");
link.SetIconLocation(pathToExeFolder + "\\ShortcutIcon.ico", 0);
// save it
IPersistFile file = (IPersistFile)link;
string desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
file.Save(System.IO.Path.Combine(desktopPath, "MyShortcut.lnk"), false);
}
[ComImport]
[Guid("00021401-0000-0000-C000-000000000046")]
internal class ShellLink
{
}
[ComImport]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
[Guid("000214F9-0000-0000-C000-000000000046")]
internal interface IShellLink
{
void GetPath([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszFile, int cchMaxPath, out IntPtr pfd, int fFlags);
void GetIDList(out IntPtr ppidl);
void SetIDList(IntPtr pidl);
void GetDescription([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszName, int cchMaxName);
void SetDescription([MarshalAs(UnmanagedType.LPWStr)] string pszName);
void GetWorkingDirectory([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszDir, int cchMaxPath);
void SetWorkingDirectory([MarshalAs(UnmanagedType.LPWStr)] string pszDir);
void GetArguments([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszArgs, int cchMaxPath);
void SetArguments([MarshalAs(UnmanagedType.LPWStr)] string pszArgs);
void GetHotkey(out short pwHotkey);
void SetHotkey(short wHotkey);
void GetShowCmd(out int piShowCmd);
void SetShowCmd(int iShowCmd);
void GetIconLocation([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszIconPath, int cchIconPath, out int piIcon);
void SetIconLocation([MarshalAs(UnmanagedType.LPWStr)] string pszIconPath, int iIcon);
void SetRelativePath([MarshalAs(UnmanagedType.LPWStr)] string pszPathRel, int dwReserved);
void Resolve(IntPtr hwnd, int fFlags);
void SetPath([MarshalAs(UnmanagedType.LPWStr)] string pszFile);
}
Значок ярлыка и значок исполняемого файла отличаются. Когда я нажимаю на ярлык, на панели задач появляется значок ярлыка. Но я хочу, чтобы значок исполняемого файла появился на панели задач. Я пытался изменить значок ярлыка таким образом
private void Button_Click(object sender, RoutedEventArgs e)
{
Icon img = new Icon("Resources/ExeIcon.ico");
Bitmap bitmap = img.ToBitmap();
IntPtr hBitmap = bitmap.GetHbitmap();
ImageSource wpfBitmap =
Imaging.CreateBitmapSourceFromHBitmap(
hBitmap, IntPtr.Zero, Int32Rect.Empty,
BitmapSizeOptions.FromEmptyOptions());
this.Icon = wpfBitmap;
}
Но это не сработало. Значок на панели задач не изменился. Я также попытался изменить реестр:
HKEY_CLASSES_ROOT
Applications
example.exe
IsHostApp
Это сработало. Когда я запускаю ярлык, на панели задач появляется значок исполняемого файла. Но это работает, только если ярлыки создаются без параметров. Кто-нибудь знает, как это сделать для ярлыков с параметрами?