Solución:
La red alojada (que se puede configurar mediante el netsh wlan set hostednetwork ...
comando) y el “nuevo” Mobile Hotspot utilizan diferentes tecnologías bajo el capó.
Hay una API de WinRT para controlar y configurar el “nuevo” punto de acceso móvil al que se refiere. Puede llamarlo desde PowerShell:
El siguiente fragmento de código requiere la función de espera de Ben N. para IAsyncOperation y IAsyncAction en PowerShell, que se puede encontrar aquí.
$connectionProfile = [Windows.Networking.Connectivity.NetworkInformation,Windows.Networking.Connectivity,ContentType=WindowsRuntime]::GetInternetConnectionProfile()
$tetheringManager = [Windows.Networking.NetworkOperators.NetworkOperatorTetheringManager,Windows.Networking.NetworkOperators,ContentType=WindowsRuntime]::CreateFromConnectionProfile($connectionProfile)
# Be sure to include Ben N.'s await for IAsyncOperation:
# https://superuser.com/questions/1341997/using-a-uwp-api-namespace-in-powershell
# Check whether Mobile Hotspot is enabled
$tetheringManager.TetheringOperationalState
# Start Mobile Hotspot
Await ($tetheringManager.StartTetheringAsync()) ([Windows.Networking.NetworkOperators.NetworkOperatorTetheringOperationResult])
# Stop Mobile Hotspot
Await ($tetheringManager.StopTetheringAsync()) ([Windows.Networking.NetworkOperators.NetworkOperatorTetheringOperationResult])
La clase NetworkOperatorTetheringManager también le permite configurar el SSID y la frase de contraseña de su punto de acceso mediante programación.
Basado en el comentario de PowerShell anterior,
Estos son los componentes del código WinRT para mezclar / combinar para realizar las tareas anteriores para las actividades de WiFi Direct 2.0 HotSpot usando C ++ sin dependencias de otras herramientas, etc. (funcionan en IoT Core, etc.):
- Establecer programáticamente el SSID y / o PassPhrase
- Consultar mediante programación el punto de acceso WiFi Direct 2.0 actual estado
- Gire programáticamente encendido apagado el HotSpot WiFi Direct 2.0
#include <winrt/Windows.Networking.Connectivity.h>
#include <winrt/Windows.Networking.NetworkOperators.h>
namespace winrt { // /ZW embed in :<winrt> when `Windows` is ambiguously defined
static void af_winrt_wifi_hotspot_test() {
// start ms-settings:network-mobilehotspot
init_apartment(); // apartment_type::multi_threaded
auto connectionProfile { Windows::Networking::Connectivity::NetworkInformation::GetInternetConnectionProfile() };
auto tetheringManager = Windows::Networking::NetworkOperators::NetworkOperatorTetheringManager::CreateFromConnectionProfile(connectionProfile);
switch(tetheringManager.TetheringOperationalState()) {
case Windows::Networking::NetworkOperators::TetheringOperationalState::Off: {
auto ioAsync = tetheringManager.StartTetheringAsync();
auto fResult = ioAsync.get();
}
break;
case Windows::Networking::NetworkOperators::TetheringOperationalState::On: {
auto ioAsync = tetheringManager.StopTetheringAsync();
auto fResult = ioAsync.get();
}
break;
case Windows::Networking::NetworkOperators::TetheringOperationalState::InTransition:
default:
break;
}
clear_factory_cache();
uninit_apartment();
}
}