2008-10-15 6 views

Répondre

39
Icon ico = Icon.ExtractAssociatedIcon(theProcess.MainModule.FileName); 
+2

'Process.MainModule' peut lancer' Win32Exception's sur les processus système ou entre des processus 32 bits et 64 bits. Voir [cette question] (http://stackoverflow.com/questions/9501771/how-to-avoid-a-win32-exception-when-accessing-process-mainmodule-filename-in-c) pour plus de détails. –

+1

En outre, mes icônes n'ont pas de transparence donnant des contours noirs laides:/ –

12

Ceci est un exemple d'implémentation d'une application console.

using System; 
using System.Drawing;   //For Icon 
using System.Reflection;  //For Assembly 

namespace ConsoleApplication 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      try 
      { 
       //Gets the icon associated with the currently executing assembly 
       //(or pass a different file path and name for a different executable) 
       Icon appIcon = Icon.ExtractAssociatedIcon(Assembly.GetExecutingAssembly().Location);     
      } 
      catch(ArgumentException ae) 
      { 
       //handle 
      }   
     } 
    } 
} 
+0

Correction, ce code le fait pour l'assemblage en cours ... non liés. Oh, et il te manque des parens. – TheSoftwareJedi

+0

Merci, j'aurais dû attraper ça :( – RobS

2

Utilisez la ExtractIconEx (et here) p/invoquer. Vous pouvez extraire des petites et grandes icônes de n'importe quel DLL ou exe. Shell32.dll lui-même a plus de 200 icônes qui sont très utiles pour une application Windows standard. Vous devez juste d'abord comprendre ce que l'index est pour l'icône (s) que vous voulez.

Modifier: J'ai fait une recherche rapide de SO et trouvé this. L'icône de l'index 0 est l'icône de l'application.

Questions connexes