要拦截其他程序窗口的最小化操作,需要使用 Windows API 钩子技术。以下是完整的解决方案:
方法一:使用 WH_CALLWNDPROC
全局钩子(推荐)
方法二:使用 SetWinEventHook
监听窗口状态变化
方法三:使用低级键盘钩子拦截 Windows 键组合
注意事项
- 管理员权限:所有方法都需要以管理员权限运行脚本
- 性能影响:全局钩子会影响系统性能,建议添加条件判断只拦截特定窗口
- 64位系统:确保AHK版本与目标程序位数匹配(32位或64位)
- 防检测:某些程序(如游戏)会检测钩子,可能导致无法工作
增强版:只拦截特定窗口
修改方法一中的判断条件,例如只拦截记事本:
if (InStr(title, "记事本") || hwnd = targetHwnd) {
WinGetClass class, "ahk_id " hwnd
if (class = "Notepad") {
MsgBox "拦截了记事本最小化"
return 0
}
}
常见问题解决
-
钩子不生效:
- 确认以管理员身份运行
- 检查AHK版本(32/64位)是否与系统匹配
- 尝试在简单程序(如记事本)上测试
-
拦截所有最小化操作:
if (msg = 0x112 && wParam = 0xF020) {
return 0 ; 拦截所有最小化
}
3.只拦截非AHK窗口:
if (msg = 0x112 && wParam = 0xF020) {
WinGetProcessName procName, "ahk_id " hwnd
if (procName != A_ScriptName) {
return 0
}
}
这些方法提供了不同级别的拦截能力,方法一是最彻底的解决方案,可以拦截所有类型的最小化操作(包括程序菜单、标题栏按钮、快捷键等)。