当前位置:编程学习 > C#/ASP.NET >>

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# ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,