【问题标题】:NSIS -- Manage CheckBox selection in a custom page for setting Internet Explorer home pageNSIS -- 管理自定义页面中的复选框选择以设置 Internet Explorer 主页
【发布时间】:2014-05-10 02:36:20
【问题描述】:

我使用 NSIS 制作了一个自定义页面,并在其中创建了一个 CheckBox 来设置 Internet Explorer 的主页。 我结合了从不同来源收集的这些代码

创建复选框:

${NSD_CreateCheckbox} 8 80 10 10 "CheckBox1"
Pop $Custom_Page1_CheckBox1
GetFunctionAddress $0 OnCheckbox
nsDialogs::OnClick $Custom_Page1_CheckBox1 $0

这是我用来设置Internet Explorer主页的功能:

Function OnCheckbox

WriteRegStr HKCU "Software\Microsoft\­­­Internet Explorer\Main" "Start Page" "http://www/homepage.com/"
FunctionEnd

问题是没有管理用户可以选择的选择。

如何解决这个问题?

【问题讨论】:

  • 您是否正在向用户显示页面?这是你的全部代码?
  • 感谢您回复布鲁。是的,我正在向用户显示自定义页面。因此,如果他不想更改他的主页,他可以取消选中该复选框。上面的代码是我找到的全部代码......创建一个复选框,调用一个函数并在函数内放置一个代码,它将更改 Internet Explorer 的主页。这些代码不足以执行此操作吗?
  • 为什么用“webbrowser-control”标记?
  • 所以这不是您拥有的完整代码,不是吗?您需要多一点来显示页面并使其正常工作。请参阅下面的 Anders 示例。
  • @Anders .. 我使用 webbrowser-control 作为标签,因为该操作包括设置主页.. 所以,就像我们正在控制一个 webbrowser :-p

标签: browser nsis


【解决方案1】:

OnClick 处理程序不是执行更改用户系统的操作的正确位置。

您应该检查用户即将离开页面时的状态。如果此自定义页面在 InstFiles 页面之前,我建议您将状态保存在变量中,然后在执行其他安装任务的同时在 section 中执行操作。

!include nsDialogs.nsh
!include LogicLib.nsh

Page Custom MyPageCreate MyPageLeave
Page InstFiles

var OverrideIEHomeCheck

Function MyPageCreate
nsDialogs::Create 1018
Pop $0
${NSD_CreateCheckbox} 8 80 50u 10u "Evil"
Pop $OverrideIEHomeCheck
nsDialogs::Show
FunctionEnd

Function MyPageLeave
${NSD_GetState} $OverrideIEHomeCheck $0
${If} $0 <> ${BST_UNCHECKED}
    MessageBox mb_ok "Checked, do something now or remember the state"
${EndIf}
FunctionEnd

【讨论】:

  • 这是一个完美的解决方案.. 它有效.. 再次感谢安德斯.. 正如你所说,自定义页面在 InstFiles 之前.. 我​​不知道如何将状态保存在变量并从一个部分调用它。你能给我一个简单的代码吗?
  • 代码已经差不多了。将 '${NSD_GetState} $OverrideIEHomeCheck $0' 更改为 '${NSD_GetState} $OverrideIEHomeCheck $OverrideIEHomeState' 并将 ${If} ... 部分移动到您检查新 OverrideIEHomeState 变量的部分
  • 非常感谢安德斯。
猜你喜欢
  • 2010-12-23
  • 2021-04-21
  • 2020-06-18
  • 1970-01-01
  • 2021-05-21
  • 2012-08-17
  • 2021-03-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多