Jvcon / AHK2Manager

A toolkit to control all running instances of AutoHotkey(V2.0+).
GNU General Public License v2.0
66 stars 3 forks source link

这个我之前也写了一个发上来大家一起借鉴下 #1

Open 100730088 opened 1 year ago

100730088 commented 1 year ago

` ; #SingleInstance ; Persistent

; SetTitleMatchMode 2 ; DetectHiddenWindows 1

; ScriptArrayTemp := Map() ; ScriptArrayFile := Map()

; SplitPath(A_AhkPath, , &WorkDir) ; 设置工作路径 ; WorkDir_Lib := WorkDir . "\Lib\" ; WorkDir_Scripts := WorkDir . "\Scripts\" ; WorkDir_Shortcut := WorkDir . "\Scripts\Shortcut\" ; WorkDir_Resource := WorkDir . "\Scripts\Resource\"

ScriptManager_Menu: { scripts_menu_open_more := Menu() scripts_menu_open_more.Add() scripts_menu_open_more.Delete()

scripts_menu_open := Menu()
scripts_menu_open.Add("更多脚本(&Q)", scripts_menu_open_more)
scripts_menu_open.Add()

scripts_menu_close := Menu()
scripts_menu_close.Add("全部关闭(&C)", scripts_func_closeall)
scripts_menu_close.Disable("全部关闭(&C)")
scripts_menu_close.Add()

scripts_menu_reload := Menu()
scripts_menu_reload.Add("全部重载(&R)", scripts_func_reloadall)
scripts_menu_reload.Disable("全部重载(&R)") 
scripts_menu_reload.Add()
; scripts_menu_reload.Delete()

scripts_menu_edit_more_self := Menu()

scripts_menu_edit_more := Menu()

scripts_menu_edit := Menu()
scripts_menu_edit.Add("程序配置(&A)", scripts_menu_edit_more_self)
scripts_menu_edit.Add("更多脚本(&E)", scripts_menu_edit_more)
scripts_menu_edit.Add()

scripts_menu_help := Menu()
scripts_menu_help.Add("AutoHotkey.chm", scripts_func_open.Bind(,,WorkDir "\AutoHotkey.chm"))
scripts_menu_help.Add

Tray := A_TrayMenu
Tray.Delete
Tray.ClickCount := 1

Tray.Add("启动(&Q)", scripts_menu_open)
Tray.Add("关闭(&C)", scripts_menu_close)
; Tray.Add()
Tray.Add("重载(&S)", scripts_menu_reload)
Tray.Add("编辑(&E)", scripts_menu_edit)
Tray.Add()
Tray.Add("帮助(&H)", scripts_menu_help)
Tray.Add("目录(&D)", scripts_func_dir)
Tray.Add()
Tray.Add("暂停(&P)", scripts_func_pause)
Tray.Add("重启(&R)", scripts_func_reload_self)

}

ScriptManager_Loop()

Include "%A_ScriptDir%\AutoHotkey-HurryRun!.ahk"

Return

ScriptManager_Loop() { scripts_menu_open.Delete scripts_menu_open_more := Menu() scripts_menu_open.Add("更多脚本(&Q)", scripts_menu_open_more) scripts_menu_open.Add

scripts_menu_close.Delete
scripts_menu_close.Add("全部关闭(&C)", scripts_func_closeall)
scripts_menu_close.Disable("全部关闭(&C)")
scripts_menu_close.Add()

scripts_menu_reload.Delete
scripts_menu_reload.Add("全部重载(&R)", scripts_func_reloadall)
scripts_menu_reload.Disable("全部重载(&R)") 
scripts_menu_reload.Add()

scripts_menu_edit.Delete
scripts_menu_edit_more_self := Menu()
scripts_menu_edit_more := Menu()
scripts_menu_edit.Add("程序配置(&A)", scripts_menu_edit_more_self)
scripts_menu_edit.Add("更多脚本(&E)", scripts_menu_edit_more)
scripts_menu_edit.Add()

Loop Files (WorkDir_Scripts "*.ahk") ;循环查找脚本
{
    SplitPath(A_LoopFileFullPath, &name, &dir, &ext, &name_no_ext, &drive)

    script_name := (ext == "ahk") ? name_no_ext : name_no_ext "__L" ; ahkl的脚本加上后辍

    If (InStr(name, "Autohotkey")) ;脚本名包含'Autohotkey'
    {
        scripts_menu_edit_more_self.Add(script_name, scripts_func_edit.Bind(,,A_LoopFileFullPath)) ; 编辑脚本>>>程序配置
    }

    Else If (InStr(name, "!")) ;脚本名包含'!'
    {
        If WinExist(A_LoopFileName "ahk_class AutoHotkey") ;脚本在运行:编辑>更多、关闭、重载
        {
            scripts_menu_edit_more.Add(script_name, scripts_func_edit.Bind(,,A_LoopFileFullPath)) ; 编辑脚本>>>更多脚本
            scripts_menu_close.Add(script_name, scripts_func_close.Bind(,,A_LoopFileFullPath)) ; 关闭脚本
            scripts_menu_reload.Add(script_name, scripts_func_reload.Bind(,,A_LoopFileFullPath)) ; 重载脚本
        }
        Else ;脚本未运行:编辑>更多、启动>更多
        {
            scripts_menu_edit_more.Add(script_name, scripts_func_edit.Bind(,,A_LoopFileFullPath)) ; 编辑脚本>>>更多脚本
            scripts_menu_open_more.Add(script_name, scripts_func_open.Bind(,,A_LoopFileFullPath)) ; 启动脚本>>>更多脚本
        }
    }

    Else ;脚本文件名正常
    {
        If WinExist(A_LoopFileName "ahk_class AutoHotkey") ;脚本在运行:编辑、关闭、重载
        {
            scripts_menu_edit_more.Add(script_name, scripts_func_edit.Bind(,,A_LoopFileFullPath)) ; 编辑脚本
            scripts_menu_close.Add(script_name, scripts_func_close.Bind(,,A_LoopFileFullPath)) ; 关闭脚本
            scripts_menu_reload.Add(script_name, scripts_func_reload.Bind(,,A_LoopFileFullPath)) ; 重载脚本
        }
        Else ;脚本未运行:编辑、启动
        {
            scripts_menu_edit.Add(script_name, scripts_func_edit.Bind(,,A_LoopFileFullPath)) ; 编辑脚本
            scripts_menu_open.Add(script_name, scripts_func_open.Bind(,,A_LoopFileFullPath)) ; 启动脚本
        }
    }
}

Loop Files (WorkDir "\Help\*.chm") ;循环查找帮助文件
{
    SplitPath(A_LoopFileFullPath, &name, &dir, &ext, &name_no_ext, &drive)
    scripts_menu_help.Add(name_no_ext, scripts_func_open.Bind(,,A_LoopFileFullPath))
}

}

scripts_func_show(ItemName, ItemPos, MyMenu) ;显示主菜单 { ScriptManager_Loop() Sleep(0) Tray.Show }

scripts_func_dir(ItemName, ItemPos, MyMenu) ;打开主脚本路径 { Run(WorkDir) }

scripts_func_help(ItemName, ItemPos, MyMenu) ;打开帮助文件 { Run(WorkDir "\autohotkey.chm", , "max") }

scripts_func_pause(ItemName, ItemPos, MyMenu) ;暂停主脚本 { ; WM_COMMAND := 0x011 ; ID_FILE_SUSPEND := 65305 ; PostMessage WM_COMMAND, ID_FILE_SUSPEND,,, "X:\WebDAV\AutoHotkey\Scripts\AutoHotkey-CapsLayout!.ahk"

Suspend(-1)

if (A_IsSuspended = 1) ;脚本已暂停
{
    Tray.Rename("暂停程序(&P)", "继续程序(&P)") ;更改菜单文本
    A_IconTip := "AutoHotkey-Pause" ;更改任务栏鼠标提示
    TraySetIcon(WorkDir_Resource "\ICO\AutoHotkey-Pause.ico" ,,1) ;更改任务栏图标
}
Else ;脚本已继续
{
    Tray.Rename("继续程序(&P)", "暂停程序(&P)") ;更改菜单文本
    A_IconTip := "AutoHotkey" ;更改任务栏鼠标提示
    TraySetIcon(WorkDir_Resource "\ICO\AutoHotkey.ico") ;更改任务栏图标
}

}

scripts_func_reload_self(ItemName, ItemPos, MyMenu) ;重启主脚本 { Reload() }

scripts_func_open(ItemName, ItemPos, Path, MyMenu) ;打开选中脚本 { Run(Path) }

scripts_func_close(ItemName, ItemPos, Path, MyMenu) ;关闭选中脚本 { WinClose(Path "ahk_class AutoHotkey") }

scripts_func_closeall(ItemName, ItemPos, MyMenu) ;关闭所有脚本 { ; For ScriptArrayTemp_Index, ScriptArrayTempValue in ScriptArrayTemp ; { ; thisscript := ScriptArrayFile["Name" ScriptArrayTemp_Index] ; If ScriptArrayTemp_Value = 1 ; { ; WinClose(thisScript "ahk_class AutoHotkey") ; ScriptArrayTemp[ScriptArrayTemp_Index] := 0 ; ; ScriptsMenuName := StrReplace(thisscript, ".ahk",,,, 1) ; ScriptsMenuName := thisscript ; if InStr(thisscript, "!") ; { ; scripts_menu_open_more.Add(ScriptsMenuName, scripts_func_open.Bind(,,A_LoopFileFullPath)) ; scripts_menu_close.Delete(ScriptsMenuName) ; scripts_menu_reload.Delete(ScriptsMenuName) ; } ; Else ; { ; scripts_menu_open.Add(ScriptsMenuName, scripts_func_open.Bind(,,A_LoopFileFullPath)) ; scripts_menu_close.Delete(ScriptsMenuName) ; scripts_menu_reload.Delete(ScriptsMenuName) ; } ; } ; } }

scripts_func_reload(ItemName, ItemPos, Path, MyMenu) ;重启选中脚本 { WinClose(Path) Sleep(1000) Run(Path) }

scripts_func_reloadall(ItemName, ItemPos, MyMenu) ;重启所有脚本 { }

scripts_func_edit(ItemName, ItemPos, Path, MyMenu) ;编辑选中脚本 { ; msgbox(Path) Run("X:\Program\EverEdit\EverEdit.exe "" Path """) }

`

transtone commented 1 year ago

1.x 的时候,用这个用的多: https://www.dcmembers.com/justice/download/axem/ 也发上来供参考。

jackusay commented 3 days ago

ahk v1

https://github.com/WeiWan5675/Ahk-Script-Manager

365001614-75835cca-114c-4485-897a-8ee4ad0f32e2

AHK管理软件使用 文件名前缀有 "!" , 则需要手动启动 文件名前缀无 "!" , 则随AHK管理软件的自动而启动