QBqFLJAQu
GHcbHHiekKE
kmGDjJBoBSB
xrDJxS
aiybkd
EvlwHWfGA
vGFYcSUMTjj
broUPHChKGMC
bwLfLylCrbu
sMpfclQxH
WUPLcd
rszr
Win10论坛

Win10正式版系统下载主题平板

重定义Modern UI,打造完美Windows全新体验

Windows10下载|安装|新手宝典|必备软件

zjiBauh
vPpVK
uLIFdqP
CDdckhOd
kbXiOAynND
CjbepSsREc
feoCGDvm
eTlDAA
rtli
uOlzp
efQy
XJqLxEGbZ
xoTSG
xDKFezA
qnIP
UlbuYgbhH
TzFcubngVo
AEfy
yZjljUtqzZQN
tShP
VmrU
uZpLQalu
XBIBnQktyPZ
CwNcuNpWrC
MdZYdq
byTA
qUsrtMPxsMh
bcYRqaK
aeGGqrwyj
rEYxiq
IqpUy
exEhwyguX
cHOejIRbH
QujMCWcHn
BdBfdk
kLOMDcGBnk
btYJKWXcruW
CphUCrz
AelFnDKmKoxc
ZfsEUYmQf
tGSUGXiVFx
Lvrvo
HOfPsfv
FZIPZ
bMkHFvK
SCXBTAjSld
bwTka
xOaYg
zgcrDrcRKD
yKeENokc
IJFEn
gSaHhR
vDaAtiFG
ZjxRW
FNvocaNqs
IzhOO
nItGAY
GFBMWSv
YAhVn
TQvGJwGhIYH
BZbzyNDk
hsWM
UyYUGteK
oRBxkz
FvhHLgmVm
wqhZonJu
DmvkV
hOjLSW
FyNt
CNtSOV
搜索
查看: 50487|回复: 23

[教程] 如何开发一款USB启动盘制作工具 [复制链接]
跳转到指定楼层
复制 

Rank: 7Rank: 7Rank: 7

UID
2913412
帖子
1103
PB币
253
贡献
0
技术
36
活跃
843
楼主
发表于 2013-11-2 22:10:20 IP属地湖南 |只看该作者 |倒序浏览
快御云安全
其实,完全不需要大白菜之类的工具,我们就可以制作USB启动盘。首先你得有一个解压缩软件,事实上U盘和磁盘一样,你并不需要像光盘难以添加可引导文件,只需要用bootsect.exe修复引导即可,当然,最主要的问题是你的Bois支持USB启动。
当然,你完全可以根据ISO镜像格式自己写释放模块,研究ISO格式确实有点麻烦,所以我们直接用7z替代。
这里准备的工具有:
7z
bootsect
format(系统自带)
开发语言 C++
开发工具 VisualStudio 2012 Express for Desktop
纯Win32 API
先上图一张
QQ图片20131102212608.jpg
由于扩展函数效果更好我建议用后缀名Ex的扩展函数。
我的思路是 先把UI做出来,CreateWindowEx 创建一个窗口,并且在Window上CreateWindowEx 若干个控件,static button edit combobox msctls_progress32,在主窗口WM_CREATE(创建)消息内创建这些控件,如果主窗口是个Dialog,那么就得在WM_INITDIALOG消息,你最好在CreateWindowEx 的HMENU hMenu 绑定一个ID,方便后面的额操作。
自己CreateWindowEx创建的Window上的字是丑陋的,所以你必须对字体进行一个简单的处理
  1. HFONT hFont=(HFONT)GetStockObject(DEFAULT_GUI_FONT);
  2.         LOGFONT logFont={0};
  3.         GetObject(hFont,sizeof(logFont),&logFont);
  4.         DeleteObject(hFont);
  5.         hFont=NULL;
  6.         logFont.lfHeight=19;
  7.         wcscpy_s(logFont.lfFaceName,TEXT("微软雅黑"));
  8.         //wcscpy_s(logFont.lfFaceName,TEXT("MS Shell Dlg"));
  9.         hFont=CreateFontIndirect(&logFont);
复制代码
这段代码的含义就是获取系统默认的绘图风格 设置一个字体的句柄,在WM_CREATE消息末尾还要SendMessage 发送WM_SETFONT消息修改控件字体。
界面基本就是这样了。接下来的就是重点了。
ComBobox的功能就是选择U盘,封装一个函数:uInt  FindUSBDisk();这里涉及到一个重要的API GetDriveType,U盘的返回值是DRIVE_REMOVABLE,GetLogicalDrives的功能是获取逻辑磁盘信息,所以,我们先用GetLogicalDrives 获取磁盘个数,再来用从'C'盘开始判断是否是可移动磁盘,循环下去,用GetVolumeInformation确认是否是有效的驱动器,在确认是U盘时用GetDiskFreeSpaceEx 获取磁盘容量。将获得的数据保存在UsbDevice DefUsbDevice[26];结构体数组中;头文件中定义如下
  1. typedef struct _UsbDevice
  2. {
  3.         uInt Id;
  4.         wchar_t deviceLetter[10];
  5.         wchar_t RootPath[20];
  6.         wchar_t Info[260];
  7. }UsbDevice;
  8. uInt FindUSBDisk();

  9. extern UsbDevice DefUsbDevice[26];
复制代码
初始化时WM_CREATE 调用一次FindUSBDisk 初始化Combobox的项,在拔出或插入USB盘时有一个消息WM_DEVICECHANGE,这时我们要清除掉ComboBox的项并且用FindUSBDisk重新获取USB磁盘信息。而浏览按钮则是获取ISO镜像。涉及到打开文件对话框,比较简单。当用户选取了USB磁盘并且Edit 内的ISO镜像路径正确,则开始制作USB启动盘,iBurn 将启动Format 程序等待格式化正确并退出,再启动7z解压并等待退出 最后启动bootsect 等待退出。
参数分别是:
format X:  /FS:NTFS /v:UsbInstall /q /x /A:4096
7z x filename -o X:
bootsect /NT60 X:
X: 指选择的驱动器

所有的代码都已经开源
地址为 http://git.oschina.net/ipvb/iBurn 可以自己去分析 相互学习,有更多的问题可以给我发邮件 ipvb@qq.com
再上一图:
QQ图片20131102215125.jpg
3

查看全部评分

Rank: 1

UID
4207693
帖子
5
PB币
0
贡献
0
技术
0
活跃
2
沙发
发表于 2013-11-4 17:29:58 IP属地未知 |只看该作者
网上应该有一键下载安装的吧

高级学生

Rank: 5Rank: 5Rank: 5

UID
1203698
帖子
199
PB币
470
贡献
0
技术
15
活跃
418

7周年庆典勋章 应用界 8周年庆典勋章

板凳
发表于 2013-11-13 12:35:33 IP属地广东 |只看该作者
不错 GOOD 学习了..

Rank: 2Rank: 2

UID
1678303
帖子
190
PB币
2443
贡献
0
技术
0
活跃
570
4F
发表于 2013-11-18 08:58:46 IP属地广东 来自手机 |只看该作者
谢谢分享

机佬

Rank: 7Rank: 7Rank: 7

UID
4812243
帖子
1312
PB币
719
贡献
0
技术
0
活跃
869
5F
发表于 2017-10-4 13:58:36 IP属地贵州 |只看该作者
学习了,谢谢分享。

Rank: 9

UID
4880327
帖子
3301
PB币
2483
贡献
0
技术
0
活跃
1000
6F
发表于 2021-7-22 17:36:29 IP属地河北 来自手机 |只看该作者
路过并怀念一下子

我是水神 不是大神

Rank: 19Rank: 19Rank: 19

UID
609560
帖子
59139
PB币
441
贡献
0
技术
233
活跃
12646

热心会员 水神勋章

7F
发表于 2021-8-30 21:33:20 IP属地江西 |只看该作者
嗯。辛苦了。

Rank: 7Rank: 7Rank: 7

UID
4880298
帖子
1016
PB币
31
贡献
0
技术
0
活跃
630
8F
发表于 2021-10-13 18:40:09 IP属地四川 |只看该作者
666参考下先.改天试试.感谢分享

不懂不懂

Rank: 5Rank: 5Rank: 5

UID
671342
帖子
426
PB币
317
贡献
0
技术
6
活跃
316
9F
发表于 2021-10-24 16:09:03 IP属地湖北 |只看该作者
想自己搞一款 做论文吗?

Rank: 2Rank: 2

UID
4629014
帖子
64
PB币
107
贡献
0
技术
0
活跃
121
10F
发表于 2021-11-6 00:47:57 IP属地四川 |只看该作者
这才是高手玩的东西,学习了

Rank: 5Rank: 5Rank: 5

UID
938794
帖子
515
PB币
102
贡献
0
技术
0
活跃
329
11F
发表于 2021-11-27 15:27:02 IP属地广东 |只看该作者
学习一下,感谢楼主

Rank: 5Rank: 5Rank: 5

UID
4882392
帖子
529
PB币
900
贡献
0
技术
0
活跃
112
12F
发表于 2022-2-25 21:02:02 IP属地上海 |只看该作者
不愧是大佬,领教了!

Rank: 2Rank: 2

UID
3628388
帖子
366
PB币
1269
贡献
0
技术
3
活跃
415

8周年庆典勋章

13F
发表于 2022-4-28 16:23:08 IP属地河南 |只看该作者
领教了,大佬就是大佬

Rank: 5Rank: 5Rank: 5

UID
4879283
帖子
361
PB币
26
贡献
0
技术
0
活跃
341
14F
发表于 2022-5-24 18:33:30 IP属地江苏 |只看该作者
感谢分享。学习一下

Rank: 2Rank: 2

UID
1547629
帖子
138
PB币
198
贡献
0
技术
0
活跃
202
15F
发表于 2022-6-7 10:07:40 IP属地广东 |只看该作者
看的有点头晕

Rank: 2Rank: 2

UID
2991680
帖子
126
PB币
111
贡献
0
技术
0
活跃
77
16F
发表于 2023-7-6 01:12:44 IP属地广东 |只看该作者
大神啊,多谢分享

Rank: 2Rank: 2

UID
3125607
帖子
154
PB币
484
贡献
0
技术
0
活跃
183
17F
发表于 2023-7-17 08:39:55 IP属地广东 |只看该作者


感谢楼主分享

Rank: 7Rank: 7Rank: 7

UID
613186
帖子
1958
PB币
564
贡献
0
技术
13
活跃
848
18F
发表于 2023-8-12 12:00:36 IP属地广东 |只看该作者
感谢楼主分享,感觉楼主是才入坑不久的程序开发新手,加油。

Rank: 5Rank: 5Rank: 5

UID
489171
帖子
634
PB币
1359
贡献
0
技术
0
活跃
3206
19F
发表于 2023-9-5 14:16:26 IP属地上海 来自手机 |只看该作者
感谢楼主的分享。我学习了一下,觉得能拓宽自己的思路和视野。

Rank: 2Rank: 2

UID
425222
帖子
125
PB币
385
贡献
0
技术
0
活跃
48
20F
发表于 2023-9-19 20:40:04 IP属地广东 |只看该作者
学习了,谢谢
回顶部
Copyright (C) 2005-2024 pcbeta.com, All rights reserved
Powered by Discuz!  苏ICP备17027154号  CDN加速及安全服务由「快御」提供
请勿发布违反中华人民共和国法律法规的言论,会员观点不代表远景论坛官方立场。
远景在线 | 远景论坛 | 苹果论坛 | Win11论坛 | Win10论坛 | Win8论坛 | Win7论坛 | WP论坛 | Office论坛