Làm cách nào để sử dụng hình ảnh trong shell32.dll trong dự án C# của tôi?Làm cách nào để sử dụng hình ảnh trong shell32.dll trong dự án C#?
Trả lời
Bạn có thể trích xuất các biểu tượng từ một DLL với mã này:
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);
Tất nhiên bạn cần phải biết chỉ số của hình ảnh trong các DLL ...
Một số trong số họ có sẵn trong %Program Files%\Microsoft Visual Studio 10.0\Common7\VS2010ImageLibrary
- cho người khác, bạn sẽ cần phải nói chuyện với luật sư của Microsoft về việc cấp phép cho họ để phân phối lại trong ứng dụng của bạn
This thread trên các diễn đàn phát triển MSDN cung cấp một giải pháp:
Cách điển hình để thực hiện các điều này trong .NET là sử dụng đồ họa được cung cấp trong tệp ZIP có tại C: \ Program Files \ Microsoft Visual Studio X \ Common7 \ VS200XImageLibrary.
Bạn không nêu phiên bản Visual Studio nào bạn đã cài đặt nhưng bạn cần phải thay thế "200X" bằng số phiên bản của mình.
Xem mã này. Nó sẽ trợ giúp
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. sử dụng C# dll trong dự án C++
- 2. Làm thế nào để sử dụng C# dll trong vC++?
- 3. Thêm C++ DLL vào dự án C#
- 4. Làm thế nào để sử dụng DLL bên ngoài trong dự án CMake
- 5. Làm thế nào để tạo một dll như shell32.dll có chứa các biểu tượng
- 6. Làm thế nào để quản lý các hằng số dự án trong một dự án bằng cách sử dụng C#?
- 7. Cách sử dụng lớp XDocument trong Dự án Silverlight (C#)
- 8. Cách sử dụng C# dll trong IronPython
- 9. Làm cách nào để chuyển đổi dự án Thư viện lớp C# thành Dự án Silverlight?
- 10. Hình ảnh tham khảo được lưu trữ trong dll bên ngoài bằng cách sử dụng wpf
- 11. một DLL, nhiều dự án?
- 12. Làm cách nào để sử dụng Dự án Elysium?
- 13. Gọi Shell32.dll từ .NET Windows Service
- 14. Sử dụng cpp-netlib trong dự án C++ trong Windows
- 15. Trong thư viện có thể sử dụng lại trong nhà - sử dụng lại dưới dạng dll hoặc làm dự án?
- 16. Làm cách nào để sử dụng thư viện Tăng cường trong một dự án qmake?
- 17. Cách tạo C# DLL để sử dụng trong PHP
- 18. Làm thế nào để sử dụng Scintilla .NET trong dự án C#?
- 19. Cách tạo DLL sẽ được sử dụng trong C#
- 20. Sử dụng Visual C++ DLL trong Borland C cũ?
- 21. Làm thế nào để che giấu hình ảnh trong C# bằng cách sử dụng ITextSharp.dll?
- 22. Làm cách nào để sử dụng macro TRACE trong các dự án không phải MFC?
- 23. Xây dựng dự án C++ sử dụng cào trong Eclipse
- 24. Android - Thêm hình ảnh vào dự án
- 25. Gỡ lỗi dự án VB6 gọi là .Net (C#) dll
- 26. Qt Creator, làm cách nào để thêm một dự án C++ vào một dự án khác?
- 27. Tạo một DLL trong C và liên kết nó từ một dự án C++
- 28. Làm cách nào để tham khảo dự án Thư viện lớp C# trong Visual Studio 2010?
- 29. Làm thế nào để xử lý tương tác dự án C# - C++ đúng cách?
- 30. Làm thế nào để đặt một dll vào dự án của tôi - visual studio C# 2010