代码如下:
/*
本小程序功能:快速打开XX系统中的一些常用界面
本小程序调用快捷键为:Alt + D
XX系统 postmessage的wParam参数值可能会变化,因此在用不了以下功能的时候需要重新获取wParam参数值
特别提醒:XX系统 postmessage的wParam参数值需自行提取
发送消息到错误的窗口(或发送错误的消息) 可能导致意外的行为或者甚至让目标应用程序崩溃
*/
#Persistent ; 让脚本持续运行, 直到用户退出.
#SingleInstance
SetWorkingDir, %A_ScriptDir%
IniPath = 示例.ini
gosub,quickmenu
;添加托盘菜单
Menu, StdMenu, Standard
Menu, Tray, NoStandard
Menu, Tray, Add, AutoHot&key, :StdMenu
Menu, Tray, Add ; 创建分隔线.
Menu, Tray, Add, 退出, ys_exit ; 增加托盘菜单“退出”项.
Menu, Tray, Icon, 退出,Shell32.dll, 216 ; 增加托盘菜单“退出”项图标(Shell32.dll序号216图标)
Menu, Tray, Add, 关于, ys_About ; 增加托盘菜单“关于”项.
Menu, Tray, Icon, 关于,Shell32.dll, 177 ; 增加托盘菜单“关于”项图标(Shell32.dll序号177图标)
return
quickmenu: ; 从INI文件动态添加一些菜单项来创建弹出菜单.
IniRead, LoopCount, %IniPath%, 菜单数量, menucount
Loop, %LoopCount% {
IniRead, menuName, %IniPath%, menu%A_Index%, Name
IniRead, iconumber, %IniPath%, menu%A_Index%, iconumber
Menu, MyMenu, Add, %menuName%, Label
Menu, MyMenu, Icon, %menuName%, Shell32.dll, %iconumber%
}
Menu, MyMenu, Add ; 添加分隔线.
; 添加子菜单到上面的菜单中.
Menu, Submenu1, Add, 关闭显示器电源, ys_close
Menu, Submenu1, Add, 锁定系统, ys_suo
Menu, MyMenu, Add, 系统功能, :Submenu1 ; 创建第一个菜单的子菜单(右箭头指示符). 当用户选择它时会显示第二个菜单.
Menu, MyMenu, Add ; 添加分隔线.
Menu, MyMenu, Add, 关于, ys_About
Menu, MyMenu, Add, 返回, ys_return
Menu, MyMenu, Icon,关于,Shell32.dll, 177
Menu, MyMenu, Icon,返回,Shell32.dll, 216
return
Label:
IniRead, menumber, %IniPath%, menu%A_ThisMenuItemPos%, menumber
postMessage, 0x0111, %menumber%,, , ahk_exe FactoryReport.exe
Return
ys_exit:
ExitApp
ys_About:
Text=
(LTrim
本小程序功能:利用postMessage快速打开XX系统中的一些常用界面
本小程序调用快捷键为:Alt + D
)
MsgBox,, 说明, % Text
return
ys_close: ;关闭显示器电源
SendMessage, 0x0112, 0xF170, 2,, Program Manager
return
ys_suo: ;锁定系统
run rundll32.exe user32.dll LockWorkStation
return
ys_return:
return
!d::Menu, MyMenu, Show ; 即按下 Alt-D 热键来显示菜单.
本脚本使用的《示例.ini》格式如下:
iniread效率不够,还是用easyini库吧
也不一定高,只不过是一次性读取
感谢!