C# 模仿 IBOX 程序管理 (简易版)
C# IBOX 程序管理简易版,该程序是2009年闲来无事做的程序,本来是想做成网络程序下载器的,结果做成程序管理器了。
今天整理以前代码的时候发现了这个东东,发给刚入门不久的.net 童鞋学习用,希望笑纳。
里面会涉及一些API调用,图标布局算法问题,系统消息机制的拦截,动态添加事件处理。可能对于刚学习不久的有点困难。
先上一个主界面截图:(图像被我压缩了不然的有1.4MB,所以有点模糊
拖入增加文件或程序。。。
手动添加文件或程序
选择删除程序快捷方式
隐藏起来的快捷方式
显示隐藏的程序
程序管理界面
以上为程序的部分截图,下面贴出核心代码含注释。
#region [获取图标和可以拖动窗体]
//调用系统API获取程序的图标信息
[System.Runtime.InteropServices.DllImport("shell32.dll", EntryPoint = "ExtractAssociatedIcon")]
private static extern IntPtr ExtractAssociatedIconA(
IntPtr hInst,
[System.Runtime.InteropServices.MarshalAs(
System.Runtime.InteropServices.UnmanagedType.LPStr)] string lpIconPath,
ref int lpiIcon);
//private static IntPtr hInst;
private const int WM_NCHITTEST = 0x84;//客户区消息
private const int HTCLIENT = 0x1;
private const int HTCAPTION = 0x2;
private const int WM_NCLBUTTONDBLCLK = 0xA3;//双击消息
//窗体消息,拦截标题区域双击消息和窗体移动区域消息
protected override void WndProc(ref Message m)
{
switch (m.Msg)
{
case WM_NCHITTEST:
base.WndProc(ref m);
if ((int)m.Result == HTCLIENT)
m.Result = (IntPtr)HTCAPTION;
return;
// break;
case WM_NCLBUTTONDBLCLK:
if ((int)m.Result == WM_NCLBUTTONDBLCLK)
m.Result = (IntPtr)0xa1;
return;
}
base.WndProc(ref m);
}
/// <summary>
/// 获取图标
/// </summary>
public static Icon ExtractAssociatedIcon(string fileName)
{
if (File.Exists(fileName) || Directory.Exists(fileName))
{
int i = 0;
//根据文件路径获取图标指针
IntPtr hIcon = ExtractAssociatedIconA(new IntPtr(), fileName, ref i);
if (!hIcon.Equals(IntPtr.Zero))
{
//图标指针转换为ICO图标
return Icon.FromHandle(hIcon);
}
else
{
return null;
}
}
else
{
throw new Exception("加载某些文件失败!可能有些文件已不存在!\n【请在[-管理界面-]删除或者重新指定】");
}
 
补充:软件开发 , C# ,