Comment faire pour basculer automatiquement le mode Avion sur Windows

sur mon portable je peux basculer le mode Avion manuellement en appuyant sur FN+ F12, je veux faire la même chose automatiquement à partir de VB6 project ou VBA.

j'ai fait beaucoup de recherche et j'ai seulement trouvé des réponses sur Activer/Désactiver l'adaptateur sans fil ou en utilisant Sendkeys Pour Windows 8:

Dim WSh As Object
Set WSh = CreateObject("Wscript.Shell")
WSh.Run "C:WINDOWSsystem32rundll32.exe %SystemRoot%system32van.dll,RunVAN", , True
Sleep 200
WSh.SendKeys " "
Sleep 1000
WSh.SendKeys "{ESC}"

mais ce code n'est pas fiable et je ne pense pas qu'il fonctionnera sur Windows 7 ou Windows 10.

Donc ma question est: Est-il un moyen fiable pour basculer automatiquement le mode Avion sur Windows.

17
demandé sur Fadi 2017-02-07 16:13:32

2 réponses

je n'ai pas de touche de fonction sur mon clavier, et ce n'est pas testé, mais juste une idée, pourquoi ne pas vous essayer comme ceci:

Sub SetMode()

    CreateObject("Shell.Application").MinimizeAll        
    Application.SendKeys "{F12}"  'Try a way to refer the function key

End Sub

une autre option possible est quelque chose comme ceci, en fonction de vos fenêtres:

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

~ signe est pour ENTRER, et l' ctrl+escape simule l' windows de votre clavier. Après avoir atteint ce que vous voulez, vous pouvez naviguer avec des onglets et des flèches.

4
répondu Vityata 2017-02-16 15:24:26

Solution 1 : SendKeys

AFAIK la touche Fn d'un clavier n'est pas interceptée par Windows, c'est un mappage matériel vers une touche de fonction. "Volume Up". Maintenant le problème avec cela est que la touche "shutdown/enable wifi" envoie un signal au matériel pour éteindre la carte. Ainsi, pour le SendKey, il n'y a pas de clé virtuelle pour "Wireless off/on" (bien qu'il y en ait une pour "volume up").

Solution 2 : Windows 8 API

Maintenant, l'autre approche serait d'utiliser l'API Windows 8 ici https://msdn.microsoft.com/en-us/library/windows/hardware/hh406627(v=vs. 85).aspx et plus précisément les interfaces suivantes :

  • IMediaRadioManager
  • IRadioInstance
  • IRadioInstanceCollection
  • IMediaRadioManagerNotifySink

Ceci devrait vous permettre d'obtenir la radio bluetooth, wifi, ... ainsi que le "mode Avion" puis les éteindre, mais je n'ai jamais essayé de l'utiliser avec VBS.

Solution 3: Utilisation des requêtes WMI

en utilisant les requêtes WMI, vous pouvez accéder à n'importe quoi dans votre machine, y compris les cartes réseau. La classe que vous recherchez est "Win32_NetworkAdapter" et tous les docs peuvent être trouvés ici:https://msdn.microsoft.com/en-us/library/aa394216 (v=vs 85).aspx

Voici un petit exemple de code qui va énumérez les adaptateurs réseau actuels, vous pouvez personnaliser ceci pour enregistrer ceux qui ont été activés avant d'exécuter le script pour être en mesure de les réactiver aprè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

Remarque :

Vous n'êtes pas censés accéder au "mode avion" à partir du code car c'est un privilège de l'utilisateur de le faire, imaginez si quelqu'un construit une application qui se déclenche sur le roaming et la connexion de données commence alors la mise à jour pendant que vous êtes à l'étranger...

2
répondu Foxtrot Romeo 2017-02-16 15:34:55