如何在Windows上自动切换飞行模式

时间:2017-02-07 13:13:33

标签: vba vbscript cmd automation vb6

在我的笔记本电脑上,我可以通过按 FN + F12 手动切换飞行模式,我想从VB6项目或VBA自动执行相同的操作。

我进行了大量搜索,但只找到了有关启用/禁用无线适配器或使用{8} for Windows 8的答案:

Sendkeys

但是这段代码不可靠,我认为它不适用于Windows 7或Windows 10。

所以我的问题是:是否有任何可靠的方法可以在Windows上自动切换飞行模式。

2 个答案:

答案 0 :(得分:4)

我的键盘上没有功能键,这没有经过测试,只是一个想法 - 为什么你不尝试这样:

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

~符号用于输入,ctrl+escape模拟键盘上的windows键。达到想要的效果后,您可以使用标签和箭头进行导航。

答案 1 :(得分:2)

解决方案1:SendKeys

AFAIK键盘上的Fn键不会被Windows拦截,它是硬件映射到功能键即。 "音量增加"。 现在的问题是"关闭/启用wifi" key向硬件发送信号以关闭卡。 因此,对于SendKey来说,没有虚拟键可用于"无线关/开" (虽然有一个用于"音量增加")。

解决方案2:Windows 8 API

现在另一种方法是在这里使用Windows 8 API https://msdn.microsoft.com/en-us/library/windows/hardware/hh406627(v=vs.85).aspx,更具体地说是以下接口:

  • IMediaRadioManager
  • IRadioInstance
  • IRadioInstanceCollection
  • IMediaRadioManagerNotifySink

这应该可以让你获得蓝牙,wifi,...以及"飞机模式"然后关闭它们,但我从来没有尝试过用VBS。

解决方案3:使用WMI查询

使用WMI查询,您基本上可以访问计算机中的任何内容,包括网卡。 您正在寻找的课程是" Win32_NetworkAdapter"所有文档都可以在这里找到:https://msdn.microsoft.com/en-us/library/aa394216(v=vs.85).aspx

下面是一个列出当前网络适配器的示例代码,您可以自定义此代码以保存在运行脚本之前已启用哪些网络适配器,以便能够在之后重新启用它们。

' 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

备注:

你基本上不应该使用"飞机模式"从代码中获取用户权限,想象一下如果有人构建了一个开启漫游和数据连接的应用程序,那么当你在国外时就会开始更新......