设为首页 收藏本站

NSIS中文论坛

查看: 373|回复: 0

[源码] 仿寒星随意录界面

[复制链接]
  • TA的每日心情
    开心
    昨天 23:07
  • 签到天数: 93 天

    [LV.6]常住居民II

    12

    主题

    35

    帖子

    1562

    积分

    积分
    1562
    发表于 2018-3-25 09:16:17 | 显示全部楼层 |阅读模式
    仿寒星随意录界面.jpg
    ;脚本以启光博客的nsis 绿化程序UI源码为基础(https://www.iewb.net/qg/1712.html)
    ;加入了水波纹效果,其脚本拼凑而来,感觉有点蹩脚。
    ;界面参考了寒星随意录的Windows 7文件权限工具 v1.0 (http://www.hxlive.cn/?s=WINDOWS+7+%E6%96%87%E4%BB%B6)
    ;两者都可视为“绿化”模板,各有其风格。前者完全开放,所有资源包括修改的default公开,界面较小;后者的界面较大,资源封闭。
    ;其界面上的项目内容主要依靠*.ini展示。这里的“仿”仅仅是一种揣摩,不管怎样,经一周的学习琢磨,编译通过,可以运行。
    #压缩设置
      SetCompressor /SOLID lzma
      SetCompressorDictSize 32
      SetDatablockOptimize on
      SetCompress auto
    #预先载入文件,方便安装加速释放
      Reservefile "Res\Win7Permissions.ini"
      ReserveFile "Res\top.bmp" ; 水波纹图片。注意原图片需做垂直翻转处理,此图片已在画图中做了处理。
      ReserveFile "${NSISDIR}\Plugins\System.dll"
      ReserveFile "${NSISDIR}\Plugins\InstallOptions.dll"
      ReserveFile "${NSISDIR}\Plugins\waterctrl.dll"      ; 水波纹插件
    #头文件
      !include "MUI.nsh"
      !include "logiclib.nsh"
      !include "WinMessages.nsh"
      !include "UsefulLib.nsh"
    #界面相关
    BrandingText " 寒星随意录 2010-02-02 "
      !define MUI_ICON "Res\io.ico"
      !define MUI_HEADERIMAGE
      !define MUI_HEADERIMAGE_BITMAP "Res\top.bmp"
      !define MUI_CUSTOMFUNCTION_GUIINIT .MyGUIInit
      !define MUI_FINISHPAGE_NOAUTOCLOSE
      page custom show leave
    MiscButtonText "" "" "" "完成" ;修改按钮文字“关闭”为“完成”
    #相关宏
      !insertmacro MUI_LANGUAGE "SimpChinese"
    #使用自定义UI
    ChangeUI all ".\Contrib\default.exe"
    #程序设置
      Caption "绿化工具"
      OutFile "绿化工具.exe"
      XPStyle on
    #程序执行前操作
      Function .oninit
      InitPluginsDir
        ;设置输出路径且当路径不存在时创建,设定当前的工作目录
        SetOutPath $PluginsDIR
    File "${NSISDIR}\Plugins\waterctrl.dll" ;水波纹
        ;释放文件
        File "Res\Win7Permissions.ini"
        File "Res\top.bmp" ; 图片水波纹
      ;读取windows版本并显示
      ReadRegStr $R1 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion" BuildLab ;此句应放在 "*.ini" 语句之后,否则无效
      WriteINIStr $PLUGINSDIR\Win7Permissions.ini "Field 6" Text $R1             ;此句应放在 "*.ini" 语句之后,否则无效
      Functionend
    #定义要创建的控件(ID不能重复,否则会产生未知错误!)
      ;定义关于按钮
      !ifndef IDC_BUTTON
      !define IDC_BUTTON 1190
      !endif
      ;创建公共函数
      !macro MYMACRO un
      Function ${un}.AboutButton
        MessageBox MB_OK|MB_ICONINFORMATION "个人习得 纯为学习"
      FunctionEnd
      Function ${un}.MyGUIInit
      InitPluginsDir
        ;创建按钮
        ;用法:${CreateButton2} 显示文本 X轴位置 Y轴位置 宽度 高度 父窗口窗口句柄 控件ID 目标函数
        ${CreateButton2} "关于(&A)" 12 213 70 23 $HWNDPARENT ${IDC_BUTTON} ${un}.AboutButton
      FunctionEnd
      !macroend
      ;插入安装函数
      !insertmacro MYMACRO ""
    Function .onGUIEnd
    SetPluginUnload manual
    waterctrl::disablewater
    System::Free
    FunctionEnd
    #函数定义
      Function show
    ;用关于按钮替代取消按钮,故隐藏取消按钮
      GetDlgItem $0 $HWNDPARENT 2 ;获取取消按钮句柄
      ShowWindow $0 ${SW_HIDE}    ;隐藏取消按钮
    ;水波纹
    System::Call 'user32:oadImage(i,t,i,i,i,i,) i (0,"$PLUGINSDIR\top.bmp",0,0,0,0x2010) .s'
    ;将位图载入内存中。!注意位图名称(*.bmp)一定要与 ReserveFile "Res\top.bmp" 中的水波纹图片一致,此处为top.bmp
    ;否则即使编译通过却无水波纹效果。
      Pop $R0  ;如果载入成功, 这里弹出的是内存中位图的句柄
    GetDlgItem $R1 $HWNDPARENT   1046 ;取UI图片句柄
    System::Call '$PLUGINSDIR\WaterCtrl::enablewater(i,i,i,i,i,i) i ($R1,0,0,$R0,3,50)'  ;开始水纹特效
    System::Call '$PLUGINSDIR\WaterCtrl::setwaterparent(i $R1)'  ;设置图片的句柄为图片容器
    System::Call '$PLUGINSDIR\WaterCtrl::flattenwater()'
    System::Call '$PLUGINSDIR\WaterCtrl::waterblob(i,i,i,i) i (125,25,10,500)' ;设置水纹125为初始水纹的水平位置 25为垂直位置 10为振幅大小 500为强度
      installoptions::initdialog /nounload $PluginsDIR\Win7Permissions.ini
      installoptions::show
    FunctionEnd
      Function leave
        ReadINIStr $0 "$PluginsDIR\Win7Permissions.ini" "Settings" "State"
        ${Switch} $0
        ${Default}
          Abort
        ${Case} 2
          Call inst
          Abort
        ${Case} 3
          Call uninst
          Abort
        ${Case} 0
        ${EndSwitch}
        System::Call '$PLUGINSDIR\waterctrl::disablewater()' ;水波纹
      Functionend
      Function inst
      ;此处省略:启用“获取文件权限”代码。
      MessageBox MB_OK|MB_ICONINFORMATION "操作完毕,点击 确定 后退出!"
      Return
      FunctionEnd
      Function uninst
      ;此处省略:停用“获取文件权限”代码。
      MessageBox MB_OK|MB_ICONINFORMATION "操作完毕,点击 确定 后退出!"
      Return
      FunctionEnd
    #区段定义
      Section "-形式而已"
      sectionend

    评分

    参与人数 1金钱 +10 收起 理由
    flighty + 10 支持!不过现在很少用ini写界面了。.

    查看全部评分

    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    Archiver|手机版|小黑屋|联系我们|NSIS中文论坛    

    GMT+8, 2018-7-23 03:56 , Processed in 0.023839 second(s), 16 queries , MemCache On.

    Powered by Discuz!X3.3

    © 2015-2017 NSISFANS.COM

    快速回复 返回顶部 返回列表