【问题标题】:How to close the parent dilaog after opened the browser from the message box when clicked on "OK" in the MessageBox在消息框中单击“确定”时如何从消息框中打开浏览器后关闭父对话框
【发布时间】:2021-01-16 13:41:49
【问题描述】:

我在安装安装程序之前检查所需的软件,如果该软件不存在,我将显示带有“确定”按钮的 MessageBox。当用户点击 在“OK”上,它正在导航到给定的 URL 以安装缺少的软件。但这里的问题是,从消息框导航到支持页面时,父对话框没有关闭。

当用户单击“确定”按钮时,我尝试了不同的方法来关闭父对话框。如果有任何方法可以关闭对话框,请建议我。

 Function IsDotNetInstalled
    ClearErrors
    ReadRegStr $0 HKLM "Software\Microsoft\.NETFramework\policy\v3.0" "20319"
    IfErrors Error
    Goto End
    
    Error:
    
    MessageBox MB_OK|MB_ICONSTOP "Setup could not detect Microsoft .NET Framework v4.0 on this computer. $\r$\n$\r$\n Please install Microsoft .NET Framework v4.0 and run setup again. $\r$\n$\r$\n Click on OK to navigate to the Microsoft Support page" IDOK
    
    ExecShell open "https://www.microsoft.com/en-in/download/details.aspx?id=17718"
    
   SendMessage $HwndParent ${WM_QUIT} 0 0
   Abort
   Quit
    
    End:
    SendMessage $HwndParent ${WM_QUIT} 0 0
    Abort
    Quit
    FunctionEnd

我从以下部分调用上述函数:

Section "RegistryTest (required)"
SectionIn RO

Call IsDotNetInstalled
ExecShell "" "$INSTDIR\Test.exe"

SectionEnd

【问题讨论】:

    标签: nsis


    【解决方案1】:

    Abort取消你所在的功能,在Abort之前尝试SendMessage。然而,发送 WM_QUIT 是邪恶的,应该是你最后的手段。应用程序通常不设计用于处理意外的 WM_QUIT 消息。

    你的问题没有上下文,所以我不知道这个函数在哪里被调用。 Quit 也可能有效,具体取决于从哪个回调调用它,并且在它有效时始终是更好的选择。

    【讨论】:

    • 嗨@Anders,很抱歉造成混乱。我从“部分”调用函数“IsDotNetInstalled”。我用更新的代码修改了原始帖子。
    • 我在 "Abort" 之前添加了 "SendMessage" 。但是在消息框中单击“确定”时,它不会关闭父对话框。
    • 我说的是Quit,然后是Abort,而不是相反!在这种情况下,当从Section 调用时,您只需要Quit。无论如何,SendMessage 是一个黑客,你不应该发送WM_QUIT,因为它对应用程序太苛刻了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-03
    • 1970-01-01
    • 2015-05-08
    • 1970-01-01
    • 2018-10-09
    • 2021-03-16
    相关资源
    最近更新 更多