最近发现PowerShell脚本可以获取到USB外接设备列表,进而得到打开安卓手机文件夹的路径,参考动作。
# 获取所有 USB 设备,筛选出符合条件的设备
$usbDevices = Get-WmiObject -Query "SELECT * FROM Win32_PnPEntity WHERE DeviceID LIKE 'USB%'"
# 筛选符合条件的设备
$filteredDevices = $usbDevices | Where-Object {
$_.Service -eq "WUDFWpdMtp"
}
# 将符合条件的设备以 CSV 格式的文本输出 名DeviceID设备ID(指向路径的一部分)、称Name
$filteredDevices | ForEach-Object {
"$($_.DeviceID):$($_.Name)"
}
老大也许可以用更简洁代码合并到这个子程序里面,改进这个子程序只是开始,进一步可以研究改进 事件触发的磁盘插入事件,目前只对接入U盘和硬盘会触发事件,希望可以增加对 USB连接的手机的识别 ,讨论区也有人提过检测相机连接到电脑 我没有相机不确定,只能确定安卓手机是有效的。
后面的需求可能很冷门有兴趣的话再看看:进一步改善【获取资源管理器路径/跳转路径】模块获取的路径、所有打开的路径,目前的手机路径既无法辨识也不能使用。
再进一步改善排序,资源管理器操作(子程序https://getquicker.net/subprogram?id=2c336234-de82-4f82-f963-08dabe0047bb&version=7)的顺序和任务栏一致,而qk获取的列表和访问顺序一致, 感觉任务栏顺序更符合直观,如果能给个选项提供这种排序结果。
============================================================================
以下信息供参考:
一、运行模块能使用的有效路径:
例1::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\\\?\usb#vid_22d9&pid_2765&mi_00#6&19a66ed&0&0000#{6ac27878-a6fa-4155-ba85-f98f491d4f33}\内部共享存储空间\Pictures
例2::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\\\?\usb#vid_2717&pid_ff40#1ec12364#{6ac27878-a6fa-4155-ba85-f98f491d4f33}\内部存储设备\Pictures
此电脑(win10win11此电脑,Win7计算机)\\\?\usb#vid码&pid码&USB调试固定标识#USB调试数字&手机码&USB调试补充标识#固定结尾\存储空间名称\手机实际路径
主要分为2类,(带背景颜色)固定的开头结尾部分、vid码pid码、手机码,以及(不带背景颜色)根据情况而定的USB调试标识、存储空间名称、手机实际路径。
注:这些名称我只是暂时这么写,没有找到具体的资料。例1的USB调试是开启状态安卓14,例2没有开启USB调试安卓8。
此电脑USB固定开头:::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\\\?\usb
vid码&pid码:vid码品牌相关,同品牌手机一致;pid码品牌型号、MTP(PTP)、USB调试相关,同品牌手机全部条件相同时可能一致(条件不确定)。
USB调试数字: USB调试开启时才有,通常一位数字6(或9,条件不确定)。和下方的手机码 可以通过PowerShell脚本得到。
手机码:手机相关,根据MTP(PTP)、USB调试显示,即一部手机在各种状态下至少有4个固定的手机码。
USB调试补充标识:USB调试开启时才有,通常&0&0000(或&1&0000条件不确定)
固定结尾:路径到此为止可以打开“此电脑”设备和驱动器的手机(相当于磁盘卷C:\ 、D:\)后续可以按需添加存储空间名称、手机实际路径。
存储空间名称:安卓版本相关,内部共享存储空间(安卓14-13)或内部存储设备(安卓12-8)。
手机实际路径:电脑上面为手机\存储空间名称之后的路径(手机目录为/storage/emulated/0/),可以是文件夹和部分类型的文件,文件夹为打开窗口,文件会自动下载到本地缓存文件夹进行播放,比如图片、mp3、视频。
::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\\\?\usb#vid_22d9&pid_2765&mi_00#6&19a66ed&0&0000#{6ac27878-a6fa-4155-ba85-f98f491d4f33}\SID-{10001,,241916936192}\{675778CF-2BA1-30B0-0000-000000000000}
::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\\\?\usb#vid_22d9&pid_2771#287bb3d1#{6ac27878-a6fa-4155-ba85-f98f491d4f33}\SID-{10001,,114240204800}\{0AEC74FE-0000-0000-0000-000000000000}
三、区别和一些规律
目前的模块获取路径的存储空间名称 和 手机实际路径部分是 Guid标识符(同一部手机同一个路径是固定的与其它状态无关),并不能在运行模块中使用。
规律1:在某些情况下(在手机上面修改少量文件?)会整体重新生成手机实际路径的Guid(也可能一部分和之前一样),存储空间名称的Guid不会变。
规律2:同样的文件夹名的子文件夹比如\Pictures\Pictures Guid完全不同\{0B3AF336-0000-0000-0000-000000000000}\{59DB243C-0000-0000-0000-000000000000}。
折中的思路:文件夹选项标题显示完整路径, 窗口标题可以得到“此电脑\MI 6\内部存储设备\Pictures“,结合PowerShell脚本的设备信息拼接出路径。