一个理想的AHK编辑工具

许多实用脚本和封装函数, 可以让您编写脚本更加便捷高效

Moderators: tmplinshi, arcticir

fywlts
Posts: 3
Joined: 29 Aug 2018, 00:07

一个理想的AHK编辑工具

30 Aug 2018, 00:26

一、设计初衷:
我学习ahk,完全是看中了它的热键功能。特别的方便快捷。可因为个人英语能力有限。里面的参数又多还有各种限制。稍不留意就会出错。往往还找不到出错的地方和原因。学习ahk的所有资料就是附带的帮助文件汉化版。所以想做一个适合新手ahk爱好者的编辑工具。把平时收集到的大神的写函数及作品,集中整理,把平时自学ahk存在的易注意的。加入可自定义修改的参数面板中。
二、希望具备的功能:
1、框架合理分类出几大功能模块。以树状列表可快速选择。在选择函数或命令后,下面的参数面板则会显示出详细的参数选项,
【用户可自由在配置文件中添加对参数的理解注释等。有能力的也可以修改参数面板。】
【所以参数面板为独立的ahk文件,由主窗口调用,用户或爱好者可自由增加或修改完善。】
【根据用户使用命令或函数的次数,将常用的命令或函数置顶加变色显示】
4、大神函数集合,可随时收集增添内容。
5、库函数的汉化介绍说明
6、汉化一些常用的大神作品,比如autogui
三、此工具的好处是所有参数面板不需要一个人完成。爱好者可以自己设计好了传上来。用户也可以自己设计自己的参数面板,去掉用的不多的参数。每隔一段时间。由工具管理者过滤出比较好的参数面板加入下载包。方便新用户加入后下载使用。所以,各位大神有能力的,觉得这款工具有前途的,帮忙设计完善下主框架。有好作品的回贴可申请加入工具里的大神作品集。
因源码有不同的文件夹及附件,可能无法正常运行,上传几次zip包均失败,所以源码后另外百度的zip包下载地址
源码:

Code: Select all

#NoEnv
#Warn,,OutputDebug
#SingleInstance Force
FileInstall,SciLexer.dll, %A_ScriptDir%\SciLexer.dll,1
SCI_edit:= DllCall("LoadLibrary", "Str", "SciLexer.dll", "Ptr")  ; 避免了在循环中每次都需要使用 DllCall() 装载库.
SetWorkingDir %A_ScriptDir%
#Include %A_ScriptDir%\Toolbar.ahk
global 屏幕宽,屏幕高,主窗口宽,主窗口高,主窗口句柄
global 当前参数面板,默认参数面板,面板坐标x,面板坐标y,面板宽,面板高
;获取当前显示器的可用分辨率,存于变量 屏幕信息
SysGet, 屏幕信息, MonitorWorkArea
屏幕宽=屏幕信息Right-屏幕信息left
屏幕高=屏幕信息down-屏幕信息top

;========免注册调用大漠============
;iPath := A_ahkpath . "\AHKdm\dm.dll"  
;WhichButton := DllCall("AHKdm\DmReg.dll\SetDllPathW",  "Str", iPath, "Int", 0)
;MsgBox % WhichButton
;dm :=  ComObjCreate("dm.dmsoft")
;ver := dm.Ver()
;=========================免注册失败?


Gui main:New, +hWndhmainGui +Labelmain +Resize
主窗口句柄:=hmainGui
;------------------创建窗口的状态栏--------------------
Gui Add, StatusBar, x0 y680 w屏幕宽 h22, Status Bar
;----------------------添加一个菜单栏--------------------------
Menu MenuHandler, Add, 打开(&O)`tCtrl+O, MenuHandler
Menu MenuHandler, Add, 保存(&S)`tCtrl+S, MenuHandler
Menu MenuHandler, Add, 另存为(&A)`tCtrl+Shift+S, MenuHandler
Menu MenuHandler, Add, 编码, MenuHandler
Menu MenuHandler,add
Menu MenuHandler,add
Menu MenuHandler,add,退出(&X)`t,MenuHandler
Menu MenuBar, Add, 文件(&F), :MenuHandler
;-----------------
Menu EditMenu, Add, 复制(&C)`tCtrl+C, MenuHandler
Menu EditMenu, Add, 剪切(&X)`tCtrl+X, MenuHandler
Menu EditMenu, Add, 粘贴(&V)`tCtrl+V, MenuHandler
Menu EditMenu, Add, 撤销(&U)`tCtrl+Z, MenuHandler
Menu EditMenu, Add, 重做(&R)`tCtrl+Y, MenuHandler
Menu MenuBar, Add, 编辑(&E), :EditMenu
;-----------------
Menu ViewMenu, Add, 复制(&C)`tCtrl+C, MenuHandler
Menu ViewMenu, Add, 剪切(&X)`tCtrl+X, MenuHandler
Menu ViewMenu, Add, 粘贴(&V)`tCtrl+V, MenuHandler
Menu ViewMenu, Add, 撤销(&U)`tCtrl+Z, MenuHandler
Menu ViewMenu, Add, 重做(&R)`tCtrl+Y, MenuHandler
Menu MenuBar, Add, 查看(&E), :ViewMenu
;-----------------
Menu CompileMenu, Add, 运行(&R)`tF5, MenuHandler
Menu CompileMenu, Add, 调试(&D)`tF7, MenuHandler
Menu CompileMenu, Add, 编译(&C)`tCtrl+F7, MenuHandler
Menu CompileMenu, Add, 备用(&U)`tCtrl+Z, MenuHandler
Menu CompileMenu, Add, 备用(&R)`tCtrl+Y, MenuHandler
Menu MenuBar, Add,编译(&O), :CompileMenu
;-----------------
Menu OptionMenu, Add, 配置SCI(&C)`tCtrl+C, MenuHandler
Menu OptionMenu, Add, 代码样式选择(&X)`tCtrl+X, MenuHandler
Menu OptionMenu, Add, 自定义快捷键(&V)`tCtrl+V, MenuHandler
Menu OptionMenu, Add, 撤销(&U)`tCtrl+Z, MenuHandler
Menu OptionMenu, Add, 重做(&R)`tCtrl+Y, MenuHandler
Menu MenuBar, Add, 选项(&O), :OptionMenu
;-----------------
Menu ToolMenu, Add, 窗口信息查看(&I)`t, MenuHandler
Menu ToolMenu, Add, 快速脚本界面(&W)`t, MenuHandler
Menu ToolMenu, Add, 代码格式化(&G)`t, MenuHandler
Menu ToolMenu, Add, 正则辅助测试(&Z)`t, MenuHandler
Menu ToolMenu, Add, 快速插入片段(&P)`t, MenuHandler
Menu ToolMenu, Add, 插件接口查看(&V)`t, MenuHandler
Menu ToolMenu, Add, SCI配置工具(&S)`t, MenuHandler
Menu ToolMenu, Add, 自定义工具栏(&T)`t, MenuHandler
Menu ToolMenu, Add, 库文件介绍(&L)`t, MenuHandler
Menu MenuBar, Add, 工具(&T), :ToolMenu
;-----------------
Menu HelpMenu, Add, 帮助(&H)`tF1, MenuHandler
Menu HelpMenu, Add, 赞助注册(&C)`t, MenuHandler
Menu MenuBar, Add, 帮助(&H), :HelpMenu
Gui Menu, MenuBar
;-----------------------代码编辑栏-----------------------------
;Gui Add, Edit, x270 y50 w760 h392, #NoEnv`n#Warn,, OutputDebug`n#SingleInstance Force`nSetWorkingDir `%A_ScriptDir`%
gui add,Custom,ClassScintilla x270 y50 w760 h392 hwndhSci_edit ;添加 Scintilla 控件. 注意必须加载 SciLexer.dll 库后才能添加此控件
;-----------------------代码块快捷命令区------------------------
Gui Add, GroupBox, x248 y45 Section w22 h620
Gui add,Picture, xp yp  AltSubmit,代码背景.bmp
Gui Add, Button, hwnd_left xp+2 yp+8 w18 h18 +BackgroundTrans +0x0080 +0x0040
BT1Options:= [ {BC: "代码背景.bmp", TC: "000000", 3D: 9, G: 1}] ;普通状态
BT1Options[2] := {BC: "代码背景.bmp", TC: "000000", 3D: 9, G: 1} ;鼠标悬停
BT1Options[3] := {BC: "代码背景.bmp", TC: "000000", 3D: 0, G: 0} ;3鼠标按下
CreateImageButton(_left,BT1Options)

Gui Add, Button, xp yp+20 w18 h18 BackgroundTrans
Gui Add, Button, xp yp+20 w18 h18 BackgroundTrans
Gui Add, Button, xp yp+20 w18 h18 BackgroundTrans
Gui Add, Button, xp yp+20 w18 h18 BackgroundTrans
;-------------------------左侧选择命令区-----------------------
Gui Add, Tab2, +hWndtiaoshi vtabts x8 y50 w240 h620 AltSubmit +0x280, 选择命令|项目管理|全局变量
	Gui Tab, 1
		Gui Add, TreeView, x32 y58 w210 h600 vtvcmd gcmts
	Gui Tab, 2
		Gui Add, ListView, x32 y58 w210 h600, ListView
	gui tab
		;------------------------下侧命令参数区------------------------
		;-----------下侧:调试:cmd插件---------------------------
		;Gui Add, ActiveX, x267 y450 w750 h198, Shell.Explorer

;===============-显示窗口-===============
Gui main:Show, w1280 h780, 积木AHK

;------------创建工具栏-------------
GuiAddToolbar(主窗口句柄)
OnMessage(0x003,"更新参数面板位置") ;0x0003 WM_MOVE 

#Include %A_ScriptDir%\lib\lib.ahk

		;=====================程序主体部分===============
		;---程序初始化
		;生成配置文件()
载入配置文件()  ;此处是读取目录下的文件生成命令区TV控件的数据

;Run, Target [, WorkingDir, Max|Min|Hide|UseErrorLevel, OutputVarPID]
;AutoHotkey.exe [Switches] [Script Filename] [Script Parameters] ;%面板宽% %面板高%
窗口坐标更新()
Run,autohotkey.exe /force `"%A_ScriptDir%`"\命令\默认面板.ahk %面板坐标x% %面板坐标y% 900 240,%A_AhkPath%,, 默认参数面板
当前参数面板:=默认参数面板



	

		;——————————————————————————————————
		;=====================程序主体部分结束==================


		;———————————————以下是函数、标签部分——————————————
return
MenuHandler:
return

mainSize:
AutoXYWH("w0.75 h0.75", hSci_edit)
AutoXYWH("h0.75", tiaoshi,"tvcmd")

更新参数面板位置()
return



;触发了命令选择中树形列表项的标签
cmts:
;SendMessage, Msg [, wParam, lParam, Control, WinTitle, WinText, ExcludeTitle, ExcludeText, Timeout]
	if (A_GuiEvent=="S") {
		TV_GetText(选中的项目文本,A_EventInfo )
		父项目id:=TV_GetParent(A_EventInfo )
		if (父项目id!=0){
			tV_GetText(父项目文本,父项目id)
			Process,Close,%当前参数面板%
			窗口坐标更新()
			Run,autohotkey.exe /force `"%A_ScriptDir%`"\命令\%父项目文本%\%选中的项目文本%.ahk %面板坐标x% %面板坐标y% 900 240,%A_AhkPath%,, 当前参数面板
			return
		}
	}
return

mainEscape:

return

mainClose:
	DetectHiddenWindows On ; 允许探测脚本中隐藏的主窗口。
	SetTitleMatchMode 2
	;PostMessage, 0x111, 65307,,,内置变量.ahk - AutoHotkey ; 退出
	Process,Close,%当前参数面板%
	DllCall("FreeLibrary", "Ptr", hSci_edit)  ; 为了释放内存, 在使用 DLL 后需要进行卸载
	ExitApp
return



;===================下面是函数区==================
; 工具栏按钮生成函数

GuiAddToolbar(hWnd) {
	ImageList := IL_Create(7)
	IL_Add(ImageList, "shell32.dll", 16)
	IL_Add(ImageList, "shell32.dll", 96)
	IL_Add(ImageList, "shell32.dll", 28)
	IL_Add(ImageList, "shell32.dll", 24)
	IL_Add(ImageList, "shell32.dll", 174)
	IL_Add(ImageList, "shell32.dll", 138)
	IL_Add(ImageList, "shell32.dll", 142)
	hToolbar := Toolbar_Add(hWnd, "OnToolbar", "flat list ToolTips", ImageList)
	Buttons =
	(LTrim
		我的电脑
		计算器
		关闭电脑
		帮助关于
		整理代码
		运行
		调试
	)
	Toolbar_Insert(hToolbar, Buttons)
}

OnToolbar(hWnd, Event, Text, Pos, Id) {
	if (Event = "Hot") {
		return
	}
}


;根据目录及相关文件生成配置文件
生成配置文件(){
	;第一步,遍历同目录的[命令]文件夹下的文件夹,得到配置文件cmd.ini的字段
	loop, Files, %A_WorkingDir%\命令\*, D
	{
		IniWrite,%A_Space%,cmd.ini,%A_LoopFileName%
	}
}

载入配置文件(){
	Gui,TreeView,tvcmd
	loop, Files, %A_WorkingDir%\命令\*, D
	{
        ;新建父项目,样式为字体加粗
		TV_Add(A_LoopFileName,,"Bold")
	}
    ;含子目录式循环读取所有文件
    loop, Files, %A_WorkingDir%\命令\*, R 
	{
		StringTrimRight, 写入项, A_LoopFileName, 4
        ;SplitPath, A_LoopFileDir, OutFileName, OutDir, OutExtension, OutNameNoExt, OutDrive
        Loop, Parse, A_LoopFileDir , "\"
            目录名:=A_LoopField
        if (目录名!="命令"){
            ItemID = 0  ; 这样使得首次循环从树的顶部开始搜索.
            conut:=TV_GetCount()
            Loop,%conut%
                {
                ItemID := TV_GetNext(ItemID)  ; 把 "Full" 替换为 "Checked" 来找出所有含复选标记的项目.
                    if (ItemID){
                        TV_GetText(ItemText, ItemID)
                        if (ItemText==目录名)
                        TV_Add(写入项,ItemID)
                    }
                }   
    }
	}
}

窗口坐标更新(){
local 代码控件x坐标,代码控件y坐标,代码控件宽,代码控件高
WinGetPos, 面板坐标x, 面板坐标y,主窗口宽,主窗口高,ahk_id %主窗口句柄%
ControlGetPos , 代码控件x坐标, 代码控件y坐标, 代码控件宽, 代码控件高, ,ahk_id %hSci_edit%
面板坐标x:=面板坐标x+代码控件x坐标
面板坐标y:=面板坐标y+代码控件y坐标+代码控件高+2
面板宽:=代码控件宽
面板高:=主窗口高-代码控件高-46
}

更新参数面板位置(){
窗口坐标更新()
WinMove,ahk_pid %当前参数面板%,,%面板坐标x%,%面板坐标y%
}

转短路径(原路径){
local 短路径
Loop, Parse, 原路径, "\" ;转换为短路径
	{
		if (StrLen(A_LoopField)>8){
			路径:=Substr(A_LoopField,1,6) "~1\"
		}else{
			路径:=A_LoopField "\"
	}
		短路径:=短路径 路径
}
return 短路径
}

客户转屏幕坐标(r,客户坐标x="275",客户坐标y="470"){
local x,y
WinGetPos, x, y,,,ahk_id %主窗口句柄%
x:=x+客户坐标x
y:=y+客户坐标y
if (r=="x")
return x
if (r=="y")
return y
}


百度zip包:https://pan.baidu.com/s/1ZhaDHpTOX75LwAPXMqTo2w

Return to “脚本函数”

Who is online

Users browsing this forum: No registered users and 25 guests