• 爱情文章
  • 亲情文章
  • 友情文章
  • 生活随笔
  • 校园文章
  • 经典文章
  • 人生哲理
  • 励志文章
  • 搞笑文章
  • 心情日记
  • 英语文章
  • 范文大全
  • 作文大全
  • 新闻阅读
  • 当前位置: 山茶花美文网 > 英语文章 > 正文

    【编写NSIS脚本语言实现超级按钮】 按钮AS的编写

    时间:2020-03-26来源:山茶花美文网 本文已影响 山茶花美文网手机站

    很多开发工具中都提供了插件方便用户实现一些常见的功能,减少程序员的负担。今天小编就来跟大家介绍如何调用ButtonLinker插件实现超级按钮效果。

    /*

    #脚本范例#

    编写:X-Star, zhfi

    描述:利用插件与头文件创建超级按钮&链接&菜单,无需修改UI即可实现

    资源:插件 "ButtonEvent.dll"、"linker.dll"、"System.dll" 及头文件 "ButtonLinkerLib.nsh"

    */

    !AddPluginDir "."

    !AddIncludeDir "."

    !include MUI2.nsh

    !include ButtonLinkerLib.nsh

    ;!include UsefulLib.nsh

    ; --------------------------------------------------

    ; General settings.

    Name "ButtonLinker Example"

    OutFile "ButtonLinkerMUI.exe"

    SetCompressor /SOLID lzma

    ;ReserveFile "ButtonLinker.dll"

    ; --------------------------------------------------

    ; MUI interface settings.

    # We want to use our own UI with custom buttons!

    # The event handler for our parent button is added in MyGUIInit.

    !define MUI_CUSTOMFUNCTION_GUIINIT MyGUIInit

    # Don"t skip to the finish page.

    !define MUI_FINISHPAGE_NOAUTOCLOSE

    ; --------------------------------------------------

    ; Insert MUI pages.

    ; Installer pages

    !insertmacro MUI_PAGE_WELCOME

    !insertmacro MUI_PAGE_LICENSE ButtonLinker.nsi

    !insertmacro MUI_PAGE_INSTFILES

    ; UnInstaller pages

    !define MUI_CUSTOMFUNCTION_UnGUIINIT Un.MyGUIInit

    !insertmacro MUI_UnPAGE_WELCOME

    !insertmacro MUI_UnPAGE_INSTFILES

    ; --------------------------------------------------

    ; Languages.

    !insertmacro MUI_LANGUAGE "SimpChinese"

    /*定义要创建的控件ID*/

    ;注意:ID不能重复,否则会产生未知错误!

    ;定义关于按钮

    !ifndef IDC_BUTTON

    !define IDC_BUTTON 1190

    !endif

    ;定义链接

    !ifndef IDC_LINKER

    !define IDC_LINKER 1200

    !endif

    ;定义复选框CheckBox2

    !ifndef IDC_CheckBox2

    !define IDC_CheckBox2 1210

    !endif

    ;定义复选框CheckBox3

    !ifndef IDC_CheckBox3

    !define IDC_CheckBox3 1220

    !endif

    ;定义关于菜单1

    !ifndef IDM_ABOUT1

    !define IDM_ABOUT1 1300

    !endif

    ;定义关于菜单2

    !ifndef IDM_ABOUT2

    !define IDM_ABOUT2 1301

    !endif

    ; --------------------------------------------------

    ; 创建公共函数

    !macro MYMACRO un

    Function ${un}AboutButton

    MessageBox MB_OK|MB_ICONINFORMATION "关于按钮!"

    FunctionEnd

    Function ${un}AboutMenu1

    MessageBox MB_OK|MB_ICONINFORMATION "关于菜单1!"

    FunctionEnd

    Function ${un}AboutMenu2

    MessageBox MB_OK|MB_ICONINFORMATION "关于菜单2!"

    FunctionEnd

    Function ${un}CheckBox3

    /*获取控件状态*/

    ;用法:${GetBoxState} 输出变量(0/1/error) 父窗口窗口句柄 控件ID

    ${GetBoxState} $0 $HWNDPARENT ${IDC_CheckBox3}

    ; MessageBox MB_OK|MB_ICONINFORMATION "$0"

    ${if} $0 == 0

    MessageBox MB_yesno|MB_ICONINFORMATION "取消选择?" idyes true idno false

    true:

    ${SetBoxState} 0 $HWNDPARENT ${IDC_CheckBox3}

    goto End

    false:

    ${SetBoxState} 1 $HWNDPARENT ${IDC_CheckBox3}

    goto End

    ${elseif} $0 == 1

    MessageBox MB_yesno|MB_ICONINFORMATION "选择?" idyes true2 idno false2

    true2:

    ${SetBoxState} 1 $HWNDPARENT ${IDC_CheckBox3}

    goto End

    false2:

    ${SetBoxState} 0 $HWNDPARENT ${IDC_CheckBox3}

    goto End

    ${else}

    MessageBox MB_OK|MB_ICONINFORMATION "$0!"

    ${endif}

    End:

    FunctionEnd

    Function ${un}MyGUIInit

    InitPluginsDir

    Pop $0

    Pop $1

    Pop $2

    Pop $3

    /*创建超级按钮*/

    ;获取“取消”按钮的位置

    ${GetDlgItemRect} $0 $1 $2 $3 $HWNDPARENT ${IDC_CANCEL}

    IntOp $2 $3 - $1

    ;用法:${CreateButton2} 显示文本 X轴位置 Y轴位置 宽度 高度 父窗口窗口句柄 控件ID 目标函数

    ;参考“取消”的位置来创建超级按钮

    ${CreateButton2} "关于(&A)" 20 $1 80 $2 $HWNDPARENT ${IDC_BUTTON} ${un}AboutButton

    /*创建超级链接*/

    ;获取“取消”按钮的位置

    ${GetDlgItemRect} $0 $1 $2 $3 $HWNDPARENT ${IDC_CANCEL}

    IntOp $2 $3 - $1

    IntOp $1 $1 + 4

    IntOp $2 $2 - 1

    ;用法:${CreateLinker2} 显示文本 X轴位置 Y轴位置 宽度 高度 父窗口窗口句柄 控件ID 链接地址

    ;参考“取消”的位置来创建超级链接

    ${CreateLinker2} "访问我的主页" 120 $1 80 $2 $HWNDPARENT ${IDC_LINKER} "/xstar2008"

    /*创建超级复选框*/

    ;获取“取消”按钮的位置

    ${GetDlgItemRect} $0 $1 $2 $3 $HWNDPARENT ${IDC_CANCEL}

    IntOp $2 $3 - $1

    IntOp $1 $1 + 4

    IntOp $2 $2 - 1

    ;用法:${CreateCheckBox2} 显示文本 X轴位置 Y轴位置 宽度 高度 父窗口窗口句柄 控件ID 控件状态(0/1)

    ;参考“取消”的位置来创建超级复选框

    ${CreateCheckBox2} "CheckBox2" 200 $1 50 $2 $HWNDPARENT ${IDC_CheckBox2} 1

    ;用法:${CreateCheckBox3} 显示文本 X轴位置 Y轴位置 宽度 高度 父窗口窗口句柄 控件ID 控件状态(0/1) 目标函数

    ;参考“取消”的位置来创建超级复选框

    ${CreateCheckBox3} "CheckBox3" 250 $1 50 $2 $HWNDPARENT ${IDC_CheckBox3} 0 ${un}CheckBox3

    /*创建超级菜单*/

    ;用法:${CreateMenu2} 显示文本 菜单类型 父窗口窗口句柄 菜单ID 目标函数

    ${CreateMenu2} 0 ${MF_SEPARATOR} $HWNDPARENT 0 ${un}MyGUIInit

    ${CreateMenu2} "关于菜单1(&A)" ${MF_STRING} $HWNDPARENT ${IDM_ABOUT1} ${un}AboutMenu1

    ${CreateMenu2} "关于菜单2(&A)" ${MF_STRING} $HWNDPARENT ${IDM_ABOUT2} ${un}AboutMenu2

    FunctionEnd

    Function ${un}.onGUIEnd

    ButtonEvent::unload

    Linker::unload

    FunctionEnd

    ; --------------------------------------

    !macroend

    ; 插入安装/卸载函数

    !insertmacro MYMACRO ""

    !insertmacro MYMACRO "un."

    !insertmacro MYMACRO "un"

    Section "Dummy" SecDummy

    /*获取控件状态*/

    ;用法:${GetBoxState} 输出变量(0/1/error) 父窗口窗口句柄 控件ID

    ${GetBoxState} $0 $HWNDPARENT ${IDC_CheckBox2}

    StrCmp $0 1 0 +2

    Messagebox MB_OK "你想干嘛?"

    Sleep 1000

    WriteUninstaller "$Exediruninst.exe"

    SectionEnd

    Section Uninstall

    Delete "$InstdirUninst.exe"

    SectionEnd

    • 爱情文章
    • 亲情文章
    • 友情文章
    • 随笔
    • 哲理
    • 励志
    • 范文大全