[源碼]AHK管理器

;源碼


;by Sixtyone At 2016.4.10

;更新說明

/*

2016.4.24:

1.運行#腳本后,gui自動隱藏;

2.啟動腳本目錄后,gui自動隱藏。

2016.4.17:

1. 增加過濾中使用%A_ScriptDir%變量。

2016.4.14:

1.修復2016.4.13版本中的1個bug;

2.添加文件(夾)過濾功能:添加到過濾中的文件(夾),將不會被讀取到AHK管理器中;

3.修復之前版本某些腳本不能關閉問題;

4.修復腳本不能正確讀取ini配置問題。

2016.4.13:

1.更新添加“Scripts文件夾內(nèi)的第一層子文件夾腳本”,但所有腳本不能同名。

2016.4.11:

1.腳本庫中啟動條目后,焦點自帶設置為上一條,正在運行庫同;

2.更新腳本庫雙擊運行腳本,正在運行庫雙擊關閉腳本;

3.腳本庫增加右鍵菜單:"編輯","運行"--正在運行庫增加右鍵菜單:"編輯","重載","關閉"。

*/

#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,關于,About ;關于

Menu, tray, Add

Menu, tray, Add, 退出, ExitSub? ? ? ? ? ? ? ? ? ; 創(chuàng)建? ? 退出

Menu, Tray, Default, 管理? ;;默認? 菜單:配置

Menu, Tray, Icon, Shell32.dll, 258

;IntelligentScript:

Gui,Destroy

Gui Add, ListView, x8 y30 w200 h400 AltSubmit vScriptLibrary g運行 , 腳本名稱

Gui Add, Text, x10 y3 w120 h23 +0x200, 腳本庫

Gui Add, ListView, x233 y30 w200 h400 AltSubmit vScriptRun g運行2, 腳本名稱

Gui Add, Text, x234 y3 w120 h23 +0x200, 已運行腳本

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, 關閉腳本

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

運行:

if A_GuiEvent = DoubleClick

{

goto,tsk_open

}

return

運行2:

if A_GuiEvent = DoubleClick

goto,tsk_close

return

GuiContextMenu:? ; 運行此標簽來響應右鍵點擊或按下 Appskey.

if A_GuiControl = ScriptLibrary? ; 這個檢查是可選的. 讓它只為 ListView 中的點擊顯示菜單.

{

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,運行,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,關閉,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管理器啟動的腳本,你是否確認退出?

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關于作者:`n`tName:Sixtyone`n`tQQ:576642385

return

Help:

msgbox,將AHK腳本放在腳本目錄下進行管理:`n1.以_開頭的腳本不會自動加載`n2.以#開頭的腳本為臨時腳本即運行完就退出`n3.腳本名字不能有空格及除_、#以為的符號`n4.腳本不能為快捷方式

return

F18::

ShowGui:

gui,Show,,AHK管理器

return

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • ¥開啟¥ 【iAPP實現(xiàn)進入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程,因...
    小菜c閱讀 7,325評論 0 17
  • 背景 一年多以前我在知乎上答了有關LeetCode的問題, 分享了一些自己做題目的經(jīng)驗。 張土汪:刷leetcod...
    土汪閱讀 12,912評論 0 33
  • afinalAfinal是一個android的ioc,orm框架 https://github.com/yangf...
    passiontim閱讀 15,869評論 2 45
  • 我記得那時他的笑,晃瞎了我的眼。從此我只記得那雙眼,再也看不清這個世間。 那時候認識他的原因很簡單。因為他真的很討...
    于無閱讀 686評論 0 1
  • 感恩節(jié)的尾巴,想說很多心里話 第一個謝的當然是老媽。爸不在的這幾年里,知道了什么是相依為命,老媽來煙臺的這幾年,照...
    王大晟閱讀 166評論 0 1

友情鏈接更多精彩內(nèi)容