Programowe wyłączenie WiFi - Windows 8, 10

Odpowiedz Nowy wątek
2019-09-11 10:03
0

Piszę aplikację wyłączającą WiFi. Nie może się to odbywać poprzez wyłączenie karty sieciowej za pomocą WMI, ani wywołanie netsh itp. Dla Windows 10 mam działający poniższy kod. Jak zrobić analogicznie dla Windows 8?

using Windows.Devices.Radios;

public async void TurnWifiOff()
{
    await Radio.RequestAccessAsync();
    var radios = await Radio.GetRadiosAsync();

    foreach (var radio in radios)
    {
        if (radio.Kind == RadioKind.WiFi)
        {
            await radio.SetStateAsync(RadioState.Off);
        }
    }
}
edytowany 2x, ostatnio: Bednarus3, 2019-09-11 10:18

Pozostało 580 znaków

2019-09-11 15:35
0

Czy karta sieciowa Windows 10 się różni od Windows 8 :| Ten kod który wysłałeś w powyższym wątku powinien zadziałać także na Windows 8.
Jeśli nie opisz bardziej swój problem
Nie widzę żadnego problemu :|


edytowany 4x, ostatnio: Mondonno, 2019-09-11 15:44
To jest UWP, nie zadziała w Windows 8, bo nie było w nim takiego API, o ile pamiętam. - Ktos 2019-09-11 17:38
AAaaa... Spoko :) - Mondonno 2019-09-12 18:58

Pozostało 580 znaków

2019-09-12 12:26
1

Tak jak użytkownik Ktoś skomentował. W Windows 8 nie było API do obsługi WiFi, podobnego do tego dostępnego w Windows 10.
Ale w Windows Vista i nowszych z Windows 10 włącznie jest dostępne inne API, mianowicie: "Native Wifi API" zawarte w bibliotece wlanapi.dll. Niestety jest ona napisana chyba w C++ i nie da się jej użyć przez dodanie referencji. Na szczęście, dla amatorów takich jak ja, CodePlex udostępnił rozwiązanie, które importuje wlanapi.dll do C#: https://archive.codeplex.com/?p=managedwifi Wystarczy dodać do projektu dwa pliki: "Interop.cs" oraz "WlanApi.cs" i można użyć poniższego kodu.

using NativeWifi;
using System.Runtime.InteropServices;

{

    WlanClient client = new WlanClient();
    foreach (WlanClient.WlanInterface wlanIface in client.Interfaces)
    {
        IntPtr radioStatePtr = new IntPtr(0L);
        try
        {
            Wlan.WlanPhyRadioState radioState = new Wlan.WlanPhyRadioState();
            radioState.dwPhyIndex = 0;
            radioState.dot11HardwareRadioState = Wlan.Dot11RadioState.On;
            radioState.dot11SoftwareRadioState = Wlan.Dot11RadioState.Off; //W tym miejscu ustawiamy, czy ma nastąpić włączenie, czy wyłączenie WiFi

            radioStatePtr = Marshal.AllocHGlobal(Marshal.SizeOf(radioState));
            Marshal.StructureToPtr(radioState, radioStatePtr, false);

            Wlan.ThrowIfError(
                Wlan.WlanSetInterface(
                            client.clientHandle,
                            wlanIface.InterfaceGuid,
                            Wlan.WlanIntfOpcode.RadioState,
                            (uint)Marshal.SizeOf(typeof(Wlan.WlanPhyRadioState)),
                            radioStatePtr,
                            IntPtr.Zero));
        }
        finally
        {
            if (radioStatePtr.ToInt64() != 0)
                Marshal.FreeHGlobal(radioStatePtr);
        }
    }
}

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0