工具的最终目标:
1、非专业编程人员亦可快速上手制作一些小功能,满足日常使用。
2、有一定编程基础的非专业编程人员,可以速查常用命令,函数,做到事半功倍的效果。
3、专业编程高手,可以自己定制分享个人版的参数面板[右下角],帮助别人的同时,也能用着文便些 。
非成品,先上图,发源码,大家看下有没有继续下去的必要。
源码:
#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%\lib\Toolbar.ahk global 屏幕宽,屏幕高,主窗口宽,主窗口高,主窗口句柄 global 当前参数面板,默认参数面板,面板坐标x,面板坐标y,面板宽,面板高 ;获取当前显示器的可用分辨率,存于变量 屏幕信息 SysGet, 屏幕信息, MonitorWorkArea 屏幕宽:=屏幕信息Right-屏幕信息left 屏幕高:=屏幕信息down-屏幕信息top 面板高:=260 ;========免注册调用大漠============ ;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 w1000 h420 hwndhSci_edit ;添加 Scintilla 控件. 注意必须加载 SciLexer.dll 库后才能添加此控件 ;面板切换按钮区----------- Gui Add, Button, x249 y500 w22 h60 ,调试输出 Gui Add, Button, x249 y560 w22 h60,参数选择 Gui Add, Button, x249 y620 w22 h60,代码示例 ;-----------------------代码块快捷命令区------------------------ 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 h706 AltSubmit +Buttons +0x280, 选择命令|项目管理|全局变量 Gui Tab, 1 Gui Add, TreeView, x32 y58 w210 h690 vtvcmd gcmts Gui Tab, 2 Gui Add, ListView, x32 y58 w210 h690, 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 窗口移动自动调整面板位置 ;OnMessage(0x006,"面板是否激活置顶") ;WM_ACTIVATE 6 #6 一个窗口被激活或失去激活状态 ;WM_ACTIVATEAPP 28 #1c 发此消息给应用程序哪个窗口是激活的,哪个是非激活的 #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% %面板宽% %面板高%,%A_AhkPath%,, 默认参数面板 当前参数面板:=默认参数面板 ;—————————————————————————————————— ;=====================程序主体部分结束================== ;———————————————以下是函数、标签部分—————————————— return MenuHandler: return mainSize: AutoXYWH("wh", 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% %面板宽% %面板高%,%A_AhkPath%,, 当前参数面板 ;MsgBox, % 设置父窗口() ;gui,main:+Owner ;parent 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 ;常用函数或命令,样式为字体加粗 cyml:=TV_Add("常用命令",,"Bold") loop, Files, %A_WorkingDir%\常用命令\*.ahk, F { TV_Add(A_LoopFileName,cyml,"Blod Expand") ;常用函数或命令,样式为字体加粗,展开 } 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 面板宽:=代码控件宽 } 更新参数面板位置(){ 窗口坐标更新() WinMove,ahk_pid %当前参数面板%,,%面板坐标x%,%面板坐标y% } ;调用系统api使参数面板成为主窗口的子窗口---------------------------------------------------------???????????? 设置父窗口(父句柄="",子句柄=""){ ;Declare Function SetParent Lib "user32" Alias "SetParent" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long ;SetParent Form1.hWnd, Form2.hWnd if (父句柄=="" or 子句柄==""){ 父句柄:=主窗口句柄 子句柄:=当前参数面板 } 是否成功:=DllCall("user32.dll\SetParent","int",%子句柄%,"int",%父句柄%) return 是否成功 } 面板是否激活置顶(wParam, lParam, msg, hwnd){ ToolTip,% "W参数:" Wparam " l参数:" lParam " 消息:" msg " 句柄:" hwnd ;IfWinActive,ahk_id %主窗口句柄% if (wParam>0) ;等于2窗口被鼠标激活,等于1为其它方式激活。 为0失去激活 { ToolTip,"参数面板正在被置顶" ;WinMove,ahk_pid %当前参数面板% ;winset,AlwaysOnTop,On,ahk_id %当前参数面板% winset,Top,,ahk_id %当前参数面板% }else{ winset,AlwaysOnTop, Off,ahk_id %当前参数面板% } } 转短路径(原路径){ 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 }
我觉得这个非常好 为什么 我复制所有的代码后不能运行呢?
只是做了个框架?。还没有完成呢。纠结中
请坚持做下去
没有做下去了吗,很想用呢