小工具管理器_v1.2_by_LL

;2015-10-27
;v1.2
;修复不兼容AutoHotkey内置变量的bug
;增加和两种在配置文件中使用的行首处标记,标记所在行的有效性由系统位数决定

;2015-10-23
;v1.0

#Persistent
#SingleInstance force

DetectHiddenWindows On  ; 允许探测脚本中隐藏的主窗口。
SetTitleMatchMode 2  ; 避免需要指定如下所示的文件的完整路径。
OnExit, ExitSub

Menu,Tray,Icon,%A_WinDir%system32Shell32.dll,40,1
进程命令:={}
OSBit:=A_Is64bitOS?64:32
OSBitOmit32:=A_Is64bitOS?64:
goto RunSub
Return

RunSub:
SplitPath, A_ScriptFullPath, , , , ScriptNameTemp ;获取脚本名
IfNotExist, %A_ScriptDir%%ScriptNameTemp%.ini
{
    ContentTemp=#~ `;小工具管理器_v1.2 2015-10-27 by LL`n`n#~ `;此脚本用于集中启动和关闭需要常驻内存的小工具类程序,请按格式在尾部自行添加;`n#~ `;用“;”或“#~”注释掉的行会被自动跳过;`n#~ `;以和开头的行,仅在指定位数的系统中有效,无标记的则为通用;`n#~ `;务必将程序路径用双引号引起来;`n#~ `;要添加不必自动启动而又需要自动关闭的程序时,将等号右边留空即可;`n#~ `;可以使用两个变量在不同系统位数指向不同的主程序;`n#~ `;变量`%OSBit`%在32位系统下值为“32”,在64位系统下值为“64”;`n#~ `;变量%OSBitOmit32%在32位系统下为空值,在64位系统下值为“64”;`n#~ `;没有经过严格测试,也没有出错时的处理机制,造成不便,请勿拍砖;`n`n#~ `;示例:`n#~ `;Notepad.exe="`%A_WinDir`%System32Notepad.exe" "C:log.txt"`n`n
    FileAppend, %ContentTemp%, %A_ScriptDir%%ScriptNameTemp%.ini
    Run %A_ScriptDir%%ScriptNameTemp%.ini
    ContentTemp=
}
    
Loop, Read, %A_ScriptDir%%ScriptNameTemp%.ini ;按行读取与脚本名同名的配置文件
{
    CurrentLineContent:=A_LoopReadLine
    if % A_LoopReadLine="" ;跳过空行
        continue
    IfInString, A_LoopReadLine, #~ ;跳过注释行
        continue
    IfInString, A_LoopReadLine,; ;跳过注释行
        continue
    if % RegExMatch(A_LoopReadLine, "S)^<.>", AppBitMark)0 ;如果行首处存在标记用字符串
    {
        if % SubStr(A_LoopReadLine, 1, StrLen(AppBitMark))="" ;如果为兼容的行
            CurrentLineContent:=RegExReplace(A_LoopReadLine, "^<.>") ;则去掉行首处标记,视为通用程序处理
        else
            continue ;否则跳过不兼容的行
    }
    ExeName:=RegExReplace(CurrentLineContent, "S)(="".+)|(=$)") ;匹配等号前的部分
    StringMid, ExeCmd, CurrentLineContent, StrLen(ExeName)+2 ;%ExeCmd%包含程序路径和参数
    RegExReplace(ExeCmd, "S)(%[^%]+?%)", "", VarCount) ;计算该行配置中变量的个数
    FoundPos=0
    Loop % VarCount
    {
        FoundPos := RegExMatch(ExeCmd, "S)(%[^%]+?%)", VarInExeCmd, FoundPos+1) ;提取变量名
        StringReplace, UnquotedVarInExeCmd, VarInExeCmd, `%, , All ;去掉变量名两边的"%"
        UnquotedVarInExeCmd:=%UnquotedVarInExeCmd% ;将变量名转换为具体值
        StringReplace, ExeCmd, ExeCmd, %VarInExeCmd%, %UnquotedVarInExeCmd%, All ;替换运行命令中的变量名为具体值
    }
    进程命令.Insert(ExeName,ExeCmd)
    ;~ msgbox % 进程命令[ExeName]
    Process, Exist, %ExeName%
    if % ErrorLevel=0 ;如果不存在同名进程
        Run % 进程命令[ExeName] ;则运行指定程序
}
Return

ExitSub:
Menu, Tray, NoIcon
MsgBox, 36, 提示, 是否关闭所有小工具?
IfMsgBox, Yes ;如果选择“是”
{
    for ExeName,ExeCmd in 进程命令
        Process, Close, %ExeName% ;则关闭所有进程
    ExitApp
}
else
    ExitApp
Return

给TA捐赠
共{{data.count}}人
人已捐赠
其他

对象中函数的应用

2020-3-9 2:18:44

其他

屏幕取色器

2020-3-9 2:20:44

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索