¿Obtener iconos de programas en C#?

Tengo este código que capturará los nombres, pero ¿cómo obtengo el ícono de cada programa?

 string SoftwareKey = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Installer\\UserData\\S-1-5-18\\Products";
        RegistryKey rk = default(RegistryKey);
        rk = Registry.LocalMachine.OpenSubKey(SoftwareKey);

        string sname = string.Empty;

        foreach (string skname in rk.GetSubKeyNames())
        {

            try
            {
                sname = Registry.LocalMachine.OpenSubKey(SoftwareKey).OpenSubKey(skname).OpenSubKey("InstallProperties").GetValue("DisplayName").ToString();
                string Inst1 = Registry.LocalMachine.OpenSubKey(SoftwareKey).OpenSubKey(skname).OpenSubKey("InstallProperties").GetValue("InstallLocation").ToString();
                int n = dataGridView1.Rows.Add();
                dataGridView1.Rows[n].Cells[2].Value = sname; 
                dataGridView1.Rows[n].Cells[3].Value = Inst1;
            }
            catch (Exception ex)
            {
                //MessageBox.Show(ex.Message);
            }
        }

preguntado el 04 de julio de 12 a las 07:07

2 Respuestas

No soy consciente de eso InstallProperties le dará el ejecutable instalado (ya que, de hecho, un instalador podría instalar varios archivos ejecutables).

Si tiene un medio para determinar el ejecutable correcto (incluyendo tal vez la enumeración de los archivos .exe en InstallLocation), luego puede tomar el ícono predeterminado de ese .exe.

Para más detalles, ver

Obtener el icono de archivo utilizado por Shell

ACTUALIZACIÓN

El siguiente código es no probado pero debería acercarte bastante:

string Inst1 = registry.LocalMachine.OpenSubKey(SoftwareKey).OpenSubKey(skname).OpenSubKey("InstallProperties").GetValue("InstallLocation").ToString();

foreach (string file in Directory.GetFiles(Inst1, "*.exe")) 
{
    string filePath = Path.Combine(Inst1, file);
    Icon  result = Icon.ExtractAssociatedIcon(filePath);
    // If result is not null, you have an icon.
}

contestado el 23 de mayo de 17 a las 13:05

Estoy usando C# y... ¿cómo hago eso? - cazador mitchell

Se agregó código para mostrar cómo buscar archivos .exe en una carpeta determinada y extraer el ícono. No recuerdo de la parte superior de mi cabeza si Directory.GetFiles() devuelve solo el nombre del archivo o la ruta completa al archivo, por lo que es posible que no necesite el Path.Combine línea. Gracias a @ebad86 por el método conciso para obtener el ícono. - Eric J.

Prueba esto:

Icon  result = Icon.ExtractAssociatedIcon(filePath); 

Respondido 04 Jul 12, 07:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.