Подтвердить что ты не робот

Как автоматически переключать режим самолета в Windows

На моем ноутбуке я могу вручную переключить режим самолета, нажав FN + F12, я хочу сделать то же самое автоматически из проекта VB6 или VBA.

Я много раз искал и нашел ответы только на Включить/Отключить беспроводной адаптер или с помощью Sendkeys для 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}"

Но этот код не является надежным, и я не думаю, что он будет работать на Windows 7 или Windows 10.

Итак, мой вопрос: есть ли надежный способ автоматического переключения режима самолета в Windows.

4b9b3361

Ответ 1

У меня нет функционального ключа на моей клавиатуре, и это не проверено, а просто идея - почему бы вам не попробовать:

Sub SetMode()

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

End Sub

Еще одна возможная опция - это что-то вроде этого, в зависимости от вашей 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

Знак ~ предназначен для ENTER, а ctrl+escape имитирует клавишу windows на клавиатуре. После того, как вы достигнете того, что хотите, вы можете перемещаться с помощью вкладок и стрелок.

Ответ 2

Решение 1: SendKeys

AFAIK клавиша Fn на клавиатуре не перехватывается Windows, это аппаратное сопоставление с функциональной клавишей, т.е. "Увеличить громкость". Теперь проблема заключается в том, что клавиша "shutdown/enable wifi" посылает сигнал на оборудование для выключения карты. Так что для SendKey нет виртуального ключа для "Wireless off/on" (хотя есть один для "volume up" ).

Решение 2. API Windows 8

Теперь другим подходом было бы использовать API Windows 8 здесь https://msdn.microsoft.com/en-us/library/windows/hardware/hh406627(v=vs.85).aspx и, более конкретно, следующие интерфейсы:

  • IMediaRadioManager
  • IRadioInstance
  • IRadioInstanceCollection
  • IMediaRadioManagerNotifySink

Это должно позволить вам получить радио для bluetooth, wifi,... а также "режим самолета", а затем выключить их, но я никогда не пытался использовать это с VBS.

Решение 3: Использование запросов WMI

Используя запросы WMI, вы можете в основном получить доступ к чему-либо на вашем компьютере, включая сетевые карты. Класс, который вы ищете, это "Win32_NetworkAdapter", и все документы можно найти здесь: https://msdn.microsoft.com/en-us/library/aa394216(v=vs.85).aspx

Вот небольшой пример кода, в котором будут перечислены текущие сетевые адаптеры, вы можете настроить это, чтобы сохранить, какие из них были включены, прежде чем запускать script, чтобы снова включить их после.

' 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

Примечание:

В основном вы не должны получать доступ к "Самолетному режиму" из кода, так как это привилегия пользователя для этого, представьте, создает ли кто-то приложение, которое включает роуминг и соединение с данными, а затем начинает обновление, пока вы находитесь за границей...