我个人是比较喜欢封装一些需要安装在电脑上的软件的,封装后就是绿色版(携带版)
无需安装,即点即用,非常的方便

例如:

  1. pr、ps(虽然很大,但是出门在外,做一些小处理还是比较方便的,不需要在别人的电脑上安装即可使用,插 U 盘就可以)
  2. Chrome、有道翻译、Linux 连接工具 FTP、投屏软件、网易云音乐、某些录屏软件、火绒弹窗拦截、火绒剑、文件粉碎、鲁大师(去除无用功能,只保留主要功能) 一些小工具等

在封装的时候如何获取相应软件的图标呢?(有些软件是包含在安装目录里的),因为自己身为程序员,这种小事就自己动动手写嘛
之前有学过 C#的一些开发经验,所有就打算写一个

废话也不多说了,直接看正文

正文

打开 IDE Visual Studio 我的是 2012 的(Visual Studio 2012)

直接点击左边的新建项目

配置

创建完成后,第一时间肯定是先修改标题名啦(这里我就不截那么多图了)
然后再右边的解决方案资源管理器里将 Form1.cs 重命名为ForIcon.cs
注意右下角有很多选项,我先修改了软件标题信息

属性名属性值描述
(Name)ForIcon用于处理代码中对象的昵称
Text获取软件 ico 图标软件名称
TopMostTrue软件是否处于最顶层
StarPositonCenterScreen运行软件时,软件出现的位置
MinimizeBoxFalse是否显示最小化按钮
MaximizeBoxFalse是否显示最大化按钮
Icon(图片路径)软件图标
FormBorderStyleFixedDialog软件外观变化(FixedDialog: 禁止用户调整软件边框大小)
AllowDropTrue是否允许用户拖动文件到软件中,获取数据重点

添加事件

点击属性旁边的那个小闪电图标
找到DragDropDragEnter并在它俩的属性值处双击,跳入事件方法中

这时会跳到代码里,并且会自动创建两个方法(注释是我写的,并不是自动生成的)
此时DragDropDragEnter的属性值都会绑定这两个方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace ForIcon
{
public partial class ForIcon : Form
{
public ForIcon()
{
InitializeComponent();
}

// 拖入事件(拖入后松开鼠标时执行)
private void ForIcon_DragDrop(object sender, DragEventArgs e)
{

}

// 拖入事件(拖入时执行)
private void ForIcon_DragEnter(object sender, DragEventArgs e)
{

}
}
}

编码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace ForIcon
{
public partial class ForIcon : Form
{
public ForIcon()
{
InitializeComponent();
}

// 拖入事件(拖入后松开鼠标时执行)
private void ForIcon_DragDrop(object sender, DragEventArgs e)
{
// 获取拖入的文件路径
string File_Path = ((System.Array)e.Data.GetData(DataFormats.FileDrop)).GetValue(0).ToString();
// 判断后缀名
if (System.IO.Path.GetExtension(File_Path) != ".exe") {
MessageBox.Show("当前文件不是EXE文件~", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
} else {
SaveFileDialog sfd = new SaveFileDialog(); // 保存文件对话框
sfd.Filter = "|*.ico"; // 后缀名
if (sfd.ShowDialog() == DialogResult.OK) { // 判断是否点击保存(未填写文件名则无效)
// 获取拖入文件的图标
Image img = Icon.ExtractAssociatedIcon(File_Path).ToBitmap();
img.Save(sfd.FileName);
}
}
}

// 拖入事件(拖入时执行)
private void ForIcon_DragEnter(object sender, DragEventArgs e)
{
e.Effect = DragDropEffects.All;
}
}
}

添加控件

其中我们只需要添加一段文字,提醒用户将文件拖入的信息提示即可,随后修改label属性信息就可用了
然后将label显示区域拉满软件窗口(这里的拉满指的是自动对焦的拉满,其实你把它全拉满都没问题,这只是我的个人习惯)看最后一张图

属性名属性值描述
(Name)msg用于处理代码中对象的昵称
Text软件拖入…文本内容
AutoSizeFalselabel 大小是否根据内容进行自动调整
Font宋体, 10.2pt, style=Bold调整字体
FontColorRed运行软件时,软件出现的位置
TextAlignMiddleCenter内容显示再 label 中的哪个位置(MiddleCenter: 居中)


运行

点击上方工具栏的启动按钮即可,然后找到你的项目存储路径(我的是: D:\Data\C\C#\)
打开项目名称再继续点击去找到\bin\Debug里面就会有打包好的.exe执行文件
我的完整路径是: D:\Data\C\C#\ForIcon\ForIcon\bin\Debug\ForIcon.exe