开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 6270|回复: 19
收起左侧

[易语言纯源码] 【首发】支持WIN7!易语言获取“物理硬盘”总大小+API学习

[复制链接]

结帖率:100% (1/1)
发表于 2014-8-8 16:07:44 | 显示全部楼层 |阅读模式   内蒙古自治区包头市
分享源码
界面截图:
是否带模块: -
备注说明: -
本帖最后由 V雪落有声V 于 2014-8-14 21:33 编辑

使用易语言进行硬盘操作,获取硬盘大小。
已经测试的操作系统:{
WINDOWS XP SP3
WINDOWS 7 X64 SP1
WINDOWS 2008 X64

其中包含的知识点:
【1】:CreateFile()打开物理驱动器操作,固定格式:“\\.\PhysicalDriveX”其中X为驱动器的序号。(注意,C语言中\需要转义);
打开后会返回操作的句柄,就可以根据这个句柄进行操作了。关于CreateFile函数,请点击这里查看
由于我们这里进行的是读取信息的操作,所以打开权限为“#GENERIC_READ”只读,同时将Flag置为:#OPEN_EXISTING,表示打开存在的。
这里需要注意一点,如果CreateFile函数执行失败,返回值为:INVALID_HANDLE_VALUE,他的值为-1,而不是0;

【2】:进行过打开之后,就要获取硬盘的信息了,使用API函数:DeviceIoControl,关于更具体的使用方法,请参见MSDN,点击这里(高能,英语不好者慎入)。
使用“#IOCTL_DISK_GET_LENGTH_INFO”可以告知,我们将要获取磁盘的长度,也就是大小。
下面是具体分析:
  1. BOOL DeviceIoControl(
  2.   (HANDLE) hDevice,             // handle to device   句柄
  3.   IOCTL_DISK_GET_LENGTH_INFO,   // dwIoControlCode    操作的代码
  4.   NULL,                            //忽略
  5.   0,                                  //忽略
  6.   (LPVOID) lpOutBuffer,         // output buffer      输出数据的缓冲区
  7.   (DWORD) nOutBufferSize,      // size of output buffer   缓冲区的长度
  8.   (LPDWORD) lpBytesReturned,    // number of bytes returned    可以忽略
  9.   (LPOVERLAPPED) lpOverlapped   // OVERLAPPED structure       忽略
  10. );
复制代码
ps:上面这个“代码”编辑的功能还真是难用。
pOutBuffer 需要的是GET_LENGTH_INFORMATION结构体的地址(点击查看详情),在易语言中使用“长整数”即可,同时将该参数的DLL声明选中“传址”以完成传递地址。
使用“取数据类型尺寸 (#长整数型)”获取长整数在内存中占用的尺寸。并传递给参数:nOutBufferSize;


【3】完成上述操作后,只需要对DeviceIoControl的返回值进行判断,如果为0则为失败,调用取错误信息,然后释放句柄,函数返回。
如果获取成功,则返回长整数。
至此:函数运行完毕。

最后是源代码:
获取硬盘大小.rar (3.67 KB, 下载次数: 123)

评分

参与人数 6好评 +2 精币 +9 收起 理由
淡淡香草味 + 1 支持开源~!感谢分享
深藏功舆名ゐ + 2 感谢分享,很给力!~
大表弟 + 1 支持开源~!感谢分享
Hoibben + 1 + 3 感谢分享,很给力!~
Rien + 1 一下子就N个亿,真厉害
小表哥 + 2 【收发】易语言获取“物理硬盘”总大小==========

查看全部评分


本帖被以下淘专辑推荐:

结帖率:100% (2/2)

签到天数: 9 天

发表于 2022-7-18 22:35:16 | 显示全部楼层   浙江省宁波市
很好。。。。。。。。。。。。。。。。。
回复 支持 反对

使用道具 举报

结帖率:67% (2/3)
发表于 2019-4-11 13:26:19 | 显示全部楼层   福建省漳州市
支持大神 666666666666
回复 支持 反对

使用道具 举报

发表于 2015-3-6 13:15:04 | 显示全部楼层   福建省泉州市
非擦汗功能感谢,我找了很久
回复 支持 反对

使用道具 举报

结帖率:0% (0/1)
发表于 2014-12-1 23:21:01 | 显示全部楼层   河南省鹤壁市
这个有什么用
回复 支持 反对

使用道具 举报

结帖率:95% (80/84)

签到天数: 9 天

发表于 2014-8-11 00:18:56 | 显示全部楼层   黑龙江省大庆市
支持大神
回复 支持 反对

使用道具 举报

结帖率:100% (1/1)
发表于 2014-8-10 23:00:54 | 显示全部楼层   广东省佛山市
很好。。。。。。。。。。。。。。。。。
回复 支持 反对

使用道具 举报

结帖率:100% (12/12)
发表于 2014-8-9 14:54:59 | 显示全部楼层   广东省深圳市
看的我迷迷糊糊的.
回复 支持 反对

使用道具 举报

发表于 2014-8-9 12:35:13 | 显示全部楼层   山东省临沂市
一下子就N个亿,真厉害
回复 支持 反对

使用道具 举报

结帖率:83% (5/6)
发表于 2014-8-9 11:42:24 高大上手机用户 | 显示全部楼层   广东省广州市
我来学一个
回复 支持 反对

使用道具 举报

结帖率:75% (3/4)
发表于 2014-8-9 10:42:00 | 显示全部楼层   江苏省南京市
好东西就是要支持
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表