Jak mogę ponownie użyć ikony aplikacji z poziomu mojej aplikacji, aby nie trzeba było jej dwukrotnie osadzać (raz dla ikony aplikacji i raz dla wewnętrznego użycia)?Ponowne użycie ikony aplikacji .NET
5
A
Odpowiedz
4
Można go odczytać za pomocą połączeń P/Interop. To idzie tak:
static Icon GetAppIcon() {
var fileName = Assembly.GetEntryAssembly().Location
System.IntPtr hLibrary = NativeMethods.LoadLibrary(fileName);
if (!hLibrary.Equals(System.IntPtr.Zero)) {
System.IntPtr hIcon = NativeMethods.LoadIcon(hLibrary, "#32512");
if (!hIcon.Equals(System.IntPtr.Zero)) {
return Icon.FromHandle(hIcon);
}
}
return null; //no icon was retrieved
}
dodatkowo podpisy rodzime są:
private static class NativeMethods {
[DllImport("user32.dll", CharSet = CharSet.Unicode)]
static extern internal IntPtr LoadIcon(IntPtr hInstance, string lpIconName);
[DllImport("kernel32.dll", CharSet = CharSet.Unicode)]
static extern internal IntPtr LoadLibrary(string lpFileName);
}
6
Wydaje najłatwiejsze w użyciu Icon.ExtractAssociatedIcon, jak wskazano w tym powiązane pytanie: Avoiding duplicate icon resources in a .NET (C#) project