USBCopyer: 插上U盘自动按需复制文件

注:本文介绍的是带来巨量更新的USBCopyer V5

USBCopyer: 插上U盘自动按需复制文件

用于在插上目标U盘后自动按需复制该U盘的文件。”备份&偷U盘文件的神器”
特点:

  1. 支持设置冲突解决方案
  2. 支持选择性复制,包括扩展名黑白名单、磁盘黑白名单。磁盘黑白名单支持序列号
    白名单模式结合版本控制可以方便地备份U盘
  3. 支持隐藏模式及开机启动
  4. 支持设置回调,可以自己编写代码实现某种高级的、程序没有提供的功能。
    默认提供Git版本控制支持
  5. 支持限制文件大小,防止复制大文件造成延误
  6. 支持延迟复制,对“偷”课件类的场景提升用户体验十分有用

Screenshot

本程序有两个图标,默认图标表示当前处于空闲状态,红色图标表示当前正在复制文件(工作中)

现已提供三个版本(标准版/兼容版)可供下载,见“已编译版本下载”节

已编译版本下载

【推荐】.Net Framework 4.0 版本(标准版)

适用操作系统:Windows 8 / Windows 10
点击从[email protected]下载(中国大陆用户推荐) 点击从GitHub下载

.Net Framework 3.5 版本(兼容版)

适用操作系统:Windows 7 / Windows Vista / Windows XP
WinXP请注意:XP可能需要手动安装 .NET Framework 3.5,没有安装请点此
点击从[email protected]下载(中国大陆用户推荐) 点击从GitHub下载

自 V5.0 开始,标准版即为低权限版。不会弹出UAC警告。亦支持高DPI缩放。

适用场景

  1. 获取授课教师的课件
  2. 获取插到某台公用电脑上的U盘的数据
  3. 快捷地备份U盘(从V5.0开始)
  4. 备份U盘的同时进行版本控制

如何使用

1.下载
2.双击 USBCopyer.exe
3.程序将在托盘区运行,右击图标可以调整其参数
点击 “隐藏图标” 将彻底隐藏程序,只能使用任务管理器停止,或按Win+R输入taskkill /f /im USBCopyer.exe
点击 “设置” 可以设置程序

命令行

USBCopyer.exe [/hide] [/gui] [/reset]
/hide 以隐藏模式启动,只能通过任务管理器结束进程
/gui 除非使用 /hide 参数,否则无论如何都不要使用隐藏模式启动。可用来解除隐藏模式
/reset 恢复默认设置并退出,若失败,返回退出码1。可用来解除隐藏模式,但会丢掉所有设置

常见问题

USBCopyer的复制行为造成U盘的文件操作卡顿

请设置一个延迟。通常推荐在使用者开始放映幻灯片时开始复制

使用者在使用该电脑前重启了此电脑

将本程序设为开机启动即可。设置方法如下:

  1. 直接在本程序的“设置”中设置
  2. 若上面的方法无效,则可:
    创建一个快捷方式,然后加上参数,拖到 “开始菜单” 的 “启动” 文件夹即可
可否复制手机的文件?

若为MTP/PTP则无法实现(V6.0也许会实现),但如果是以Mass Storage(大容量存储)模式挂载到电脑上的设备则可以复制

U盘在操作完成前被拔出

请使用心理学方法防止U盘在操作完成前被拔出

如何防止拷到病毒?

安装杀毒软件,监控 USBCopyerData 目录即可

目标电脑带有还原机制

两种方法:
1.插上你的U盘,然后启动本程序,加入该U盘到黑名单,然后设置输出目录到你的U盘
2.用 PCHunter 之类的程序干掉还原程序

如何使用回调&如何配置Git版本控制?

参见:https://kenvix.com/post/usbcopyer-callback/

代码仓库

[email protected] GitHub
我的博客文章

捐赠

USBCopyer 是一个开源的,非盈利的项目。如果你喜欢这个项目,请捐赠它:

支付宝捐赠

Screenshot

微信支付捐赠

Screenshot

USBCopyer 回调功能详细说明

“回调” 是 USBCopyer V5.0 新引入的一个概念,它用于在 USBCopyer 执行特定操作时触发用户指定的代码或程序,以便实现某种高级的、程序没有提供的功能。

基本使用方法:

  1. 在USBCopyer设置打开回调的开关
  2. 打开USBCopyer所在目录下的 USBCopyer\USBCopyerSystem 文件夹
  3. 建立 回调名字.bat ,例如 AllCompletedCallback.bat
  4. 在里面写代码。可用的变量如下:

可用变量

书写以下内容就会被USBCopyer自动转换成相应的值。

变量名 说明
{$SystemDir} USBCopyer 所在目录
{$SystemVer} USBCopyer 版本号 例如 5.0.0.0
{$DataDir} USBCopyerData 所在目录(设置的数据目录)
{$USBDir} 本次复制所得的文件所在目录,不含{$DataDir}
{$VolumeSerialNumber} 磁盘序列号
{$VolumeName} 磁盘卷标(名字)
{$Volume} 磁盘盘符,例如G:
{$DriveType} 磁盘种类(返回数字)

磁盘种类:

1
2
3
4
5
6
7
Unknown (0)   
No Root Directory (1)
Removable Disk (2)
Local Disk (3)
Network Drive (4)
Compact Disc (5)
RAM Disk (6)

具体回调说明

当回调运行时,基准目录是 USBCopyer 所在目录下的 USBCopyerData\USBCopyerSystem 文件夹(无视数据目录设置)
回调的所有输出都会被捕获,并记入日志。

回调:AllCompletedCallback

在磁盘文件全部复制后触发,可以用于调用Git实现版本控制、调用云盘客户端实现上传等
当 USBCopyer 变成空闲状态时,便会创建一个新线程运行此回调

回调:DiskDetectedCallback

当磁盘插入时触发。可用于做复制判断
若 “(回调2)等待完成,并只允许返回0时复制” 启用,则该回调将阻塞复制线程,并在回调完成后且退出码为0时继续复制。
若上述设置未启用,则该回调对复制线程没有影响。
变量{$USBDir}不可用。强行获取将得到NONE

玩法实例:使用GIT进行版本控制

首先安装最新版本的 Git,安装过程一路 Next 即可
然后在 USBCopyerData 打开命令行或Powershell(win10为资源管理器点击左上角文件),输入:git init
然后保存以下代码到:USBCopyerData\USBCopyerSystem 文件夹,命名为 AllCompletedCallback.bat

1
2
3
4
5
6
7
@echo off
echo USBCopyer Git Tool // Written by Kenvix
echo USBCopyer Version: {$SystemVer}
cd ..
git add .
git commit --author "USBCopyer <[email protected]>" -m "AutoCommit: {$USBDir}" .
exit %ERRORLEVEL%

C# 实现自定义"应用程序设置"的配置文件(user.config)存储路径

关于“应用程序设置”: 前往MSDN查看

默认提供的 SettingsProvider 不允许我们修改应用程序设置的配置文件的路径,这就导致了以下问题:

  1. 设置保存在了 %appdata% 目录下,使应用程序不够绿色化
  2. 当用户把程序拷贝到其他电脑上时,设置将丢失
  3. 当用户升级程序时,设置将丢失(自带的 Upgrade() 过于复杂)

要解决上述问题,就需要由我们自己来定义在哪里存储应用程序设置
MSDN给出的方法是:自己实现一个 SettingsProvider

Win10 资源管理器为所有格式激活“编辑”按钮并修改文本文件“编辑”按钮的编辑器

默认情况下,Windows 10 资源管理器的功能区对绝大多数文本格式的不可用的,即使能够使用(例如 .js .cpp .txt 等格式),“编辑”按钮所对应的编辑器也是废物一般的记事本(用记事本写代码?),使得这个“编辑”按钮显得华而不实。为了让编辑文本更加方便、充分利用这个“编辑”按钮,本文将介绍如何通过修改注册表以为为所有格式激活“编辑”按钮并修改文本文件“编辑”按钮的编辑器

思路

Windows10 功能区的“编辑”按钮可用与否取决于注册表中HKEY_CLASSES_ROOT中对应的格式下的shell项是否存在edit子项,若edit项存在,则该按钮可用
只需增加edit子项并设置启动命令行即可激活编辑按钮或达到更改编辑器的目的

实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\shell]

[HKEY_CLASSES_ROOT\*\shell\edit]

[HKEY_CLASSES_ROOT\*\shell\edit\command]
@="\"编辑器路径\" \"%1\""

[HKEY_CLASSES_ROOT\txtfile\shell]

[HKEY_CLASSES_ROOT\txtfile\shell\edit]

[HKEY_CLASSES_ROOT\txtfile\shell\edit\command]
@="\"编辑器路径\" \"%1\""

将上述代码中的 编辑器路径 替换为你的编辑器的路径,然后将上述代码保存为 1.reg ,双击导入即可