You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改NSIS Graphical Installer按钮鼠标悬停行为匹配Win10效果

NSIS Graphical Installer 按钮悬停效果适配Win10方案

问题根因

Graphical Installer 默认使用自绘按钮控件,默认仅监听了BN_CLICKED点击事件,没有绑定WM_MOUSEMOVE/WM_MOUSELEAVE鼠标进出事件,因此不会触发悬停状态重绘,表现为只有点击时才会高亮。

具体修改步骤

  • 第一步:在NSIS脚本头部引入Windows消息相关依赖头文件,添加如下代码:
!include "WinMessages.nsh"
!include "nsDialogs.nsh"
  • 第二步:给目标按钮绑定鼠标事件回调,在按钮创建完成后添加事件监听逻辑:
# 按钮创建后获取控件句柄存为$hTargetButton,绑定进出事件
${NSD_OnMouseOver} $hTargetButton onButtonHover
${NSD_OnMouseOut} $hTargetButton onButtonHoverOut
  • 第三步:实现悬停和移出的回调函数,手动修改按钮状态触发匹配Win10的高亮重绘:
Function onButtonHover
  ; 发送消息设置按钮为悬停状态
  SendMessage $hTargetButton ${BM_SETSTATE} ${BST_HOT} 0
FunctionEnd

Function onButtonHoverOut
  ; 恢复按钮为普通未激活状态
  SendMessage $hTargetButton ${BM_SETSTATE} 0 0
FunctionEnd
  • 第四步:如果你使用了Graphical Installer的预定义皮肤包,需要额外关闭旧版按钮兼容模式,在脚本初始化阶段添加配置:
GraphicalInstaller::SetOption "EnableLegacyButtonMode" "0"

验证注意事项

  • 编译后测试安装包不要在Windows兼容模式下运行,否则会强制 fallback 到旧版Windows控件样式
  • 如果是自定义按钮皮肤的场景,需要额外准备悬停状态的按钮素材图,在回调函数中调用${NSD_SetImage}替换即可生效

内容的提问来源于stack exchange,提问作者fajir moin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 11:54:03