Reutilizando o ícone do aplicativo .NET
-
20-09-2019 - |
Pergunta
Como posso reutilizar o ícone do aplicativo de dentro do meu aplicativo para não precisar incorporá -lo duas vezes (uma vez para o ícone do aplicativo e uma vez para uso interno)?
Solução
Você pode lê -lo de volta através de chamadas P/Interop. Vai algo assim:
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
}
Além disso, as assinaturas nativas são:
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);
}
Outras dicas
Parece mais fácil de usar Icon.extraTassociatedicon, conforme descrito nesta pergunta relacionada:Evitando recursos de ícones duplicados em um projeto .NET (C#)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow