Как отключить состояние радио Wi-Fi с помощью VB.NET - PullRequest
0 голосов
/ 10 октября 2019

Я ищу решение (код), как переключать Wi-Fi с помощью кода VB, как вы можете сделать это через Центр поддержки в Windows 10.

Это означает отключение программного радио, а не отключение беспроводной карты полностью.

Я нашел несколько кодов, но не знаю, как их преобразовать или использовать в VB.

var access = await WiFiAdapter.RequestAccessAsync();
if (access == WiFiAccessStatus.Allowed)
{
 var radios = await Radio.GetRadiosAsync();
 foreach (var radio in radios)
 {
      if (radio.Kind == RadioKind.WiFi)
      {
          await radio.SetStateAsync(RadioState.Off);
      }
  }
}

... другой код:

{
using (var client = new WlanClient())
    {
        return client.Interfaces.FirstOrDefault(x => x.InterfaceName == interfaceName)?.InterfaceGuid;
    }
}

private static bool SetRadioState(Guid interfaceGuid, Wlan.Dot11RadioState radioState)
{
    var state = new Wlan.WlanPhyRadioState
    {
        dwPhyIndex = (int)Wlan.Dot11PhyType.Any,
        dot11SoftwareRadioState = radioState,
    };
    var size = Marshal.SizeOf(state);

    var pointer = IntPtr.Zero;
    try
    {
        pointer = Marshal.AllocHGlobal(size);
        Marshal.StructureToPtr(state, pointer, false);

        var clientHandle = IntPtr.Zero;
        try
        {
            uint negotiatedVersion;
            var result = Wlan.WlanOpenHandle(
                Wlan.WLAN_CLIENT_VERSION_LONGHORN,
                IntPtr.Zero,
                out negotiatedVersion,
                out clientHandle);
            if (result != 0)
                return false;

            result = Wlan.WlanSetInterface(
                clientHandle,
                interfaceGuid,
                Wlan.WlanIntfOpcode.RadioState,
                (uint)size,
                pointer,
                IntPtr.Zero);

            return (result == 0);
        }
        finally
        {
            Wlan.WlanCloseHandle(
                clientHandle,
                IntPtr.Zero);
        }
    }
    finally
    {
        Marshal.FreeHGlobal(pointer);
    }
}

public static string[] GetAvailableNetworkProfileNames(string interfaceName)
{
    using (var client = new WlanClient())
    {
        var wlanInterface = client.Interfaces.FirstOrDefault(x => x.InterfaceName == interfaceName);
        if (wlanInterface == null)
            return Array.Empty<string>();

        return wlanInterface.GetAvailableNetworkList(Wlan.WlanGetAvailableNetworkFlags.IncludeAllManualHiddenProfiles)
            .Select(x => x.profileName)
            .Where(x => !string.IsNullOrEmpty(x))
            .ToArray();
    }
}

public static void ConnectNetwork(string interfaceName, string profileName)
{
    using (var client = new WlanClient())
    {
        var wlanInterface = client.Interfaces.FirstOrDefault(x => x.InterfaceName == interfaceName);
        if (wlanInterface == null)
            return;

        wlanInterface.Connect(Wlan.WlanConnectionMode.Profile, Wlan.Dot11BssType.Any, profileName);
    }
}
}

Isэто можно сделать через VB? Спасибо за вашу помощь.

...