完美实现笔记本在有线网卡连通时自动关闭wifi,有线网卡未连通时自动开启wifi
来源:互联网 发布:echart 引入json地图 编辑:程序博客网 时间:2024/05/16 06:32
参考1:
https://www.raymond.cc/blog/auto-disable-wireless-when-lan-connected/2/>
对其中提到的第四种方法比较感兴趣,绿色环保,可自己设置,且通过事件触发计划任务感觉耗资源比较少吧.
但是通过netsh.exe开关无线网卡会弹出黑窗口. 考虑 到 win+x (mblctr.exe) 开关无线的方式感觉比较舒服,于是搜索了一下相关资料,发现他实际调用的
WlanSetInterface + wlan_intf_opcode_radio_state 实现了wifi 的开关.
参考2:
http://blog.csdn.net/lincyang/article/details/36179875
wif开关程序完整代码如下:#include <windows.h>#include <stdio.h>#include <shellapi.h>#include <wlanapi.h> // Need to link with shell32.lib #pragma comment(lib, "shell32.lib") #pragma comment(lib, "wlanapi.lib") BOOL wifiOnOff(int on){DWORD dwResult = 0;DWORD dwMaxClient = 2;DWORD dwCurVersion = 0;HANDLE hClient = NULL;PWLAN_INTERFACE_INFO_LIST pIfList = NULL;PWLAN_INTERFACE_INFO pIfInfo = NULL;dwResult = WlanOpenHandle(dwMaxClient, NULL, &dwCurVersion, &hClient);if (dwResult != ERROR_SUCCESS) {wprintf(L"WlanOpenHandle failed with error: %u\n", dwResult);return false;}dwResult = WlanEnumInterfaces(hClient, NULL, &pIfList);if (dwResult != ERROR_SUCCESS) {wprintf(L"WlanEnumInterfaces failed with error: %u\n", dwResult);return false;}WLAN_PHY_RADIO_STATE state;state.dwPhyIndex = 0;if (on)state.dot11SoftwareRadioState = dot11_radio_state_on;else state.dot11SoftwareRadioState = dot11_radio_state_off;PVOID pData = &state;dwResult = WlanSetInterface(hClient, &pIfList->InterfaceInfo[0].InterfaceGuid,wlan_intf_opcode_radio_state, sizeof(WLAN_PHY_RADIO_STATE), pData, NULL);if (dwResult == ERROR_SUCCESS){wprintf(L"set state success!\n");}else{wprintf(L"set state failed!err is %d\n", dwResult);}}int APIENTRY _tWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPTSTR lpCmdLine,//命令行参数 1开wifi,0关wifi _In_ int nCmdShow){UNREFERENCED_PARAMETER(hPrevInstance);UNREFERENCED_PARAMETER(lpCmdLine);int p = 0;swscanf_s(lpCmdLine, L"%d", &p);wifiOnOff(p);return 0;}
根据参考1第四中方法创建计划任务,调用上述开关程序.Ok,任务完成.
以下是截取参考1中的第四种方法:
4. Create a Scheduled Task to Auto Switch
Using this method relies on your computer’s LAN adapter sending an event to the Windows Event Viewer when it disconnects and reconnects. With this information you can then create tasks to disable or re-enable the Wifi adapter depending on the connection status of the wired connection. This does not work on Windows XP because it doesn’t have the option to trigger a task when a specific event is logged.
1. Go to Control Panel -> Administrative Tools -> Event Viewer. When Event Viewer is open, go to Windows Logs -> System.
2. Disconnect and reconnect your Ethernet cable a few times to generate some events. Press F5 to refresh the window and click on the newest events, hopefully you will find a “Port is up”, “link up” or similar description in the lower General tab to indicate the LAN has connected, and another one when the LAN was disconnected.
3. Make a note of the name in the Source column and the Event ID for the connect and disconnect events you found. On our Dell laptop we got a connect Event ID of 121 and disconnect of 83 with the Source name of “yukonw7”, yours will likely be different though. If you can only find a Source event for Services Control Manager and not one that looks like the LAN adapter name, this method will not work because an event needs to be generated by the Ethernet adapter itself.
4. Go to Control Panel -> Administrative Tools -> Task Scheduler, then click on Task Scheduler Library -> Create Basic Task.
5. Give the Task a name, such as “Undock Laptop” or “Switch to Wifi” etc. Click Next, select “When a specific event is logged”, and click Next again.
6. In the Log drop down select System, find the source name from step 3 in the drop down list or type it in, then enter the Event ID for the disconnect event. Click Next, make sure Start a program is selected, click Next again.
7. In the Program/script box enter C:\Windows\System32\Netsh.exe or browse for it. Enter the following into the Add arguments box:
interface set interface “Wireless Network Connection” enable
This is assuming your WiFi connection is called “Wireless Network Connection”. To check go to Control Panel -> Network and Sharing Center -> Change adapter settings, and change the name if it’s different. Click Next, review the task making sure it’s correct, then click Finish.
8. Now you have a task that enables the WiFi on a LAN disconnect, you obviously have to do the opposite to disable the WiFi on LAN reconnect. Repeat steps 4 – 7 again, but change the name in step 5 to “Dock Laptop” or “Switch to LAN” etc, enter the connect Event ID in step 6, and on the argument line in step 7, swap the word enable for disable.
Open the Network Connections window and you should notice the wireless connection disable itself when the Ethernet cable is inserted and vice versa. This worked flawlessly on our Dell laptops, but didn’t work on an older MSI laptop because it wouldn’t generate a specific event on connecting/disconnecting the Ethernet cable.
Read More: https://www.raymond.cc/blog/auto-disable-wireless-when-lan-connected/2/
- 完美实现笔记本在有线网卡连通时自动关闭wifi,有线网卡未连通时自动开启wifi
- linux下笔记本有线网卡"未受管理"
- 笔记本有线网卡未识别无法获取IP地址
- 在Thinkpad上使用WiFi共享精灵有时会遇到无线网卡自动关闭怎么破
- Win7下建立WiFi热点共享网络(共享3G无线网卡/有线本地连接)
- archlinux实现wifi和有线联网
- 如何让笔记本的无线与有线网卡不冲突
- 笔记本Wifi上网通过有线让其它电脑上网
- DOS批处理笔记本连接WIFI和有线网络
- win7中通过有线连接共享wifi热点设置,让其他有无线网卡的终端连接上网。。
- Win7笔记本无线网卡做WIFI热点
- ubuntu有线网卡解决经历
- Linux有线网卡驱动分析
- 获取有线网卡的物理地址
- USB有线网卡怎么用
- Ubuntu 安装有线网卡驱动
- 批处理切换无线网卡和有线网卡
- 有线网卡与无线网卡同时使用
- python 单引号,双引号用法的理解
- 摩尔定律也顶不住的安迪-比尔定律
- 关于vue的那些事儿
- 结合图拉普拉斯的半监督学习
- 二分法模板
- 完美实现笔记本在有线网卡连通时自动关闭wifi,有线网卡未连通时自动开启wifi
- Python 练习实例6
- Publish Flask on IIS
- Math 类中一些常用的数学运算
- HTML5和CSS3基础综合版
- System类源码分析
- 记录
- Jzoj5230 队伍统计
- LINUX中的运行级别