昨天弄了一天“扫描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";;// MBbreak;}case 3:{cell = "KB";;// KBbreak;}case 4:{cell = "B";;// Bbreak;}default:cell = "GB";;// GBbreak;}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;// MBbreak;}case 3:{unit = 1024;// KBbreak;}case 4:{unit = 1;// Bbreak;}default:unit = 1024 * 1024 * 1024;// GBbreak;}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) 虚拟为磁盘驱动器。

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

  1. 最终幻想14无法获取服务器信息,最终幻想14无法连接到服务器 | 手游网游页游攻略大全...

    发布时间:2016-08-29 最终幻想14'>最终幻想14" data_ue_src="http://www.douxie.com/game/11671.html" ...

  2. vbs 服务器获取输入信息,取得服务器上用户组列表脚本之VBS版

    'groups.vbs '时间:2001.2.5 '版本:1.0 '作者:沧海笑一声 '其它:此脚本原作者写于2000年初,沧海用过后觉得不是很好用. '它原来的显示方式是wsh的方法,往往要多屏显示 ...

  3. C#net6实现Linux系统下修改IP地址、修改系统时间、获取内存信息、获取磁盘信息、重启系统

    C#net6实现Linux系统下修改IP地址.修改系统时间.获取内存信息.获取磁盘信息.重启系统 背景 项目背景 实现思路 代码实现 背景 随着微软.net core的出现,C#程序实现跨平台不在困难 ...

  4. 虚拟机服务器磁盘扩容步骤,vmware ESXi 虚拟机扩容磁盘空间

    主要步骤: vmware 宿主机编辑虚拟机配置扩容服务器并启动虚拟机 fdisk新建分区 pvcreate新建物理卷 vgextend扩展卷组 lvextend扩容逻辑卷 xfs_growfs扩容文件 ...

  5. linux利用vi挂载磁盘,如何在linux环境上挂载磁盘

    1.1      fdisk -l 命令 查看可用的磁盘信息(如果没有显示可用的磁盘,可重启一下主机:reboot) 1.2      df –h 命令 可查看已挂的磁盘情况 1.3      pvs ...

  6. 微信扫描PC端二维码跳转到小程序确认登录通过WebSocket来获取用户信息达到PC端登录

    需求: 在pc端获取后端给的token值来生产二维码(这里后端给了我两个url:一个是二维码url,一个是ws的 url),用微信扫描二维码跳转到小程序写的确定登录页面(进行确定):然后在PC端使用W ...

  7. 【Android App】检查手机连接WiFi信息以及扫描周围WiFi的讲解及实战(附源码和演示 超详细必看)

    需要全部代码请点赞关注收藏后评论区留言私信~~~ 一.检查是否连接WiFi以及输出WiFi信息 传统的定位方式不适用于室内的垂直定位,原因如下: (1)卫星定位要求没有障碍物遮挡,它在户外比较精准,在 ...

  8. IDV客户端下发界面会出现“获取磁盘信息失败”

    现象分析: 情况一:在客户机运行正常的情况下会弹出下载的界面(会一直弹),提示下载完成. 情况二:在终端客户机正常运行的情况下会弹出下载界面并伴有提示"获取磁盘失败"的字样.如图所 ...

  9. Android BLE蓝牙4.0开发 实现扫描、连接、通讯、获取通知、特性等 (一、打开蓝牙 进行扫描)

    目录 首先说下蓝牙4.0 目前android蓝牙有2种: ble蓝牙开发流程: 1.首先当然是进行权限申请啦: 2.获取蓝牙适配器 BluetoothAdapter 3.打开蓝牙 4.关闭蓝牙 5.在 ...

最新文章

  1. 2022-2028年中国体育用品行业投资分析及前景预测报告(全卷)
  2. Fast ORB-SLAM
  3. 自己动手安装ARM交叉编译工具链
  4. 农用地包括哪些地类_征用土地公告应当包括哪些内容?|楹庭拆迁律师
  5. Introduction mybatis
  6. 数据结构之二叉树:折纸问题——11
  7. Vue2.0以后,有哪些变化
  8. STM32工作笔记0057---外部中断实验
  9. 配置vivado用vscode编辑文本
  10. python解析http数据包_python 3 处理HTTP 请求的包
  11. xinetd出马拯救Ftp服务器
  12. .Net 下的Wondows窗体常用项目
  13. 基于stc15f2k60s2芯片单片机编程(计算器,不完美)
  14. word 格式的试题 转 问卷星excel格式
  15. 【操作系统】分区分配算法(首次适应算法、最佳适应算法)C语言
  16. Fixture证书权限导致CSR申请证书失败的问题 [已解决]
  17. 用 Python 实现黑客帝国中的数字雨落既视感
  18. openFOAM的基础类型汇总
  19. 软件测试工程师薪酬水平,软件测试工程师工资怎么样?高吗?
  20. 数据结构(三)---树

热门文章

  1. android内核超频修改,CPU主频性能跑分测试
  2. android平板 跑分软件,哪个手机跑分软件好用 这4款软件推荐给你
  3. CentOS7环境下MySQL踩坑记
  4. 小程序如何生成海报分享朋友圈,android移动开发技术与应用
  5. java直板手机_新一代街机之选!诺基亚S40金属直板6300评测
  6. RT-thread培训学习和心得(二)
  7. Palette(调色板)
  8. java中的八种原始数据类型
  9. Javascript邮箱正则表达式
  10. 基于STM32F4的CANopen快速SDO通信(超级详细)