¿Cómo puedo usar las imágenes dentro de shell32.dll en mi proyecto de C#?¿Cómo puedo usar las imágenes dentro de shell32.dll en mi proyecto de C#?
Respuesta
se puede extraer iconos desde un archivo DLL con este código:
public class IconExtractor
{
public static Icon Extract(string file, int number, bool largeIcon)
{
IntPtr large;
IntPtr small;
ExtractIconEx(file, number, out large, out small, 1);
try
{
return Icon.FromHandle(largeIcon ? large : small);
}
catch
{
return null;
}
}
[DllImport("Shell32.dll", EntryPoint = "ExtractIconExW", CharSet = CharSet.Unicode, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
private static extern int ExtractIconEx(string sFile, int iIndex, out IntPtr piLargeVersion, out IntPtr piSmallVersion, int amountIcons);
}
...
form.Icon = IconExtractor.Extract("shell32.dll", 42, true);
por supuesto que necesita saber el índice de la imagen en el archivo DLL ...
Algunos de ellos están disponibles en %Program Files%\Microsoft Visual Studio 10.0\Common7\VS2010ImageLibrary
- para los demás, que había necesidad de hablar con abogados de Microsoft acerca de las licencias para la redistribución de la aplicación
This thread en los foros de desarrolladores de MSDN ofrece una solución:
La forma típica de implementar esto en .NET es usar los gráficos provistos en el archivo ZIP ubicado en C: \ Archivos de programa \ Microsoft Visual Studio X \ Common7 \ VS200XImageLibrary.
No indica qué versión de Visual Studio tiene instalada, pero tendrá que reemplazar "200X" con su número de versión.
Vea este código. Será ayuda
public class ExtractIcon
{
[DllImport("Shell32.dll")]
private static extern int SHGetFileInfo(
string pszPath, uint dwFileAttributes,
out SHFILEINFO psfi, uint cbfileInfo,
SHGFI uFlags);
private struct SHFILEINFO
{
public SHFILEINFO(bool b)
{
hIcon = IntPtr.Zero; iIcon = 0; dwAttributes = 0; szDisplayName = ""; szTypeName = "";
}
public IntPtr hIcon;
public int iIcon;
public uint dwAttributes;
public string szDisplayName;
public string szTypeName;
};
private enum SHGFI
{
SmallIcon = 0x00000001,
OpenIcon = 0x00000002,
LargeIcon = 0x00000000,
Icon = 0x00000100,
DisplayName = 0x00000200,
Typename = 0x00000400,
SysIconIndex = 0x00004000,
LinkOverlay = 0x00008000,
UseFileAttributes = 0x00000010
}
public static Icon GetIcon(string strPath, bool bSmall, bool bOpen)
{
SHFILEINFO info = new SHFILEINFO(true);
int cbFileInfo = Marshal.SizeOf(info);
SHGFI flags;
if (bSmall)
flags = SHGFI.Icon | SHGFI.SmallIcon;
else
flags = SHGFI.Icon | SHGFI.LargeIcon;
if (bOpen) flags = flags | SHGFI.OpenIcon;
SHGetFileInfo(strPath, 0, out info, (uint)cbFileInfo, flags);
return Icon.FromHandle(info.hIcon);
}
}
- 1. ¿Cómo se obtienen los iconos de shell32.dll?
- 2. ¿Puedo usar mi proyecto Ninject .NET dentro de Orchard CMS?
- 3. Cómo usar COM dll en mi programa C++
- 4. Cómo agregar dll en el proyecto C#
- 5. usando C# dll en proyecto C++
- 6. ¿Cómo puedo usar un dll C# (managed) que no tengo?
- 7. Cómo usar C++/CLI dentro de la aplicación C#
- 8. Usando C++ DLL en el proyecto C#
- 9. Cómo usar C# Dll en vC++?
- 10. Cómo usar LAME (lame_enc.dll) en mi sitio web de C#
- 11. ¿Cómo incluyo una DLL de SQLite en mi proyecto de C++?
- 12. paquete de archivos xml dentro de dll, C#
- 13. ¿Cómo puedo importar DLL de una clase C++ dentro de un espacio de nombres
- 14. Cómo minimizar un tamaño de DLL del proyecto ASP.NET C#?
- 15. Cómo usar un dll C# en IronPython
- 16. Compilar un proyecto C# en un dll
- 17. ¿Cómo puedo usar GetNextWindow() en C#?
- 18. Hacer una DLL de un proyecto C#?
- 19. ¿MSTest.exe no copia todas las DLL de proyecto necesarias?
- 20. dependencia de msvcr90.dll en el proyecto VS 2005 C++
- 21. Usar DLL en C sin lib
- 22. ¿Cómo puedo encontrar todas las variables estáticas en mi proyecto C#?
- 23. ¿Cómo llamar a una función definida en mi exe dentro de mi DLL?
- 24. Agregar DLL de C++ a un proyecto de C#
- 25. ¿Cómo centrar verticalmente las imágenes dentro de un elemento LI?
- 26. no puedo encontrar C/C++ en las propiedades del proyecto
- 27. ¿Cómo puedo usar las características de C++ 11 en Clang?
- 28. ¿Cómo puedo leer/cargar imágenes en C++?
- 29. C# Cómo usar las interfaces
- 30. ¿Cómo puedo usar un archivo de mi proyecto en otro archivo?