Vba 如何在Windows上自动切换飞机模式
在我的笔记本电脑上,我可以通过按FN+F12手动切换飞行模式,我想从VB6项目或VBA自动执行相同的操作 我做了大量搜索,只找到了有关启用/禁用无线适配器或使用Windows 8的Vba 如何在Windows上自动切换飞机模式,vba,vbscript,cmd,automation,vb6,Vba,Vbscript,Cmd,Automation,Vb6,在我的笔记本电脑上,我可以通过按FN+F12手动切换飞行模式,我想从VB6项目或VBA自动执行相同的操作 我做了大量搜索,只找到了有关启用/禁用无线适配器或使用Windows 8的Sendkeys的答案: Dim WSh As Object Set WSh = CreateObject("Wscript.Shell") WSh.Run "C:\WINDOWS\system32\rundll32.exe %SystemRoot%\system32\van.dll,RunVAN", , True S
Sendkeys
的答案:
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}"
但这段代码不可靠,我认为它在Windows7或Windows10上不起作用
所以我的问题是:有没有可靠的方法可以在Windows上自动切换飞行模式。我的键盘上没有功能键,这也没有经过测试,但只是一个想法-你为什么不这样试试:
Sub SetMode()
CreateObject("Shell.Application").MinimizeAll
Application.SendKeys "{F12}" 'Try a way to refer the function key
End Sub
另一个可能的选项如下所示,具体取决于您的窗口:
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:SendKeys
如果键盘上的Fn键没有被Windows截获,它是一个硬件映射到功能键,即“音量增大”。
现在的问题是“关机/启用wifi”键向硬件发送一个信号以关闭卡的电源。
因此,对于SendKey,没有用于“无线关闭/打开”的虚拟键(尽管有一个用于“音量增大”)
解决方案2:Windows 8 API
现在,另一种方法是在此处使用Windows 8 API,更具体地说,使用以下接口:
- IMediaRadioManager
- 伊朗实例
- IRadioInstanceCollection
- IMediaRadioManagerNotifySink
' 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
备注:
你基本上不应该从代码中访问“飞行模式”,因为这是用户的特权,想象一下,如果有人构建了一个应用程序,打开漫游和数据连接,然后在你出国时开始更新…你有没有尝试过寻找CMD行版本的打开和关闭飞行模式?@CodyG。,是的,我只找到了关于启用/禁用无线适配器的答案,但我不想这样,我想切换飞机模式。考虑到随机激活无线电存在假设的安全隐患,我怀疑这是可能的,也不容易通过设计实现自动化。请看和-,似乎有一些自动IT脚本可能对您有用。这是一个简单的指南。看看能不能帮上忙you@Fadi-然后,只需进行测试,在BIOS中反转电脑的设置并更改功能键优先级-请参阅此处-然后,运行代码,如果它符合您的需要,请查找引用功能键的方法。谢谢@vityta,问题在于
FN
键,我尝试了很多方法并下载了一些应用程序来检测按键,但没有任何东西能够检测到“Fn”键。我不想更改函数键的优先级,因为我在Excel和其他应用程序中使用“F1-F12”键很多年了。@Fadi-如果你只更改5分钟,然后检查代码是否有效,那么你就知道如果你找到一种方法来引用FN
键,你的任务就准备好了。这只是一个方向。我试过了,检测到一些键,但没有切换飞行模式的键。当我运行你的代码时,它会像以前一样工作,因此从VBA窗口发送%{F11}
将激活Excel窗口。没有任何更改,我认为活动窗口在这里没有任何影响,因为当我手动按F12
时,它会切换飞行模式,无论活动窗口是什么。谢谢,运行此代码可以提供30多个适配器,我可以只列出已连接的适配器吗?好的,我可以只列出已连接的适配器,方法是在查询中添加where Netconnectionstatus=2和PhysicalAdapter=true
,这对我帮助很大,再次感谢。我未能使用API,请给出如何获取“飞行模式”的示例(VBA或VB6)状态(开或关),那太好了。我没有windows API的示例,我还没有使用它。我只知道它存在,但目前网上几乎没有文档。。。