获取磁盘信息并扫描是否连接移动磁盘之JS版

2023-10-26

昨天弄了一天“扫描U盘是否连接到电脑”的功能,折腾了一天出了个java版和js版,这里记录下JS版本。

先说说思路:从浏览器的地址栏打开网页之后,通过onload事件调用ActiveXObject判断U盘是否连接到电脑,若是连接了获取信息显示到table中,若是没有每隔2秒调用一次事件进行获取,获取到之后清空计时器并将U盘信息显示到页面。PS:全程只获取一个U盘的信息。

 

1、页面基本结构:

<body  οnlοad="checkDisk();">
	<table width="100%" border="0" cellspacing="0" cellpadding="0" class="ztb_l" id="upanTable">
		<tr>
			<td>盘符路径(Path)</td>
			<td>文件系统类型(FileSystem)</td>
			<td>驱动器类型(DriveType)</td>
			<td>驱动器对象的字母(DriveLetter)</td>
			<td>驱动器是否准备好或是否损坏(IsReady)</td>
			<td>卷标名(VolumeName)</td>
			<td>驱动器对象的跟文件夹(RootFolder)</td>
			<td>可用容量大小(AvailableSpace)</td>
			<td>总空间容量大小(TotalSize)</td>
		</tr>
	</table>
</body>

2、JS查询:

var tt = 2 *1000;//2秒扫描一次
var interval=null;
/**
 * 该方法用来检测U盘是否存在,若是存在则显示在页面中,若是不存在则扫描识别直至电脑连接上U盘
 * @param flag:1-移动磁盘 2-本地磁盘 非1和2其他磁盘信息,若有多个磁盘页面只显示一个磁盘信息
 */
function checkDisk(){
	//diskArr = getDiskInfo(3,1);//查询所有磁盘信息并返回结果集
	diskArr = getDiskInfo(1,1);//查询所有可移动磁盘信息并返回结果集
	if(diskArr.length>0){//说明连接了U盘
		//appendDiskInfoToTable(diskArr);//显示全部
		appendDiskInfoToTable(diskArr[0]);//取其中一个显示到页面
		/*
		var x = diskArr[0];
		var diskInfo=x.Path+"\n"+x.FileSystem+"\n"+x.DriveType+"\n"+x.DriveLetter+"\n"
			   +x.IsReady+"\n"+x.VolumeName+"\n"+x.RootFolder+"\n"+getDiskSpace(x.AvailableSpace,1,2)+"\n"
			   +getDiskSpace(x.TotalSize,1,2);
		alert(diskInfo);
		*/
	}else{//没有连接,那么循环查找并直接将结果显示到页面
		interval = window.setInterval("getDiskInfo(1,3)",tt);//重复加载
	}
}

/**
 * 该方法用来获取所有磁盘的基本信息
 * @param flag:获取的磁盘类型信息:1-获取可移动磁盘信息 2-获取本地磁盘信息 默认获取所有磁盘信息
 * @param result:处理结果 1-返回结果集 2-直接将所有结果集显示到页面上 3-将第一个结果集显示到页面上
 * @return array:集合
 * */
function getDiskInfo(flag,result){
	var diskArr=new Array();//初始化
	
	if(flag==null || flag==undefined) flag=3;
	if(result==null || result==undefined) result=1;//默认返回结果
	
	var e, x;
	var fso = new ActiveXObject("Scripting.FileSystemObject");
	var bfResult = false;
	e = new Enumerator(fso.Drives);
	flag = parseInt(flag,10);
	result = parseInt(result,10);
	
	for (; !e.atEnd(); e.moveNext()) {
		x = e.item();// 获取每个盘符的基本信息
		switch(flag){
			case 1:{//移动磁盘
				if(x.DriveType==1){
					diskArr.push(x);
				}
				break;
			}
			case 2:{//获取本地磁盘
				if(x.DriveType==2){//固定磁盘
					diskArr.push(x);
				}
				break;
			}
			default:{//全部磁盘
				diskArr.push(x);
				break;
			}
		}
	}
	//处理结果
	switch(result){
		case 2:{//将所有结果返回到页面
			if(diskArr.length>0){
				clearInterval(interval);//清除计时器
				appendDiskInfoToTable(diskArr);
			}
			break;
		}
		case 3:{//将第一个结果集显示到页面上
			if(diskArr.length>0){
				appendDiskInfoToTable(diskArr[0]);
				clearInterval(interval);//清除计时器	
			}
			break;
		}
	}
	return diskArr;
}

/**
*获取磁盘基本信息拼接到table中
*@param diskArray:进行添加的磁盘集合
**/
function appendDiskInfoToTable(diskArray){
	var tableHtml="";
	if(isArray(diskArray)){//是数组
		for(var i=0;i<diskArray.length;i++){
			tableHtml +=addTrHtml(diskArray[i]);// 获取每个盘符的基本信息
		}
	}else{//不是数组
		tableHtml = addTrHtml(diskArray);
	}
	$("#upanTable").append(tableHtml);
}

function addTrHtml(diskArray){
	var trHtml="";
	trHtml +="<tr>"
		   +"<td>"+diskArray.Path+"</td>"
		   +"<td>"+diskArray.FileSystem+"</td>"
		   +"<td>"+diskArray.DriveType+"</td>"
		   +"<td>"+diskArray.DriveLetter+"</td>"
		   +"<td>"+diskArray.IsReady+"</td>"
		   +"<td>"+diskArray.VolumeName+"</td>"
		   +"<td>"+diskArray.RootFolder+"</td>"
		   +"<td>"+getDiskSpace(diskArray.AvailableSpace,1,2)+"</td>"//可用空间大小(与剩余空间大小结果相同)
		   //+"<td>"+getDiskSpace(diskArray.FreeSpace)+"</td>"//剩余空间大小
		   +"<td>"+getDiskSpace(diskArray.TotalSize,1,2)+"</td>"
		   +"</tr>";
return trHtml;
}

/**
 * 该方法用来格式化U盘显示信息
 * @param space:磁盘空间容量,以byte为单位
 * @param flag:1-GB 2-MB 3-KB 4-B 默认为GB
 * @param fix:保留的小数位 1-###0.## 2-###0.0#
 * @return 值+单位
 * **/
function getDiskSpace(space,flag,fix){
	var unit = getDiskUnit(flag);
	var value = space/unit;
	value = value.toFixed(fix)+getCell(flag);//保留位数+单位
	return value;
}

/**
 * 该方法用来获取单元名称
 * @param flag:1-GB 2-MB 3-KB 4-B 默认为GB
 * **/
function getCell(flag){
	flag = parseInt(flag,10);
	var cell = "GB";
	switch(flag){
	case 2:{
		cell = "MB";;// MB
		break;
	}
	case 3:{
		cell = "KB";;// KB
		break;
	}
	case 4:{
		cell = "B";;// B
		break;
	}
	default:
		cell = "GB";;// GB
		break;
	}
	return cell;
}
/**
 * 该方法用来获取磁盘容量显示方式:1-GB 2-MB 3-KB 4-B 默认为GB
 * @return 磁盘单位,如GB:1024*1024*1024 MB:1024*1024 KB为:1024 B为:1
 **/
function getDiskUnit(flag){
	flag = parseInt(flag,10);
	var unit = 1024 * 1024 * 1024;// 将磁盘格式化为GB,默认值
	switch(flag){
	case 2:{
		unit = 1024 * 1024;// MB
		break;
	}
	case 3:{
		unit = 1024;// KB
		break;
	}
	case 4:{
		unit = 1;// B
		break;
	}
	default:
		unit = 1024 * 1024 * 1024;// GB
		break;
	}
	return unit;
}

/**
 * 判断是不是数组
 * **/
var isArray = function(obj) { 
	return Object.prototype.toString.call(obj) === '[object Array]'; 
};

 3、DriverType 0-5的范围的意思:

Unknown 0 无法确定驱动器类型。
Removable 1 可移动媒体驱动器,包括软盘驱动器和其他多种存储设备。
Fixed 2 固定(不可移动)媒体驱动器,包括所有硬盘驱动器(包括可移动的硬盘驱动器)。
Remote 3 网络驱动器,包括网络上任何位置的共享驱动器。
CDROM 4 CD-ROM 驱动器,不区分只读和可读写的 CD-ROM 驱动器。
RAMDisk 5 RAM 磁盘,在本地计算机中占用一块“随机存取内存”(RAM) 虚拟为磁盘驱动器。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

获取磁盘信息并扫描是否连接移动磁盘之JS版 的相关文章

随机推荐

  • Nginx【反向代理负载均衡动静分离】--下

    Nginx 反向代理负载均衡动静分离 下 Nginx 工作机制 参数设置 master worker 机制 示意图 图解 一个master 管理多个worker 一说master worker 机制 争抢机制示意图 图解 一个master
  • 获取时间/时间戳,并比大小

    获取当前时间戳的几种方法 1 System currentTimeMillis 2 Calendar getInstance getTimeInMillis 3 new Date getTime 注 上面的获取时间戳值都是毫秒级的 返回的都
  • 微信公众号发送模板信息报错——invalid credential, access_token is invalid or not latest hints:

    这个大部分原因是access token不正确导致的 这个access token是微信开放文档 公众号 开始开发 获取Access Token下的获取access token获取的 而不是下面的微信网页开发 网页授权中获取access t
  • 等概率抽样——水塘抽样

    等概率抽样 水塘抽样 给出一个数据流 这个数据流的长度很大或者未知 并且对该数据流中数据只能访问一次 且不能使用额外的空间 请写出一个随机选择算法 使得数据流中所有数据被选中的概率相等 从头开始遍历数据 当遍历到第n个数据时 从0到n 1中
  • 使用Wireshark与Burp Suite分析HTTPS协议

    目录 目的 内容 器材 设备 元器件 步骤 1 虚拟机服务器搭建网站 本机访问用Burp Suite抓包获取头信息 2 Wireshark和Burp Suite处理HTTPS的过程与技术实现过程原理 1 Wireshark 2 Burp S
  • Spring Cloud五大组件

    Spring Cloud五大组件 Spring Cloud是分布式微服务架构的一站式解决方案 在Spring Boot基础上能够轻松搭建微服务系统的架构 现有Spring Cloud有两代实现 一代 Spring Cloud Netflix
  • SpringBoot(一)使用itelliJ社区版创建SpringBoot项目

    工欲善其事 必先利其器 要开发SpringBoot项目 首先就是选择一款合适的开发工具 目前市面上有很多优秀的开发工具 例如 IntelliJ IDEA Visual Studio Code 和 Eclipse 等 那么我们该如何选择呢 最
  • 17 Redis缓存更新策略(缓存和数据库更新选择)

    1 先更新数据库 在更新缓存 会有异常 更新完Mysql 发生异常 redis还没有更新 导致redis的是旧数据 下次读取缓存读的是脏数据 2 先删除缓存 在更新数据库 1 缓存已经删了 mysql还在更新中 由于Mysql还在更新中 会
  • java类注释_Java注释,java类注释详解

    一个程序的可读性 关键点就在于注释 下面要给大家讲到的就是Java注释方面的知识 主要会介绍java类注释 类注释一般必须放在所有的 import 语句之后 类定义之前 主要声明该类可以做什么 以及创建者 创建日期 版本和包名等一些信息 下
  • VS2022编译调试FFmpeg

    Git 工具下载 安装直接选择好安装路径 直接下一步到安装完成 配置好工程目录 msvc为编译生成的目标文件的目录 source为源代码目录 进入source目录 通过Git下载FFmpeg git clone https github c
  • 设计模式(三)——装饰模式

    往期地址 设计模式 一 简单工厂模式 设计模式 二 策略模式 本期主题 讲解装饰模式 装饰模式 1 什么是装饰模式 2 实例 2 1 场景 2 2 代码 1 什么是装饰模式 装饰模式是一种结构型设计模式 可以把对象的特殊行为进行封装 从而为
  • ue4单选框设置

    奇怪的是 ue4只有多选框 原来合并了 Style FCoreStyle Get RadioButton 不多说了 放代码 先枚举几个 enum ERadioChoice Radio0 Radio1 Radio2 SHorizontalBo
  • steps_per_epoch=2000,epochs=100之间的区别

    第一种解释 batchsize 中文翻译为批大小 批尺寸 在深度学习中 一般采用SGD训练 即每次训练在训练集中取batchsize个样本训练 iteration 中文翻译为迭代 1个iteration等于使用batchsize个样本训练一
  • 小程序

    文章目录 新建项目并梳理项目结构 配置导航栏效果 配置 tabBar 效果 实现轮播图效果 获取轮播图数据 渲染轮播图页面效果 对轮播图进行美化 实现九宫格效果 获取九宫格数据 渲染九宫格布局 美化九宫格布局 实现图片布局 上拉触底案例 定
  • Lua判断一个对象是否为空,包含userdata

    Lua判断一个对象是否为空 客户端在开发游戏的时候 经常会遇到一个问题 C 传递过来的GameObject已经被销毁了 但是lua这边判断却不是nil 而是一个userdata 那怎么判断一个userdata是否为空呢 可以使用如下代码判断
  • SSH密码暴力破解

    SSH密码暴力破解 1 Hydra 海德拉 hydra 是世界顶级密码暴力密码破解工具 支持几乎所有协议的在线密码破解 功能强大 其密码能否被破解关键取决于破解字典是否足够强大 在网络安全渗透过程中是一款必备的测试工具 1 1指定用户破解
  • 数据结构自考

    设带头结点的单向循环链表的头指针为变量head 则空循环链表的判定条件是 head gt next head 一个具有n个顶点的无向完全图的边数为 n n 1 2 设某有向图有n个顶点 则改有向图对应的邻接表中的表头节点个数为n 若查找每个
  • 使用freemarker生成静态html文件

    一 引入依赖
  • 如何在家里赚钱,分享六个适合普通人长期可做的副业

    当今社会 压力越来越大 工作 家庭 生活等等 方方面面都需要钱 仅靠一份工作赚钱 已经很难满足我们的需求 所以越来越多的人尝试做副业 通过副业增加收入 让生活过得更幸福 常见的副业都是业余学一项技能 通过这项技能来赚钱 这是最保险的副业方式
  • 获取磁盘信息并扫描是否连接移动磁盘之JS版

    昨天弄了一天 扫描U盘是否连接到电脑 的功能 折腾了一天出了个java版和js版 这里记录下JS版本 先说说思路 从浏览器的地址栏打开网页之后 通过onload事件调用ActiveXObject判断U盘是否连接到电脑 若是连接了获取信息显示