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.
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.
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...