确定是否可以连接互联网

问题描述 投票:3回答:3

如何确定NSIS功能上是否有可用的Internet连接?

我看到了Intec插件,但我没有找到该怎么做

谢谢。

nsis
3个回答
4
投票
尝试一下:

Dialer::GetConnectedState Pop $1

如果有互联网连接,则$ 1要么是online,要么是offline

了解更多:http://nsis.sourceforge.net/Docs/Dialer/Dialer.txt

0
投票

0
投票
INetworkListManager::GetConnectivity()

这是使用此功能的方法:

!include "LogicLib.nsh"

Function IsInternetConnected
    !define CLSID_NetworkListManager "{DCB00C01-570F-4A9B-8D69-199FDBA5723B}"
    !define IID_INetworkListManager "{DCB00000-570F-4A9B-8D69-199FDBA5723B}"
    !define CLSCTX_ALL 23

    Push $R0
    Push $R1
    Push $R2
    Push $R3
    Push $R9

    ; Result - is internet connected.
    StrCpy $R0 false

    SetPluginUnload alwaysoff

    System::Call "ole32::CoCreateInstance(g '${CLSID_NetworkListManager}', i 0, i ${CLSCTX_ALL}, g '${IID_INetworkListManager}', *i .R1) i .R9"
    IntCmp $R9 0 0 end

    ; INetworkListManager->GetConnectivity(NLM_CONNECTIVITY*)
    System::Call "$R1->13(*i .R2) i .R9"
    IntCmp $R9 0 0 end

    ; IUnknown->Release()    
    System::Call "$R1->2() i"

    ; Internet IPv4: NLM_CONNECTIVITY_IPV4_INTERNET = 64.
    IntOp $R3 $R2 & 64
    ${If} $R3 <> 0
        StrCpy $R0 true
        Goto end
    ${EndIf}

    ; Internet IPv6: NLM_CONNECTIVITY_IPV6_INTERNET = 1024.
    IntOp $R3 $R2 & 1024
    ${If} $R3 <> 0
        StrCpy $R0 true
        Goto end
    ${EndIf}

  end:
    SetPluginUnload manual

    Pop $R9
    Pop $R3
    Pop $R2
    Pop $R1

    Exch $R0
FunctionEnd

也许对某人有用。

© www.soinside.com 2019 - 2024. All rights reserved.