Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用ButtonEvent插件,在MUI NSI安装程序中单击按钮,填写目录文本框_Button_Installation_Custom Controls_Nsis_Modern Ui - Fatal编程技术网

使用ButtonEvent插件,在MUI NSI安装程序中单击按钮,填写目录文本框

使用ButtonEvent插件,在MUI NSI安装程序中单击按钮,填写目录文本框,button,installation,custom-controls,nsis,modern-ui,Button,Installation,Custom Controls,Nsis,Modern Ui,我已经在安装程序的MUI目录页面上使用Resource Hacker添加了自定义按钮,现在我希望当单击按钮时,用户输入InstallDir(应用程序安装路径)的默认文本框中会填充一些指定的文本。请帮我查一下密码 我正在使用ButtonEvent插件,但我不知道在事件处理程序中编写什么代码。当前,我只是在单击按钮以确保事件正常运行时显示一个消息框。 请帮忙 !define IDC_BUTTON_SETPATH 1200 (1200 is the ID OF THE BUTTON ADDED fro

我已经在安装程序的MUI目录页面上使用Resource Hacker添加了自定义按钮,现在我希望当单击按钮时,用户输入InstallDir(应用程序安装路径)的默认文本框中会填充一些指定的文本。请帮我查一下密码

我正在使用ButtonEvent插件,但我不知道在事件处理程序中编写什么代码。当前,我只是在单击按钮以确保事件正常运行时显示一个消息框。 请帮忙

!define IDC_BUTTON_SETPATH 1200 (1200 is the ID OF THE BUTTON ADDED from Resource hacker)

;Pages

  !insertmacro MUI_PAGE_WELCOME

  !define MUI_PAGE_CUSTOMFUNCTION_SHOW DirectoryShow
  !define MUI_PAGE_CUSTOMFUNCTION_LEAVE DirectoryLeave

   !insertmacro MUI_PAGE_DIRECTORY

 !insertmacro MUI_PAGE_COMPONENTS
 !insertmacro MUI_PAGE_INSTFILES
 !insertmacro MUI_PAGE_FINISH

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

Function buttonclicked
   MessageBox MB_OK|MB_ICONEXCLAMATION "You Clicked Me "

  Abort

FunctionEnd

# Occurs on installer UI initialization.
Function myGuiInit

  # Create event handler for our parent window button.
  GetFunctionAddress $R3 buttonclicked
  ButtonEvent::AddEventHandler ${IDC_BUTTON_SETPATH} $R3

FunctionEnd
---------------------------新编辑的部分--三个自定义按钮的代码-----------------

!include MUI2.nsh
; --------------------------------------------------

  !define IDC_BUTTON_CDRIVEPATH         1200
  !define IDC_BUTTON_DDRIVEPATH         1201
  !define IDC_BUTTON_EDRIVEPATH         1202

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

# The event handler for our parent button is added in MyGUIInit.
!define MUI_CUSTOMFUNCTION_GUIINIT myGuiInit
  !define MUI_HEADERIMAGE
  !define MUI_HEADERIMAGE_BITMAP "${NSISDIR}\Contrib\Graphics\Header\pksicon.bmp" ; optional
  !define MUI_WELCOMEFINISHPAGE_BITMAP "${NSISDIR}\Contrib\Graphics\Wizard\pksleftimage.bmp" ;
;--------------------------------


XPStyle on


;Interface Settings

  !define MUI_ABORTWARNING

;--------------------------------
;Pages

  !insertmacro MUI_PAGE_WELCOME
  !insertmacro MUI_PAGE_LICENSE "${NSISDIR}\Docs\Modern UI\licensefile.txt"
!define MUI_PAGE_CUSTOMFUNCTION_SHOW DirectoryShow

   !insertmacro MUI_PAGE_DIRECTORY
 !insertmacro MUI_PAGE_COMPONENTS
 !insertmacro MUI_PAGE_INSTFILES
 !insertmacro MUI_PAGE_FINISH

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

; Languages.

!insertmacro MUI_LANGUAGE English

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


!macro SetDirPageInstallDir text
!if "${MUI_SYSVERSION}" < "2.0"
Push $0
FindWindow $0 "#32770" "" $HWNDPARENT
GetDlgItem $0 $0 0x3FB
SendMessage $0 ${WM_SETTEXT} 0 "STR:${text}"
Pop $0
!else
SendMessage $mui.DirectoryPage.Directory ${WM_SETTEXT} 0 "STR:${text}"
!endif
!macroend


# Called when the CDRIVEPATH button is pressed.
Function CDRIVEPATH

  MessageBox MB_OK|MB_ICONEXCLAMATION "The Software will be installed in : C:\ "

;In buttonclicked handler
!insertmacro SetDirPageInstallDir "C:\"

FunctionEnd
;--------------------------------

Function DDRIVEPATH

  MessageBox MB_OK|MB_ICONEXCLAMATION "The Software will be installed in : D:\ "

;In buttonclicked handler
!insertmacro SetDirPageInstallDir "D:\"

FunctionEnd
;--------------------------------
Function EDRIVEPATH

  MessageBox MB_OK|MB_ICONEXCLAMATION "The Software will be installed in : E:\ "

;In buttonclicked handler
!insertmacro SetDirPageInstallDir "E:\"

FunctionEnd
;--------------------------------

InstallDir $INSTDIR


# Occurs on installer UI initialization.
Function myGuiInit

  # Create event handler for our parent window button.
  GetFunctionAddress $R0 CDRIVEPATH
  ButtonEvent::AddEventHandler ${IDC_BUTTON_CDRIVEPATH} $R0

;  GetFunctionAddress $R1 EDRIVEPATH  **-----this line causes error**
;   ButtonEvent::AddEventHandler ${IDC_BUTTON_DDRIVEPATH} $R1   -----this line causes error

;  GetFunctionAddress $R2 EDRIVEPATH  **-----this line causes error**
;  ButtonEvent::AddEventHandler ${IDC_BUTTON_EDRIVEPATH} $R2  -----this line causes error



FunctionEnd

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

# Occurs on Directory page show.
Function DirectoryShow

  # Create event handler for our Directory page button. /NOTIFY makes
  # the button move to the next page when clicked.
  ButtonEvent::AddEventHandler ${IDC_BUTTON_CDRIVEPATH} 

  ButtonEvent::AddEventHandler ${IDC_BUTTON_DDRIVEPATH} 

  ButtonEvent::AddEventHandler ${IDC_BUTTON_EDRIVEPATH} 


  # Disable next button.
  GetDlgItem $R0 $HWNDPARENT 1
  EnableWindow $R0 0


FunctionEnd 


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

;General

  ;Name and file
 Name NEW_FILL_TEXTBOX_BUTTONCLICK
OutFile NEW_FILL_TEXTBOX_BUTTONCLICK.exe


 Section

    DetailPrint "SUCCESSFULLY INSTALLED"

SectionEnd
!包括MUI2.nsh
; --------------------------------------------------
!定义IDC按钮CDRIVEPATH 1200
!定义IDC_按钮_地址路径1201
!定义IDC按钮驱动路径1202
; --------------------------------------------------
#在MyGUIInit中添加了父按钮的事件处理程序。
!定义MUI_CUSTOMFUNCTION_GUIINIT myGuiInit
!定义MUI_头图像
!定义MUI_HEADERIMAGE_位图“${NSISDIR}\Contrib\Graphics\Header\pksicon.bmp”;可选择的
!定义MUI_WELCOMEFINISHPAGE_位图“${NSISDIR}\Contrib\Graphics\Wizard\pkslefitimage.bmp”;
;--------------------------------
XPStyle on
;接口设置
!定义MUI_ABORTWARNING
;--------------------------------
;页
!插入宏MUI\u页面\u欢迎
!insertmacro MUI_页面_许可证“${NSISDIR}\Docs\Modern UI\licensefile.txt”
!定义MUI\u页面\u自定义功能\u显示目录显示
!insertmacro MUI_页面目录
!插入宏MUI_页面_组件
!插入宏MUI_页面文件
!插入宏MUI\u页面\u完成
; --------------------------------------------------
; 语言。
!插入宏梅语言英语
; --------------------------------------------------
!宏SetDirPageInstallDir文本
!如果“${MUI_SYSVERSION}”<“2.0”
推送$0
FindWindow$0“#32770”“”$HWNDPARENT
GetDlgItem$0$0 0x3FB
SendMessage$0${WM_SETTEXT}0“STR:${text}”
流行音乐$0
!其他的
SendMessage$mui.DirectoryPage.Directory${WM_SETTEXT}0“STR:${text}”
!恩迪夫
!宏端
#按下CDRIVEPATH按钮时调用。
函数CDRIVEPATH
MessageBox MB|U OK | MB|U图标提示“软件将安装在:C:\”
;在按钮式处理程序中
!insertmacro SetDirPageInstallDir“C:\”
功能端
;--------------------------------
函数地址路径
MessageBox MB|U OK | MB|U图标提示“软件将安装在:D:\”
;在按钮式处理程序中
!insertmacro SetDirPageInstallDir“D:\”
功能端
;--------------------------------
函数驱动路径
MessageBox MB|U OK | MB|U图标提示“软件将安装在:E:\”
;在按钮式处理程序中
!insertmacro SetDirPageInstallDir“E:\”
功能端
;--------------------------------
InstallDir$INSTDIR
#在安装程序UI初始化时发生。
函数myGuiInit
#为父窗口按钮创建事件处理程序。
GetFunctionAddress$R0 CDRIVEPATH
ButtonEvent::AddEventHandler${IDC_BUTTON_CDRIVEPATH}$R0
;  GetFunctionAddress$R1 EDRIVEPATH**--此行导致错误**
;   ButtonEvent::AddEventHandler${IDC_BUTTON_AddressPath}$R1-----此行导致错误
;  GetFunctionAddress$R2 EDRIVEPATH**--此行导致错误**
;  ButtonEvent::AddEventHandler${IDC_BUTTON_EDRIVEPATH}$R2-----此行导致错误
功能端
;------------------------------------------------
#在目录页显示时发生。
函数目录显示
#为我们的目录页按钮创建事件处理程序/通知制造
#单击时,按钮将移动到下一页。
ButtonEvent::AddEventHandler${IDC_BUTTON_CDRIVEPATH}
ButtonEvent::AddEventHandler${IDC_BUTTON_AddressPath}
ButtonEvent::AddEventHandler${IDC_BUTTON_EDRIVEPATH}
#禁用下一步按钮。
GetDlgItem$R0$HWNDPARENT 1
启用窗口$R0
功能端
; --------------------------------------------------
;一般的
;名称和文件
名称新\u填充\u文本框\u按钮单击
OutFile新建\填充\文本框\按钮单击.exe
部分
DetailPrint“已成功安装”
分段结束

您没有说您使用的是哪个版本的MUI,此宏应该同时处理这两个问题

!macro SetDirPageInstallDir text
!if "${MUI_SYSVERSION}" < "2.0"
Push $0
FindWindow $0 "#32770" "" $HWNDPARENT
GetDlgItem $0 $0 0x3FB
SendMessage $0 ${WM_SETTEXT} 0 "STR:${text}"
Pop $0
!else
SendMessage $mui.DirectoryPage.Directory ${WM_SETTEXT} 0 "STR:${text}"
!endif
!macroend


;In buttonclicked handler
!insertmacro SetDirPageInstallDir "$programfiles\Hello World"
!宏SetDirPageInstallDir文本
!如果“${MUI_SYSVERSION}”<“2.0”
推送$0
FindWindow$0“#32770”“”$HWNDPARENT
GetDlgItem$0$0 0x3FB
SendMessage$0${WM_SETTEXT}0“STR:${text}”
流行音乐$0
!其他的
SendMessage$mui.DirectoryPage.Directory${WM_SETTEXT}0“STR:${text}”
!恩迪夫
!宏端
;在按钮式处理程序中
!insertmacro SetDirPageInstallDir“$programfiles\Hello World”

非常感谢,先生,但是当我使用2或3个自定义按钮时,当我运行安装程序时,当出现自定义按钮所在的对话框页面时,它会自动退出。我已将新代码发布在我的post@sqlchild:我从未使用过该插件,但在myGuiInit和DirectoryShow中添加按钮对我来说并不合适。要获得更多信息,您应该询问nsis论坛上的插件作者或wiki上的插件对话页面……好的,先生,这是一个按钮事件插件问题?当我的对话框上只有一个自定义按钮,并且正在使用ButtonEvent插件时,您的代码可以成功运行,然后它就可以正常运行了。所以,这个问题是关于插件的,所以我要问作者,告诉我代码,为多个按钮添加ButtonEvent?不是吗?