C#一种变通的程序与窗口使用同一图标资源的方法
2010-03-14 14:16
483 查看
public MainForm() { InitializeComponent(); this.Icon = Win32.GetIcon(); } public class Win32 { [DllImport("shell32.dll", EntryPoint = "ExtractIcon")] public static extern int ExtractIcon(IntPtr hInst, string lpFileName, int nIndex); [DllImport("shell32.dll", EntryPoint = "SHGetFileInfo")] public static extern IntPtr SHGetFileInfo(string pszPath, uint dwFileAttribute, ref SHFILEINFO psfi, uint cbSizeFileInfo, uint Flags); [DllImport("User32.dll", EntryPoint = "DestroyIcon")] public static extern int DestroyIcon(IntPtr hIcon); [StructLayout(LayoutKind.Sequential)] public struct SHFILEINFO { public IntPtr hIcon; public IntPtr iIcon; public uint dwAttributes; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)] public string szDisplayName; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)] public string szTypeName; }; public static Icon GetIcon() { Icon RetrunIco; Win32.SHFILEINFO shfi = new Win32.SHFILEINFO(); try { FileInfo fi = new FileInfo(Application.ExecutablePath); //获得图标 Win32.SHGetFileInfo(Application.ExecutablePath, (uint)0x80, ref shfi, (uint)System.Runtime.InteropServices.Marshal.SizeOf(shfi), (uint)(0x100 | 0x400)); //取得Icon和TypeName RetrunIco = (Icon)Icon.FromHandle(shfi.hIcon).Clone(); Win32.DestroyIcon(shfi.hIcon); return RetrunIco; //销毁图标 } catch { return null; } } }
相关文章推荐
- 【C#】如何让多个或全部窗口使用同一个图标(icon),减小程序体积
- 一种Java Web程序资源的优化方法
- Win10设置点击任务栏程序图标进行窗口切换的方法
- [转]使用C#打开新窗口关闭旧窗口的方法;winform中防止重复打开多个相同子窗体
- C# 使用17方法编写Hello World程序(语法深度)
- C#程序中使用DataView的ToTable方法实现distinct功能
- C# 窗口程序运行期间,修改图标,模拟闪动的效果
- 编写高质量代码改善C#程序的157个建议[为泛型指定初始值、使用委托声明、使用Lambda替代方法和匿名方法]
- 编写高质量代码改善C#程序的157个建议——建议37:使用Lambda表达式代替方法和匿名方法
- 微信小程序使用字体图标的方法
- C#程序加壳的方法(使用Sixxpack) [转载]
- 一种不使用字符串检验一个整数是否包含一个整数的c#实现方法
- c#实现程序启动唯一实例的一种方法
- 一种Java Web程序资源的优化方法
- C# 2.0:使用匿名方法、迭代程序和局部类来创建优雅的代码
- C# 使用MarshalByRefObject跨程序调用方法
- 编写高质量代码改善C#程序的157个建议——建议101:使用扩展方法,向现有类型“添加”方法
- 编写高质量代码改善C#程序的157个建议[正确操作字符串、使用默认转型方法、却别对待强制转换与as和is]
- C#使用位图作为窗口图标icon
- C#程序加壳的方法(使用Sixxpack)