; 示例: 用AHK编写含菜单栏的简单文本编辑器.
; 拖拽需要以普通权限运行此ahk
Loop 2 ; 解决管理员权限运行脚本时,文件无法拖拽的问题
DllCall("ChangeWindowMessageFilter", "UInt", "0x" (_:=!_?49:233), "Uint", 1)
; 为菜单栏创建子菜单:
Menu, FileMenu, Add, 新建(&N), FileNew
Menu, FileMenu, Add, 打开(&O), FileOpen
Menu, FileMenu, Add, 保存(&S), FileSave
Menu, FileMenu, Add, 另存为(&A), FileSaveAs
Menu, FileMenu, Add ; 分隔线.
Menu, FileMenu, Add, 退出(&E), FileExit
Menu, HelpMenu, Add, 关于(&A), HelpAbout
; 创建用来附加子菜单的菜单栏:
Menu, MyMenuBar, Add, &文件(&F), :FileMenu
Menu, MyMenuBar, Add, &帮助(&H), :HelpMenu
; 添加菜单栏到窗口:
Gui, Menu, MyMenuBar
; 创建主编辑控件并显示窗口:
Gui, +Resize ; 让用户可以调整窗口的大小.
Gui, Add, Edit, vMainEdit WantTab W600 R20
Gui, Show,, 简易文本编辑器
CurrentFileName = ; 表示当前没有文件.
return
FileNew:
GuiControl,, MainEdit ; 清空编辑控件.
return
FileOpen:
Gui +OwnDialogs ; 强制用户响应 FileSelectFile 对话框后才能返回到主窗口.
FileSelectFile, SelectedFileName, 3,, 打开文本文件, 文本文件 (*.txt; *.ahk; *.ini)
if SelectedFileName = ; 没有选择文件.
return
Gosub FileRead
return
FileRead: ; 调用者已经设置了 SelectedFileName 变量.
FileRead, MainEdit, %SelectedFileName% ; 读取文件的内容到变量中.
if ErrorLevel
{
MsgBox 无法打开 "%SelectedFileName%".
return
}
GuiControl,, MainEdit, %MainEdit% ; 在控件中显示文本.
CurrentFileName = %SelectedFileName%
Gui, Show,, %CurrentFileName% ; 在标题栏显示文件名.
return
FileSave:
if CurrentFileName = ; 还没有选择文件, 所以执行另存为操作.
Goto FileSaveAs
Gosub SaveCurrentFile
return
FileSaveAs:
Gui +OwnDialogs ; 强制用户响应 FileSelectFile 对话框后才能返回到主窗口.
FileSelectFile, SelectedFileName, S16,, 保存文件, 文本文件 (*.txt; *.ahk; *.ini)
if SelectedFileName = ; 没有选择文件.
return
CurrentFileName = %SelectedFileName%
Gosub SaveCurrentFile
return
SaveCurrentFile: ; 调用者已经确保了 CurrentFileName 不为空.
IfExist %CurrentFileName%
{
FileDelete %CurrentFileName%
if ErrorLevel
{
MsgBox 试图覆盖 "%CurrentFileName%" 没成功
return
}
}
GuiControlGet, MainEdit ; 获取编辑控件的内容.
FileAppend, %MainEdit%, %CurrentFileName% ; 保存内容到文件.
; 成功时在标题栏显示文件名 (以防 FileSaveAs 调用时的情况):
Gui, Show,, %CurrentFileName%
return
HelpAbout:
Gui, About:+owner1 ; 让主窗口 (Gui #1) 成为 "关于对话框" 的父窗口.
Gui +Disabled ; 禁用主窗口.
Gui, About:Add, Text,, 暂无关于脚本的信息
Gui, About:Add, Button, Default, 确定
Gui, About:Show
return
AboutButton确定: ; 上面的 "关于对话框" 需要使用这部分.
AboutGuiClose:
AboutGuiEscape:
Gui, 1:-Disabled ; 重新启用主窗口 (必须在下一步之前进行).
Gui Destroy ; 销毁关于对话框.
return
GuiDropFiles: ; 对拖放提供支持.
Loop, Parse, A_GuiEvent, `n
{
SelectedFileName = %A_LoopField% ; 仅获取首个文件 (如果有多个文件的时候).
break
}
Gosub FileRead
return
GuiSize:
if ErrorLevel = 1 ; 窗口被最小化了. 无需进行操作.
return
; 否则, 窗口的大小被调整过或被最大化了. 调整编辑控件的大小以匹配窗口.
NewWidth := A_GuiWidth - 20
NewHeight := A_GuiHeight - 20
GuiControl, Move, MainEdit, W%NewWidth% H%NewHeight%
return
FileExit: ; 用户在 File 菜单中选择了 "Exit".
GuiClose: ; 用户关闭了窗口.
ExitApp
声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。

评论(0)