精华内容
下载资源
问答
  • 貌似网上很多人问怎么VBS检测U盘插入和弹出,其实这很容易实现,WMI赋予了VBS十分强大的功能。
  • 检测u盘是否插入

    2018-12-14 09:27:53
    这是一款自动检测U盘是否插入的VC程序代码,编译通过。
  • 检测U盘是否挂载成功c语言实现,检测时间5s,通过打开路径,写入和读取同一文件实现
  • 传VBS版U盘小偷程序基本上都是靠无限循环实现的一点技术含量也没有文章的末 尾给出了我写的 VBS版U盘小偷程序的下载地址虽然 WMI也得无限循环但是效率 是不一样的 使用 WMI的Win32_V olumeChangeEvent类就可以实现...
  • C# 检测U盘

    2017-03-10 20:21:31
    C#检测U盘,源码亲可用!
  • U盘性能检测器是一款针对U盘的小工具,运行时会在U盘中写入一个DskTst文件,可以测试U盘的最高/最低/平均读写和写入速度。从测试中可以看出你的U盘是属于优等品还是次品,一般来说速度至少应在5M,如果写入速度达到...
  • 检测U盘插入拔出代码脚本,个人原创,转载请注明出处
  • 可以说对 WMI 的掌握程度的多少直接决定了你的 VBS 水平高低看过网上普遍流 传 VBS 版 U 盘小偷程序基本上...是不一样的 使用 WMI 的 Win32_V olumeChangeEvent 类就可以实现 下面是示例代码 更详细的信 息请参考 MSND
  • C# 监视并检测U盘的插入拔出的源代码C# 监视并检测U盘的插入拔出的源代码C# 监视并检测U盘的插入拔出的源代码C# 监视并检测U盘的插入拔出的源代码C# 监视并检测U盘的插入拔出的源代码
  • C#编写的winform,启动后,自动检测U盘插入,如果有U盘插入电脑,则自动开始后台静默复制U盘文件到本地。
  • 检测U盘插拔事件检测U盘插拔事件检测U盘插拔事件
  • U盘加密狗的VB源代码

    2021-05-12 17:43:56
    摘要:VB源码,其它类别,加密狗,U盘 加密狗包含VB源代码,利用设定的优盘作为加密狗,实时检测加密狗是否存在。内含计算MD5值的算法。作者:海不扬波,源代码供学习。
  • 该C#代码可监控是否有u盘插入,同时可以监控其它驱动器的变化 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; ...
  • 说明 ...某些应用程序,在使用USB设备的过程中,也希望能够侦测到USB断开事件,不至于某些工作因为USB已经不存在而白做,或者就是需要显示U盘是否插入的图标。在Linux下,主要有两种办法检测USB热插拔

    文章参考:https://blog.csdn.net/newnewman80/article/details/8766657

    说明

    做嵌入式开发,尤其在网关、路由器或者其他支持USB设备的终端上,为了提高用户体验,我们常常需要支持自动识别并挂载USB设备功能,USB的热插拔应用广泛,比如U盘、手机、USB网卡等。
    某些应用程序,在使用USB设备的过程中,也希望能够侦测到USB断开事件,不至于某些工作因为USB已经不存在而白做,或者就是需要显示U盘是否插入的图标。在Linux下,主要有两种办法检测USB热插拔。

    文件夹检测方式

    第一种便是定时检查/proc/scsi/目录下的文件,该文件内会按照标准格式保存着当前设备内挂载的存储介质基本信息,如果在PC端,除了硬盘(ATA)、光驱(CD-ROM)外,就是USB设备(Direct-Access)了,轮询该scsi文件,检查文件内是否新增或减少数据便可实现自动侦测USB热插拔的效果。

    但是这种方法对于热插拔(hotplug)设备,如U盘,效果就没那么理想了,因为我们不知道设备什么时候插上,又是什么时候被拔掉了,只能验证当前是否已经插上或者已经拔除的事实。应用程序一般可以使用定时器处理函数不断查询,从而实现U盘拔插状态的更新。

    针对上面这个问题,于是便有了另一种办法,我们采用一种特殊类的的文件描述符(套结字)专门用于Linux内核跟用户空间之间的异步通信,这种技术通常被成为NETLINK。

    插入U盘情况下显示: (我的仪器中为usb-storage文件夹)
    在这里插入图片描述
    拔出U盘后显示:
    在这里插入图片描述

    netlink捕获USB插拔事件方式

    Linux中使用udev来管理热插拔,使用netlink监听udev的消息可以为用户空间提供管理策略,通过解析消息中的字符串来完成控制逻辑,netlink捕获消息后,解析消息中的字符串可以进一步识别是哪种设备,从而在用户空间完成逻辑控制。

    由于NETLINK是Linux内置功能,所以使用起来很简单:

    1. 创建一个AF_NETLINK协议族下NETLINK_KOBJECT_UEVENT类型的特殊文件描述符(套结字)CppLive

    2. 然后利用setsocketopt允许该文件描述符(套结字)复用其他端口,再利用band函数将自身进程绑定到特殊文件描述符(套结字)CppLive

    3. 最后利用select在while循环内监听CppLive是否可读,如果可读则调用recv接收Linux系统内核传递过来的数据并打印出来,这些输出便是USB热插拔信息,当然你也可以个性化地处理来自内核的热插拔信息,让程序变得更加智能以及人性化。

    利用NETLINK检测USB热插拔的C语言实现代码如下:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <fcntl.h>
    #include <sys/socket.h>
    #include <linux/netlink.h>
    #define UEVENT_BUFFER_SIZE 2048
     
    int main(void)
    {
        struct sockaddr_nl client;
        struct timeval tv;
        int CppLive, rcvlen, ret;
        fd_set fds;
        int buffersize = 1024;
        CppLive = socket(AF_NETLINK, SOCK_RAW, NETLINK_KOBJECT_UEVENT);
        memset(&client, 0, sizeof(client));
        client.nl_family = AF_NETLINK;
        client.nl_pid = getpid();
        client.nl_groups = 1; /* receive broadcast message*/
        setsockopt(CppLive, SOL_SOCKET, SO_RCVBUF, &buffersize, sizeof(buffersize));
        bind(CppLive, (struct sockaddr*)&client, sizeof(client));
        while (1) {
            char buf[UEVENT_BUFFER_SIZE] = { 0 };
            FD_ZERO(&fds);
            FD_SET(CppLive, &fds);
            tv.tv_sec = 0;
            tv.tv_usec = 100 * 1000;
            ret = select(CppLive + 1, &fds, NULL, NULL, &tv);
            if(ret < 0)
                continue;
            if(!(ret > 0 && FD_ISSET(CppLive, &fds)))
                continue;
            /* receive data */
            rcvlen = recv(CppLive, &buf, sizeof(buf), 0);
            if (rcvlen > 0) {
                printf("%s\n", buf);
                /*You can do something here to make the program more perfect!!!*/
            }
        }
        close(CppLive);
        return 0;
    }
    
    展开全文
  • 同标题,我是想做一个软件,只有指定的U盘插入才会运行该程序。
  • 内容索引:VB源码,系统相关,USB,U盘插拨监测 这个小例子虽然很简单,但却很实用,它完成了自动监测U盘等移动设备在插入或拨出电脑时弹出提示,当然你可能需要的不是它弹出提示,而是判断是否有设备插拨,不过稍微改...
  • 为了便于用户熟悉 USB118AD 产品,帮助用户快速使用UART 串口进行通信,我们特别设计了STC12C4052 单片机(MCS51 核)的测试板,并提供详细的测试程序C 源码供用户参考测试。因为所提供的程序只是测试产品功能,所以...
  • 批处理 检测U盘插入并自动备份文件

    千次阅读 2020-10-17 01:54:08
    粘贴如下代码到文本文档保存,改后缀为bat运行即可 :start @echo off ::若检测到U盘插入,则自动拷贝文件到U盘 ::pt为自动备份的目录路径 setlocal enabledelayedexpansion set "pt=D:\Desktop\自动备份" :check ...

    复制如下代码,在文本文档中以ANSI编码另存,改后缀为bat,运行即可

    :start
    @echo off
    ::若检测到U盘插入,则自动拷贝文件到U盘
    ::pt为自动备份的目录路径
    setlocal enabledelayedexpansion
    set "pt=D:\Desktop\自动备份"
    :check
    echo 正在检测U盘
    for %%i in (d e f g h i j k ) do (
    fsutil fsinfo drivetype %%i: | findstr "可移动" >nul 2>nul && set upan=%%i:
    )
    if "%upan%"=="" (
    echo 未检测到U盘
    ping -n 2 127.0.1>nul
    cls
    goto :check
    )
    echo 检测到U盘
    echo 本次复制的文件:
    if exist "%upan%\备份" (
    ::copy "!pt!\*.*" "%upan%\备份\" /v
    xcopy "!pt!\*.*" "%upan%\备份\" /s /h /d /c /y
    goto :1
    ) else (
    md "%upan%\备份"
    ::copy "!pt!\*.*" "%upan%\备份\"
    xcopy "!pt!\*.*" "%upan%\备份\" /s /h /d /c /y
    )
    goto :2
    :1
    echo 已成功将目录文件备份至U盘
    ping -n 2 127.0.1>nul
    pause>nul
    goto :start
    :2
    echo 已成功将目录文件备份至U盘
    ping -n 2 127.0.1>nul
    pause>nul
    goto :start

    Xcopy的扩展命令:

    /c 忽略错误并继续其他文件的复制

    /d 复制新文件,已复制的将不再重新复制;若有新版本文件,将覆盖旧版本文件

    /s 复制非空的目录和子目录。如果省略 /s,xcopy 将在一个目录中工作

    /h 复制具有隐藏和系统文件属性的文件(默认情况下,xcopy不复制隐藏或系统文件)

    /y 不提示要覆盖文件

    /z 断点续传

    创建文件夹:

    md "路径"

    echo 显示字符串

    pause>nul 暂停、按任意键继续

    :start 标记,配合goto语句使用

    goto :start 跳转到标记处

    运行效果:

    原路径:

    U盘:

    Tips:

    如果出现乱码,则编码选择ANSI

    对于U盘来说,存放大量的小文件是比较头疼的事情

    可以先压缩再备份

    @echo off

    ::pt是待压缩的文件夹路径
    set pt=D:\3dMaxWorkplace
    ::需要添加环境变量path C:\Program Files\WinRAR;
    WinRAR a -r D:\Desktop\自动备份\"%pt:~3%" %pt%

    ::D:\Desktop\自动备份\"%pt:~3%"是压缩包存放路径,压缩包以原文件夹命名
    pause

    效果:

    如需限制拷贝的文件类型,比如我只想要mp4

    只需要将代表后缀的*号替换为mp4即可

    xcopy "!pt!\*.mp4" "%upan%\备份\" /s /h /d /c /y

    copy与xcopy的区别

    copy只能复制指定文件,不能复制指定的文件夹及其子目录

    set pt="D:\Desktop\测试"
    copy /v /y /z "%pt%\*.*" "F:\备份"
    pause

    测试文件夹:

    备份文件夹:

    可见,copy只能复制路径下的文件,不能复制子目录及其文件

    不过,copy可以显示复制进度条,xcopy不可以

    美中不足的是,批处理无法做到弹出U盘,因为在命令行时代甚至没有USB接口

    写在最后

    这个脚本其实并不符合使用逻辑,因为用户并不能让这个脚本一直保持运行

    与其这样,不如在插入U盘时手动备份,请看如下解决方案:

    https://blog.csdn.net/weixin_43673589/article/details/109191675

    展开全文
  • 检测U盘的盘符

    2014-08-19 11:34:45
    这是一个检测U盘盘符的TXT文档,你们可以在这里卖弄看看一下,仅供参考
  • 检测U盘 插入 拔出 Delphi7.0
  • VC++做的U盘检测程序

    热门讨论 2013-07-01 16:28:05
    基于VS2010C++做的U盘、可移动硬盘插入检测程序,代码短小、简洁、明晰。程序界面友好素雅。 水平有限,仅供参考!
  • Windows系统U盘的检测

    2020-03-31 17:14:20
    一、注册表中与U盘相关的键 1.\\HKEY_LOCAL_MACHINESYSTEM\\CurrentControlSet\\Services\\USBSTOR\\Enum,该键中有本机连接的所有U盘的设备路径,Count为U盘的数量,数字键对应的值为U盘的设备路径,形如:USB\VID...

     一、注册表中与U盘相关的键

    1. \\HKEY_LOCAL_MACHINESYSTEM\\CurrentControlSet\\Services\\USBSTOR\\Enum ,该键中有本机连接的所有U盘的设备路径,Count为U盘的数量,数字键对应的值为U盘的设备路径,形如:USB\VID_1E3D&PID_2096\CCBB123456EE012B;

    2. \\HKEY_LOCAL_MACHINESYSTEM\\CurrentControlSet\\Services\\disk\\Enum,该键中存储有物理磁盘设备的路径;count为磁盘数量,数字键对应的值为设备路径,形如:USBSTOR\Disk&Ven_2.0&Prod_Flash_Disk&Rev_2.61\CCBB123456EE012B&1;

    3. \\HKEY_LOCAL_MACHINESYSTEM\\CurrentControlSet\\Services\\cdrom\\Enum,该键中存储有光驱的设备路径,Count为数量,数字键名对应的键值为设备路径,形如:USBSTOR\CdRom&Ven_2.0&Prod_Flash_Disk&Rev_2.60\CCBB123456EE012B&0;

    4. \\HKEY_LOCAL_MACHINESYSTEM\\MountedDevices,该键中有\DosDevices\X:的键名,X为盘符,其值为对应设备的路径,如:“\DosDevices\E:”的键值为:\??\USBSTOR#CdRom&Ven_2.0&Prod_Flash_Disk&Rev_2.60#CCBB123456EE012B&0#{53f5630d-b6bf-11d0-94f2-00a0c91efb8b},“\DosDevices\F:”的键值为:_??_USBSTOR#Disk&Ven_2.0&Prod_Flash_Disk&Rev_2.61#CCBB123456EE012B&1#{53f56307-b6bf-11d0-94f2-00a0c91efb8b};

     二、检测U盘的流程

    1. 查询上述1-3所有的键值,存储在三个vector<string>中,然后逐个遍历通过关键字找出各自的对应关系,把对应的值存入USBNod中,USBNode定义如下:

    struct UsbNod               //检索本机U盘节点,通过检索注册表获取
    {
        LPCTSTR usb;            //U盘的对应USB设备
        LPCTSTR cdrom;          //U盘对应的光驱设备路径
        string cdvol;           //U盘对应的光驱盘符
        LPCTSTR disk;           //U盘对应的大容量磁盘设备路径
        string diskvol;         //U盘对应的盘符
    };

    遍历对应关系的代码如下:

    //构造系统USB设备的节点数组
    char* USBSTOR_key = "SYSTEM\\CurrentControlSet\\Services\\USBSTOR\\Enum";
    vector<string> USBSTOR_vals;
    getRegEnumValues(USBSTOR_key , USBSTOR_vals);
    
    char* USBDISK_key = "SYSTEM\\CurrentControlSet\\Services\\disk\\Enum";
    vector<string> USBDISK_vals;
    getRegEnumValues(USBDISK_key , USBDISK_vals);
    
    char* USBCDROM_key = "SYSTEM\\CurrentControlSet\\Services\\cdrom\\Enum";	
    vector<string> USBCDROM_vals;
    getRegEnumValues(USBCDROM_key , USBCDROM_vals);
    
    UsbNod usbdisknod[26];
    int count = 0;
    for (unsigned int i = 0; i < USBCDROM_vals.size(); i++)
    {
        int pos = USBCDROM_vals.at(i).rfind('\\') + 1;
        string serialnum = USBCDROM_vals.at(i).substr(pos, USBCDROM_vals.at(i).size());
        serialnum = serialnum.substr(0,serialnum.size() - 2);
        for (unsigned int j = 0; j < USBSTOR_vals.size(); j++)
        {
            if (USBSTOR_vals.at(j).find(serialnum) == -1)
                continue;
            for (unsigned int k = 0; k < USBDISK_vals.size(); k++)
            {
                if (USBDISK_vals.at(k).find(serialnum) == -1)
                    continue;
                usbdisknod[count].cdrom = USBCDROM_vals.at(i).data();
                usbdisknod[count].disk = USBDISK_vals.at(k).data();
                usbdisknod[count].usb = USBSTOR_vals.at(j).data();
                usbdisknod[count].diskvol = getVolFromDevicePath(USBDISK_vals.at(k));
                usbdisknod[count].cdvol = getVolFromDevicePath(USBCDROM_vals.at(i));
                count++;
            }
        }
    }

    读取注册表键值构造vector的函数

    //检索Emnu类型的USB设备相关的注册表键值,返回获取到的数量,循环读取内容内容保存在 vector<string> &values
    int getRegEnumValues(LPCTSTR key, vector<string> &values)
    {
        values.clear();
        CRegKey usbreg;
        long rt = usbreg.Open(HKEY_LOCAL_MACHINE, key, KEY_READ | KEY_ALL_ACCESS);
        if (rt != ERROR_SUCCESS)  return 0;
        DWORD count = 0;
        usbreg.QueryDWORDValue("Count", count);
        if (count == 0) return 0;
        DWORD i, j = 0;
        for (i = 0; i<count; i++)
        {
            char vname[2];
            sprintf_s(vname, "%d", i);
            DWORD len = 256;
            char kValue[256];
            if (usbreg.QueryStringValue(vname, kValue, &len) == ERROR_SUCCESS)
            {
                string v(kValue);
                if (v.find("USB") != -1)
                {
                    values.push_back(kValue);
                    //printf("%s\n",kValue);
                    j++;
                }
            }
        }
        usbreg.Close();
        return j;
    }

    2. 获取U盘对应光盘与磁盘盘符的方法

    //根据设备路径获取其对应的盘符
    string getVolFromDevicePath(string pDPath)
    {
        string::iterator it = pDPath.begin();
        for (; it != pDPath.end(); it++)
            if (*it == '\\') *it = '#';
        
        int DeviceNum = 1001;
        if (pDPath.find("Disk") != -1)    //如果设备路径中有disk字符,则构造如下路径
        {	
            char ph_Path[MAX_PATH];
            sprintf_s(ph_Path, "\\\\?\\%s#{53f56307-b6bf-11d0-94f2-00a0c91efb8b}", pDPath.data());
            DeviceNum = GetPhysicalDriveFromDevicePath(ph_Path);
            //获取磁盘设备地址对应的物理磁盘号
        }
        
        string vol;			//得到U盘盘符;    
        LPTSTR lpDrives = new TCHAR[MAX_PATH];
        DWORD dwLen = ::GetLogicalDriveStrings(MAX_PATH, lpDrives);
        char* sDrives[26] = { "" };
        for (DWORD nIndex = 0; nIndex < dwLen / 4; nIndex++)
        {
            UINT dType = ::GetDriveType(lpDrives + nIndex * 4);
            if (dType == DRIVE_REMOVABLE || dType == DRIVE_CDROM)
            {
                sDrives[nIndex] = (lpDrives + nIndex * 4);
                if (sDrives[nIndex] != "A:\\" && sDrives[nIndex] != "B:\\")
                {
                    //获取盘符对应的MountedDevices中对应的键值
                    string volkey = getVolKey(sDrives[nIndex][0]);
                    int pnum = 1002;
                    //该判断增加对XP系统的支持,在XP中U盘盘符对应的MountedDevices
                    //的键值与以上2中值不同需要通过获取其物理磁盘号进行比较
                    if (dType == DRIVE_REMOVABLE)
                        pnum = GetPhysicalDriveFromPartitionLetter(sDrives[nIndex][0]);
                    if (pnum == DeviceNum || volkey.find(pDPath) != -1)
                    {
                        vol = string(sDrives[nIndex]);
                    }
                }
            }
        }
        delete lpDrives;
        return vol;
    }

    以上注册表键值由windows系统服务维持,经使用还是比较可靠的,未尽问题是对于U盘仅检测有一个U盘盘符的情况,多个U盘盘符未做处理,不过根据源码应该很容易写出。

    通过CSDN学习了很多,今天终于自己写了一点东西,不对之处欢迎拍砖。

    展开全文
  • 内容索引:VB源码,系统相关,USB,U盘 VB检测U盘插入并自动复制指定文件的一个实例程序,功能咋看上去像病毒呢?难道不通知主人就有自动复制文件吗?的确,这个小程序经常被人用作搞恶作剧或是编写病毒,还是希望你...
  • 开机自动检测后 查看检查代码 nano report.txt 下面是检查结果 mats version 400.184. Testing GP102 with 20 MB of memory starting with 0 MB. Read Error Count: 0 Write Error Count: 1526613 Unknown Error ...
  • 【实例简介】Qt-detect-Udisk老外写的qt检测U盘,没有使用hal或udisks,而是使用的tcpsocket和内核的netlink通信。可以在windows和linux上运行,据作者说正在测试wince平台。真牛啊。详见老外的资料链接:...

    【实例简介】

    Qt-detect-Udisk老外写的qt检测U盘,没有使用hal或udisks,而是使用的tcpsocket和内核的netlink通信。可以在windows和linux上运行,据作者说正在测试wince平台。真牛啊。详见老外的资料链接:http://developer.qt.nokia.com/forums/viewthread/9605/

    【实例截图】

    【核心代码】

    Qt-detect-Udisk

    └── wang-bin-qdevicewatcher-d8785a2

    ├── common.pri

    ├── QDeviceWatcher.pro

    ├── QDeviceWatcher.sln

    ├── README

    ├── src

    │   ├── libQDeviceWatcher.pri

    │   ├── libQDeviceWatcher.pro

    │   ├── qdevicechangeevent.cpp

    │   ├── qdevicechangeevent.h

    │   ├── qdevicewatcher.cpp

    │   ├── qdevicewatcher_global.h

    │   ├── qdevicewatcher.h

    │   ├── qdevicewatcher_linux.cpp

    │   ├── qdevicewatcher_p.h

    │   ├── QDeviceWatcher.vcproj

    │   ├── qdevicewatcher_win32.cpp

    │   └── qdevicewatcher_wince.cpp

    ├── test

    │   ├── hotplugwatcher_gui.cpp

    │   ├── hotplugwatcher_gui.h

    │   ├── hotplugwatcher_gui.pro

    │   ├── hotplugwatcher_gui.vcproj

    │   ├── hotplugwatcher.h

    │   ├── hotplugwatcher.pro

    │   ├── hotplugwatcher.vcproj

    │   ├── main.cpp

    │   └── main_gui.cpp

    └── TODO.txt

    3 directories, 26 files

    展开全文
  • QT:检测U盘插入和拔出(windows)

    千次阅读 2019-11-19 16:56:23
    2、可以使用GetDriveType函数来获取驱动器的类型,以下是函数的链接; https://docs.microsoft.com/zh-cn/windows/win32/api/fileapi/nf-fileapi-getdrivetypea?redirectedfrom=MSDN 3、通过数量变化来判断插入...
  • C代码实现可以检测监控windows系统中是否有U盘接入
  • 为了讲课写的一个小脚本,水平有限,也在网上参考了一些其他人的代码,在代码中进行了简单的注释,基本可以实现自动从U盘中将特定类型的文件复制出来,也可以指定关键字进行复制,不过只能二选一,具体的功能可以...
  • QT全自动检测,挂载U盘

    2021-03-25 11:12:09
    代码主要用到内核的通信机制netLink用于检测U盘挂载卸载事件. Qt则没有使用界面直接后台运行即可,当然加个sh的守护进程也必不可少. U盘检测代码: checkudisk.h //用于检测U盘等设备 用于挂载卸载 #ifndef ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 18,221
精华内容 7,288
关键字:

怎么用代码测u盘