vba - quitar - modo avion windows 7
Cómo cambiar automáticamente el modo Avión en Windows (2)
En mi computadora portátil puedo cambiar el modo Avión manualmente presionando FN + F12 , quiero hacer lo mismo automáticamente desde el proyecto VB6 o VBA.
Hice mucha búsqueda y solo encontré respuestas sobre Habilitar / Inhabilitar el adaptador inalámbrico o usar Sendkeys
para Windows 8:
Dim WSh As Object
Set WSh = CreateObject("Wscript.Shell")
WSh.Run "C:/WINDOWS/system32/rundll32.exe %SystemRoot%/system32/van.dll,RunVAN", , True
Sleep 200
WSh.SendKeys " "
Sleep 1000
WSh.SendKeys "{ESC}"
Pero este código no es confiable y no creo que funcione en Windows 7 o Windows 10.
Así que mi pregunta es: ¿Existe alguna forma confiable de alternar automáticamente el modo Avión en Windows?
No tengo una tecla de función en mi teclado, y esto no está probado, solo es una idea. ¿Por qué no lo intentas así?
Sub SetMode()
CreateObject("Shell.Application").MinimizeAll
Application.SendKeys "{F12}" ''Try a way to refer the function key
End Sub
Otra opción posible es algo como esto, dependiendo de tu Windows:
Option Explicit
Public Sub TestMe()
Application.SendKeys ("^{ESC}")
Application.Wait Now + TimeValue("00:00:01")
SendKeys ("{s}")
SendKeys ("{e}")
SendKeys ("{t}")
SendKeys ("{t}")
SendKeys ("{i}")
SendKeys ("{n}")
SendKeys ("{g}")
SendKeys ("{s}")
SendKeys "~", False
Application.Wait Now + TimeValue("00:00:01")
SendKeys ("{a}")
SendKeys ("{i}")
SendKeys ("{r}")
Application.Wait Now + TimeValue("00:00:01")
SendKeys "~", False
Application.Wait Now + TimeValue("00:00:01")
SendKeys "~", False
End Sub
El signo ~
es para ENTRAR, y la tecla ctrl+escape
simula la tecla de windows
en su teclado. Después de alcanzar lo que desea, puede navegar con pestañas y flechas.
Solución 1: SendKeys
AFAIK la tecla Fn en un teclado no es interceptada por Windows, es una asignación de hardware a una tecla de función, es decir. "Sube el volumen". Ahora el problema con eso es que la tecla "apagar / habilitar wifi" envía una señal al hardware para apagar la tarjeta. Así que eso es para SendKey, no hay una clave virtual para "Conexión / desconexión inalámbrica" (aunque hay una para "subir volumen").
Solución 2: La API de Windows 8
Ahora, el otro enfoque sería utilizar la API de Windows 8 aquí https://msdn.microsoft.com/en-us/library/windows/hardware/hh406627(v=vs.85).aspx y más específicamente las siguientes interfaces:
- IMediaRadioManager
- IRadioInstance
- IRadioInstanceCollection
- IMediaRadioManagerNotifySink
Esto debería permitirle obtener la radio para bluetooth, wifi, ... así como el "modo avión" y luego apagarlos, pero nunca he intentado usar eso con VBS.
Solución 3: Uso de consultas WMI
Con las consultas de WMI, básicamente puede acceder a cualquier elemento de su máquina, incluidas las tarjetas de red. La clase que busca es "Win32_NetworkAdapter" y puede encontrar todos los documentos aquí: https://msdn.microsoft.com/en-us/library/aa394216(v=vs.85).aspx
Aquí hay un pequeño código de ejemplo que mostrará una lista de los adaptadores de red actuales; puede personalizarlo para guardar los que estaban habilitados antes de ejecutar el script para poder volver a habilitarlos después.
'' connects to the WMI server of the local machine
Set objConnection = GetObject("winmgmts:" _
& "{impersonationLevel=Delegate," _
& "authenticationLevel=PktPrivacy}!" _
& "//localhost/root/cimv2")
'' gets a list of all the network adapters in the system
Set objNetworkAdapters = objConnection.ExecQuery("SELECT * FROM Win32_NetworkAdapter")
'' loops through all network adapters
For Each objCurrentNetworkAdapter in objNetworkAdapters
'' objCurrentNetworkAdapter.Disable
'' objCurrentNetworkAdapter.Enable
WScript.Echo objCurrentNetworkAdapter.Name
Next
Observación:
Básicamente, se supone que no debe acceder al "Modo avión" desde el código, ya que es un privilegio de usuario hacerlo. Imagínese si alguien crea una aplicación que active el roaming y la conexión de datos y luego comience a actualizarse mientras está en el extranjero ...