;源碼
;by Sixtyone At 2016.4.10
;更新說明
/*
2016.4.24:
1.運(yùn)行#腳本后壁涎,gui自動隱藏休弃;
2.啟動腳本目錄后介牙,gui自動隱藏。
2016.4.17:
1. 增加過濾中使用%A_ScriptDir%變量慨默。
2016.4.14:
1.修復(fù)2016.4.13版本中的1個bug;
2.添加文件(夾)過濾功能:添加到過濾中的文件(夾),將不會被讀取到AHK管理器中贩耐;
3.修復(fù)之前版本某些腳本不能關(guān)閉問題峦萎;
4.修復(fù)腳本不能正確讀取ini配置問題肖粮。
2016.4.13:
1.更新添加“Scripts文件夾內(nèi)的第一層子文件夾腳本”,但所有腳本不能同名谆构。
2016.4.11:
1.腳本庫中啟動條目后,焦點(diǎn)自帶設(shè)置為上一條,正在運(yùn)行庫同;
2.更新腳本庫雙擊運(yùn)行腳本,正在運(yùn)行庫雙擊關(guān)閉腳本;
3.腳本庫增加右鍵菜單:"編輯","運(yùn)行"--正在運(yùn)行庫增加右鍵菜單:"編輯","重載","關(guān)閉"虾攻。
*/
#SingleInstance Force
#NoEnv
;#Warn
SetWorkingDir %A_ScriptDir%
Process, Priority,, High
DetectHiddenWindows,On
Menu, Tray, NoStandard? ? ? ? ? ? ? ? ? ;刪除自帶托盤菜單
Menu, tray, add, 管理,ShowGui? ;? 顯示gui
Menu, tray, add? ; 創(chuàng)建分隔線.
Menu, tray, add ,過濾,Menu_Tray_過濾? ? ? ? ;? 過濾
Menu, tray, add ,腳本目錄,Menu_Tray_OpenDir? ? ? ? ? ;? 腳本目錄
Menu, tray, add ,重啟管理器,Menu_Tray_Reload? ? ? ? ? ; 重啟
Menu, tray, Add
Menu, tray, Add,幫助,Help ;Help
Menu, tray, Add,關(guān)于,About ;關(guān)于
Menu, tray, Add
Menu, tray, Add, 退出, ExitSub? ? ? ? ? ? ? ? ? ; 創(chuàng)建? ? 退出
Menu, Tray, Default, 管理? ;;默認(rèn)? 菜單:配置
Menu, Tray, Icon, Shell32.dll, 258
;IntelligentScript:
Gui,Destroy
Gui Add, ListView, x8 y30 w200 h400 AltSubmit vScriptLibrary g運(yùn)行 , 腳本名稱
Gui Add, Text, x10 y3 w120 h23 +0x200, 腳本庫
Gui Add, ListView, x233 y30 w200 h400 AltSubmit vScriptRun g運(yùn)行2, 腳本名稱
Gui Add, Text, x234 y3 w120 h23 +0x200, 已運(yùn)行腳本
Gui Add, Button, x440 y30 w60 h42 gtsk_open, 啟動腳本
Gui Add, Button, x440 y100 w60 h42 gtsk_restart, 重載腳本
Gui Add, Button, x440 y170 w60 h42 gtsk_close, 關(guān)閉腳本
Gui Add, Button, x440 y240 w60 h42 gMenu_Tray_OpenDir, 腳本目錄
Gui Add, Button, x440 y310 w60 h42 gMenu_Tray_Reload, 重啟管理器
Gui Add, Button, x440 y380 w60 h42 gExitSub, 退出
;Gui Show,, AHK管理器
Gui Default
Gui,ListView,ScriptLibrary
scriptCount = 0
IniRead,Golv,過濾.ini,過濾
OpenList := Array()
UnOpenList := Array()
Loop, %A_ScriptDir%\scripts\*.ahk,,1
{
if !(A_LoopFileLongPath~="i).+?\\scripts\\[^\\]*\\?[^\\]+\.ahk")? ? ? ? ? ? ? ? ? ? ? ? ? ;增加一層子文件讀取
continue
_Golv=0
loop,Parse,Golv,`n,`r? ? ? ? ? ? ? ? ? ;增加過濾判斷
{
StringReplace,_GolvPath,A_LoopField,`%A_ScriptDir`%,%A_ScriptDir%
ifInString,A_LoopFileLongPath ,%_GolvPath%
{
_Golv=1
break
}
}
if? _Golv=1
continue
StringReplace, MenuName, A_LoopFileName, .ahk
scriptCount += 1
%MenuName%_Path :=A_LoopFileLongPath
%MenuName%_Dir :=A_LoopFileDir
scriptsName%scriptCount% := A_LoopFileName
;scriptsOpened%scriptCount% = 0
UnOpenList.Insert(MenuName)
}
InsertionSort(UnOpenList)
for Index, MenuName in UnOpenList
{
LV_Add("",MenuName)
}
LV_ModifyCol()
gosub tsk_openAll
;Gui,Show
return
運(yùn)行:
if A_GuiEvent = DoubleClick
{
goto,tsk_open
}
return
運(yùn)行2:
if A_GuiEvent = DoubleClick
goto,tsk_close
return
GuiContextMenu:? ; 運(yùn)行此標(biāo)簽來響應(yīng)右鍵點(diǎn)擊或按下 Appskey.
if A_GuiControl = ScriptLibrary? ; 這個檢查是可選的. 讓它只為 ListView 中的點(diǎn)擊顯示菜單.
{
Gui,Default
Gui,ListView,ScriptLibrary
RowNumber = 0
Loop,%scriptCount%
{
RowNumber := LV_GetNext(RowNumber)
if not RowNumber
Return
break
}
Menu,PopC,Add,編輯,P_edit
Menu,PopC,Add,運(yùn)行,tsk_open
menu,PopC,Show
return
}
if? A_GuiControl = ScriptRun
{
Gui,Default
Gui,ListView,ScriptRun
RowNumber = 0
Loop,%scriptCount%
{
RowNumber := LV_GetNext(RowNumber)
if not RowNumber
Return
break
}
Menu,PopC2,Add,編輯,P_edit
Menu,PopC2,Add,重載,tsk_restart
Menu,PopC2,Add,關(guān)閉,tsk_close
menu,PopC2,Show
return
}
return
P_edit:
LV_GetText(thisScript, RowNumber)
P_editpath :=%thisScript%_path
Run, F:\Program Files\AutoHotkey\SciTE\SciTE.exe? "%P_editpath%"
return
tsk_open:
Gui,Default
Gui,ListView,ScriptLibrary
RowNumber = 0
Loop,%scriptCount%
{
RowNumber := LV_GetNext(RowNumber)
if not RowNumber
Return
LV_GetText(thisScript, RowNumber)
Run,% %thisScript%_Path,% %thisScript%_Dir,,%thisScript%
IfInString, thisScript, #
{
Gui, Hide
Return
}
;scriptsOpened%A_Index% := 1
break
}
Gui,ListView,ScriptRun
LV_Add("",ThisScript)
LV_ModifyCol()
Gui,ListView,ScriptLibrary
Loop, %scriptCount%
{
LV_GetText(outputname,A_Index,1)
if (outputname=ThisScript)
{
LV_Delete(A_Index)
if A_Index<>1
{
LV_Modify(A_Index-1, "Select")
}
else
{
LV_Modify(1, "Select")
}
break
}
}
LV_ModifyCol()
return
tsk_close:
Gui,Default
Gui,ListView,ScriptRun
RowNumber = 0
Loop,%scriptCount%
{
RowNumber := LV_GetNext(RowNumber)
if not RowNumber
Return
LV_GetText(thisScript, RowNumber)
ID:=%thisScript%
WinClose, ahk_pid %ID%
IfWinExist,ahk_pid %ID%
Process,Close,%ID%
;scriptsOpened%A_Index% := 0
break
}
Gui,ListView,ScriptLibrary
LV_Add("",ThisScript)
LV_ModifyCol()
Gui,ListView,ScriptRun
Loop, %scriptCount%
{
LV_GetText(outputname,A_Index,1)
if (outputname=thisScript)
{
LV_Delete(A_Index)
if A_Index<>1
{
LV_Modify(A_Index-1, "Select")
}
else
{
LV_Modify(1, "Select")
}
break
}
}
LV_ModifyCol()
return
tsk_restart:
Gui,Default
Gui,ListView,ScriptRun
RowNumber = 0
Loop,%scriptCount%
{
RowNumber := LV_GetNext(RowNumber)
if not RowNumber
Return
LV_GetText(thisScript, RowNumber)
ID:=%thisScript%
WinClose, ahk_pid %ID%
IfWinExist,ahk_pid %ID%
Process,Close,%ID%
Run,% %thisScript%_Path,% %thisScript%_Dir,,%thisScript%
break
}
return
tsk_openAll:
Loop, %scriptCount%
{
thisScript := scriptsName%A_Index%
StringReplace, thisScript, thisScript, .ahk
;if scriptsOpened%A_Index% = 0
;{
IfInString, thisScript, _? ? ? ? ? ;IfInString,%thisScript%_Path,%A_ScriptDir%\Scripts\_? ? 不自動啟動_文件夾內(nèi)的腳本
{
continue
}
IfInString, thisScript, #
{
continue
}
Run, % %thisScript%_Path,% %thisScript%_Dir,,%thisScript%
;scriptsOpened%A_Index% = 1
Gui,Default
Gui,ListView,ScriptRun
LV_Add("",thisScript)
LV_ModifyCol()
Gui,ListView,ScriptLibrary
Loop, %scriptCount%
{
LV_GetText(outputname,A_Index,1)
if (outputname=thisScript)
{
LV_Delete(A_Index)
break
}
}
LV_ModifyCol()
;}
}
;Gui,Show
return
Menu_Tray_過濾:
Run, Notepad.exe? 過濾.ini
return
Menu_Tray_OpenDir:
Run, %A_ScriptDir%\scripts
gui,Hide
return
Menu_Tray_Reload:
gui,Hide
Gui,Default
Gui,ListView,ScriptRun
Loop % LV_GetCount()
{
LV_GetText(thisScript, A_Index)
ID:=%thisScript%
WinClose, ahk_pid %ID%
IfWinExist,ahk_pid %ID%
Process,Close,%ID%
}
Reload
return
GuiEscape:
GuiClose:
Gui, Hide
return
ExitSub:
msgbox,260,是否退出铡买?,退出腳本,將退出所有經(jīng)過AHK管理器啟動的腳本,你是否確認(rèn)退出霎箍?
IfMsgBox No
return
gui,Hide
Gui,Default
Gui,ListView,ScriptRun
Loop % LV_GetCount()
{
LV_GetText(thisScript, A_Index)
ID:=%thisScript%
WinClose, ahk_pid %ID%
IfWinExist,ahk_pid %ID%
Process,Close,%ID%
}
Gui,Destroy
ExitApp
return
InsertionSort(ByRef array)
{
target := Array()
count := 0
for Index, Files in array
{
files%Index% := Files
count += 1
}
j := 2
while (j <= count)
{
key := files%j%
i := j-1
while (i >= 0 && key < files%i%)
{
k := i+1
files%k% := files%i%
i -= 1
}
k := i+1
files%k% := key
j += 1
}
Loop, %count%
{
target.Insert(files%A_Index%)
}
array := target
}
About:
msgbox,AHK管理器`n版本號:2016.4.24`nCopyright?2016 Sixtyone.? All Rights Reserved.`n`n關(guān)于作者:`n`tName:Sixtyone`n`tQQ:576642385
return
Help:
msgbox,將AHK腳本放在腳本目錄下進(jìn)行管理:`n1.以_開頭的腳本不會自動加載`n2.以#開頭的腳本為臨時腳本即運(yùn)行完就退出`n3.腳本名字不能有空格及除_奇钞、#以為的符號`n4.腳本不能為快捷方式
return
F18::
ShowGui:
gui,Show,,AHK管理器
return