/* http://ahkscript.org/boards/viewtopic.php?f=28&t=4721 Script Name: ScriptManager.ahk Version: 0.1.00.12 Author: amnesiac 若无法运行,请下载安装最新的 AutoHotkey 版本。 这是测试版,不保证所有功能都能正常使用,请自负风险。 在操作脚本前,建议先刷新,程序在操作前不会去自动判断脚本是否存在或处于哪种状态(可能从外部被修改了)。 */ #NoEnv SetTitleMatchMode 2 DetectHiddenWindows On SetWorkingDir, %A_ScriptDir% Menu, Tray, Icon, Shell32.dll, 81 WM_COMMAND := 0x111 ; 下面这些消息号提取自 AutoHotkey_L 源代码。 ID_FILE_RELOADSCRIPT := 65400 ID_FILE_EDITSCRIPT := 65401 ID_FILE_PAUSE := 65403 ID_FILE_SUSPEND := 65404 ID_FILE_EXIT := 65405 ID_VIEW_LINES := 65406 ID_VIEW_VARIABLES := 65407 ID_VIEW_HOTKEYS := 65408 ThisWndName := "脚本调试辅助器" ThisVersion := "0.1.00.12" ThisAuthor := "amnesiac" MyAhkVersion := "AutoHotkey " (A_IsUnicode ? "Unicode" : "ANSI") " " ((A_PtrSize = 4) ? "32-bit" : "64-bit" ) " " A_AhkVersion gosub, CreateGUI gosub, RefreshList gosub, UpdateSB return CreateGUI: Gui +LastFound Gui, Font, s10 Gui, Add, GroupBox, x452 ym w100 h180 , 查看 Gui, Add, Button, x462 y20 w80 r1 gOperateScript vID_FILE_EDITSCRIPT, 编辑(&E) Gui, Add, Button, x462 y60 w80 r1 gOperateScript vID_VIEW_LINES, 历史(&L) Gui, Add, Button, x462 y100 w80 r1 gOperateScript vID_VIEW_VARIABLES, 变量(&V) Gui, Add, Button, x462 y140 w80 r1 gOperateScript vID_VIEW_HOTKEYS, 热键(&K) Gui, Add, GroupBox, x452 y190 w100 h180 , 操作 Gui, Add, Button, x462 y210 w80 r1 gOperateScript vID_FILE_PAUSE, 暂停(&P) Gui, Add, Button, x462 y250 w80 r1 gOperateScript vID_FILE_SUSPEND, 挂起(&S) Gui, Add, Button, x462 y290 w80 r1 gOperateScript vID_FILE_RELOADSCRIPT, 重启(&R) Gui, Add, Button, x462 y330 w80 r1 gOperateScript vID_FILE_EXIT, 退出(&X) Gui, Add, ListView, xm ym+10 w430 +R20 AltSubmit gThisLVSub HwndThisLVHwnd, 窗口句柄|脚本名|暂停|挂起|脚本路径 Gui, Add, Button, x62 y400 w80 r1 gSelectAll, 全选(&A) Gui, Add, Button, x162 y400 w80 r1 gInvertSelection, 反选 Gui, Add, Button, x262 y400 w80 r1 gSelectNone, 不选 Gui, Add, Button, x362 y400 w80 r1 gRefreshList, 刷新 Gui, Add, Button, x462 y400 w80 r1 gAboutScriptManager, 关于 Gui, Add, StatusBar SB_SetParts(120, 120) SB_SetText(MyAhkVersion, 3) Gui, Show, AutoSize, %ThisWndName% %ThisVersion% by %ThisAuthor% return GuiClose: ExitApp OperateScript: RowNumber := 0 Loop, % LV_GetCount("Selected") { RowNumber := LV_GetNext(RowNumber) if !RowNumber break LV_GetText(CurrentWnd, RowNumber, 1) CurrentCommand := %A_GuiControl% PostMessage, %WM_COMMAND%, %CurrentCommand%,,, ahk_id %CurrentWnd% } if (A_GuiControl = "ID_FILE_RELOADSCRIPT") Sleep, 500 gosub, RefreshList gosub, UpdateSB return SelectAll: LV_Modify(0, "Select") gosub, UpdateSB return InvertSelection: Loop % LV_GetCount() { wParam := A_Index - 1 SendMessage, 0x102C, %wParam%, 0x2,, ahk_id %ThisLVHwnd% if ErrorLevel LV_Modify(A_Index, "-Select") else LV_Modify(A_Index, "Select") } gosub, UpdateSB return SelectNone: LV_Modify(0, "-Select") ; 取消选择所有。 gosub, UpdateSB return RefreshList: LV_Delete() WinGet, AHKWinList, List, ahk_class AutoHotkey Loop, %AHKWinList% { AHKWinHWND := AHKWinList%A_Index% WinGetTitle, AHKWinTitle, ahk_id %AHKWinHWND% ScriptPathName := RegExReplace(AHKWinTitle, " - AutoHotkey v[d.]+?$") SplitPath, ScriptPathName, ScriptName, ScriptDir LV_Add("", AHKWinHWND, ScriptName, IsPaused(AHKWinHWND), IsSuspended(AHKWinHWND), ScriptDir) } LV_ModifyCol(1, "Integer Sort") LV_ModifyCol() gosub, UpdateSB return AboutScriptManager: MsgBox, 4160, 关于, 感谢使用,在使用过程中遇到问题或有相关建议请至官方论坛反馈。`n官方论坛网址(中文版在下方):http://ahkscript.org/boards/ return ThisLVSub: UpdateSB: RowNumber := SeletedNum := 0 Loop, % LV_GetCount("Selected") { RowNumber := LV_GetNext(RowNumber) if !RowNumber break SeletedNum++ } SB_SetText("已选脚本数:" SeletedNum, 1) SB_SetText("总脚本数:" LV_GetCount(), 2) return ; SKAN: http://www.autohotkey.com/board/topic/30277-/#entry192925 ; Lexikos: http://www.autohotkey.com/forum/viewtopic.php?p=142697#142697 IsPaused(hWnd) { static MF_CHECKED := 0x8 static WM_ENTERMENULOOP := 0x211 static WM_EXITMENULOOP := 0x212 SendMessage, WM_ENTERMENULOOP,,,, ahk_id %hWnd% SendMessage, WM_EXITMENULOOP, ,,, ahk_id %hWnd% hMenu := DllCall("GetMenu", "uint", hWnd) hMenu := DllCall("GetSubMenu", "uint", hMenu, "int", 0) return (DllCall("GetMenuState", "uint", hMenu, "uint", 4, "uint", 0x400) & MF_CHECKED) && true } IsSuspended(hWnd) { static MF_CHECKED := 0x8 hMenu := DllCall("GetMenu", "uint", hWnd) hMenu := DllCall("GetSubMenu", "uint", hMenu, "int", 0) return !!(DllCall("GetMenuState", "uint", hMenu, "uint", 5, "uint", 0x400) & MF_CHECKED) }