C# 窗口和捕获门户

C# 窗口和捕获门户,c#,windows,network-programming,C#,Windows,Network Programming,尝试检测internet连接(即连接到咖啡店的笔记本电脑)上的捕获门户何时正在使用 尝试使用网络列表管理器COM对象实现此目标: NETWORKLIST.NetworkListManager _networkListManager = new NetworkListManager(); foreach (INetworkConnection net in _networkListManager.GetNetworkConnections()) { if (

尝试检测internet连接(即连接到咖啡店的笔记本电脑)上的捕获门户何时正在使用

尝试使用网络列表管理器COM对象实现此目标:

NETWORKLIST.NetworkListManager _networkListManager = new NetworkListManager();
foreach (INetworkConnection net in _networkListManager.GetNetworkConnections())
{                
    if (net.GetConnectivity().HasFlag(NLM_CONNECTIVITY.NLM_CONNECTIVITY_IPV4_INTERNET) == true)
      {
           // Check if we are connected by a captive web portal
           // using NLM_INTERNET_CONNECTIVITY_WEBHIJACK
      }                                
 }
根据此处的文档:

“可以通过使用INetwork或INetworkConnection接口的IPropertyBag接口查询NA_InternetConnectionyV4或NA_InternetConnectionyV6属性来检索这些连接标志”

我发现NA_InternetConnectionyV4枚举不存在(实现不完整),或者我不知道如何使用它们


是否有人实际使用过此方法,或者对检测捕获门户何时正在使用的方法有什么想法?

关闭此方法,调查显示NA_InternetConnectionyV4枚举不存在,MSDN文档不正确。

关闭此方法,调查显示,NA_InternetConnectionyV4枚举不存在,MSDN文档不正确。

这不是C,但我发现这些API在C上工作++

pNetworkListManager->GetNetworks(NLM_ENUM_NETWORK_CONNECTED,&pEnum) 细木工*pINetwork

//Should actually loop through the possible networks.
HRESULT hr = pEnum->Next(1, &pINetwork, nullptr);

IPropertyBag *pNetworkPropertyBag;
HRESULT hrQueryInterface = pINetwork->QueryInterface(IID_IPropertyBag, (LPVOID*)&pNetworkPropertyBag);
if (SUCCEEDED(hrQueryInterface 1) && pNetworkPropertyBag != nullptr)
{
    NLM_CONNECTIVITY networkConnectivity;
    VARIANT variantConnectivity;

    if (SUCCEEDED(pINetwork->GetConnectivity(&networkConnectivity)))
    {
        if ((networkConnectivity & 
        NLM_CONNECTIVITY_IPV4_INTERNET) == NLM_CONNECTIVITY_IPV4_INTERNET)
        {
            VariantInit(&variantConnectivity);
            if (SUCCEEDED(pNetworkPropertyBag->Read(NA_InternetConnectivityV4, &variantConnectivity, nullptr)) && (V_UINT(&variantConnectivity) & NLM_INTERNET_CONNECTIVITY_WEBHIJACK) == NLM_INTERNET_CONNECTIVITY_WEBHIJACK)
            {
                //Captive Portal detected
            }
            VariantClear(&variantConnectivity);
    }
}
查看此项了解完整详细信息:

这不是C,但我发现这些API在C上工作++

pNetworkListManager->GetNetworks(NLM_ENUM_NETWORK_CONNECTED,&pEnum) 细木工*pINetwork

//Should actually loop through the possible networks.
HRESULT hr = pEnum->Next(1, &pINetwork, nullptr);

IPropertyBag *pNetworkPropertyBag;
HRESULT hrQueryInterface = pINetwork->QueryInterface(IID_IPropertyBag, (LPVOID*)&pNetworkPropertyBag);
if (SUCCEEDED(hrQueryInterface 1) && pNetworkPropertyBag != nullptr)
{
    NLM_CONNECTIVITY networkConnectivity;
    VARIANT variantConnectivity;

    if (SUCCEEDED(pINetwork->GetConnectivity(&networkConnectivity)))
    {
        if ((networkConnectivity & 
        NLM_CONNECTIVITY_IPV4_INTERNET) == NLM_CONNECTIVITY_IPV4_INTERNET)
        {
            VariantInit(&variantConnectivity);
            if (SUCCEEDED(pNetworkPropertyBag->Read(NA_InternetConnectivityV4, &variantConnectivity, nullptr)) && (V_UINT(&variantConnectivity) & NLM_INTERNET_CONNECTIVITY_WEBHIJACK) == NLM_INTERNET_CONNECTIVITY_WEBHIJACK)
            {
                //Captive Portal detected
            }
            VariantClear(&variantConnectivity);
    }
}
查看此项了解全部详细信息:

您有C#的解决方案吗?我正在尝试检测UWP应用程序中的捕获门户。您有针对C#的解决方案吗?我试图在UWP应用程序中检测捕获的门户。