U盘自动启动 - 洛阳翼展电脑


U盘自动启动

2025-3-28 乱云飞

#Persistent
#SingleInstance ignore

; === 配置部分 ===
Allowed_USB_IDs := ["EZSOFT", "bakevision"]  ; 允许的U盘卷标列表
CheckInterval := 3000                       ; 检测间隔(毫秒)
TargetExePath := "ezsoft\ez30.exe"      ; 目标程序路径
TargetExeName := "ez30.exe"             ; 目标进程名(不含路径)
ConfigExePath := "ezsoft\虚拟监控.exe"                   ; 配置程序路径(U盘根目录)
DebugMode := false                      ; 调试模式(true显示提示)

; === 全局变量 ===
CurrentUSBDrive := ""                      ; 当前检测到的U盘盘符

; === 托盘图标设置 ===
Menu, Tray, NoStandard                     ; 移除标准菜单项
Menu, Tray, Add, 设置, RunConfig           ; 添加设置菜单
Menu, Tray, Add                            ; 添加分隔线
Menu, Tray, Add, 退出, ExitScript           ; 添加自定义退出选项
Menu, Tray, Tip, USB监控程序                ; 设置托盘提示文本
Menu, Tray, Icon                           ; 显示托盘图标

; === 主循环:检测U盘 ===
SetTimer, CheckUSB, %CheckInterval%
return

CheckUSB:
    DriveGet, driveList, List, Removable
    foundValidDrive := false
    
    Loop, Parse, driveList
    {
        driveLetter := A_LoopField ":\"
        DriveGet, driveStatus, Status, %driveLetter%
        
        if (driveStatus = "Ready")
        {
            ; 获取U盘卷标
            DriveGet, volumeName, Label, %driveLetter%
            if (DebugMode)
                MsgBox, [检测] U盘卷标:%volumeName%
            
            ; 检查是否是指定U盘之一
            for index, allowedID in Allowed_USB_IDs
            {
                if (volumeName = allowedID)
                {
                    foundValidDrive := true
                    CurrentUSBDrive := driveLetter  ; 更新当前U盘盘符
                    
                    ; 检查目标程序是否已在运行
                    Process, Exist, %TargetExeName%
                    if (ErrorLevel = 0)  ; 未运行
                    {
                        exePath := driveLetter . TargetExePath
                        if FileExist(exePath)
                        {
                            Run, %exePath%
                            if (DebugMode)
                                MsgBox, [操作] 启动程序:%exePath%
                        }
                        else if (DebugMode)
                            MsgBox, [错误] 未找到程序:%exePath%
                    }
                    else if (DebugMode)
                        MsgBox, [跳过] 程序已在运行(PID:%ErrorLevel%)
                    
                    break  ; 找到匹配的卷标后跳出循环
                }
            }
        }
    }
    
    ; 如果没有检测到有效U盘,清空当前盘符记录
    if (!foundValidDrive)
        CurrentUSBDrive := ""
return

; === 运行配置程序 ===
RunConfig:
    if (CurrentUSBDrive = "")
    {
        MsgBox, 未检测到有效的U盘!
        return
    }
    
    configExeFullPath := CurrentUSBDrive . ConfigExePath
    if FileExist(configExeFullPath)
    {
        Run, %configExeFullPath%
        if (DebugMode)
            MsgBox, [操作] 启动配置程序:%configExeFullPath%
    }
    else
        MsgBox, 未找到配置程序:%configExeFullPath%
return

; === 退出脚本函数 ===
ExitScript:
    ; 关闭虚拟监控进程
    Process, Close, %TargetExeName%
    if (DebugMode)
        MsgBox, [操作] 已尝试关闭虚拟监控进程
    
    ; 退出脚本自身
    ExitApp
return
本文链接:http://80c.cc/ez/830.html
0

发表评论:

VirtualCamera:在录像机中虚拟一个通道显示电脑桌面、视频文件、USB摄像头~
预ICP备10086-001号 © 翼展网/80C.CC 技术支持/洛阳翼展科技
TEL / 13213610060 QQ / 345794501
Powered by emlog