连接公司wifi后自动静音,连接家庭wifi或者有线网络后自动取消静音
介绍:你可以在 Python 脚本中指定多个 WiFi 网络,分别定义为“静音”或“取消静音”状态。脚本会检测当前连接的 WiFi,如果连接上属于“静音”的网络,就静音;如果连接上属于“取消静音”的网络,就恢复声音。
前置条件 -- 有python环境
安装python环境 参考链接:https://blog.csdn.net/sensen_kiss/article/details/141940274
第一步:安装必要的 Python 库 注:pip install pywifi pycaw comtypes 前面为python的解释器路径
D:/JAVA/Python3.12.5/python.exe -m pip install pywifi pycaw comtypes
第二步:编写脚本 注:.py
和 .pyw
文件的主要区别在于运行时是否显示控制台窗口。
wifi_mute_control.pyw
import subprocess
import psutil
from pycaw.pycaw import AudioUtilities, IAudioEndpointVolume
from comtypes import CLSCTX_ALL
from ctypes import POINTER, cast
# 指定的 WiFi 名称列表
MUTE_WIFI_LIST = ["afkj001_5G", "佳运出行"] # 连接这些 WiFi 时静音
UNMUTE_WIFI_LIST = ["xD", "Unmute_Wifi_2"] # 连接这些 WiFi 时取消静音
# 静音和取消静音功能,检查当前状态再操作
def mute_system():
devices = AudioUtilities.GetSpeakers()
interface = devices.Activate(IAudioEndpointVolume._iid_, CLSCTX_ALL, None)
volume = cast(interface, POINTER(IAudioEndpointVolume))
current_mute_status = volume.GetMute()
if not current_mute_status:
print("系统正在静音...")
volume.SetMute(1, None)
else:
print("系统已处于静音状态。")
def unmute_system():
devices = AudioUtilities.GetSpeakers()
interface = devices.Activate(IAudioEndpointVolume._iid_, CLSCTX_ALL, None)
volume = cast(interface, POINTER(IAudioEndpointVolume))
current_mute_status = volume.GetMute()
if current_mute_status:
print("系统正在取消静音...")
volume.SetMute(0, None)
else:
print("系统已处于非静音状态。")
# 使用 Windows 命令获取当前连接的 WiFi 名称
def get_connected_wifi():
try:
result = subprocess.check_output(["netsh", "wlan", "show", "interfaces"], encoding="mbcs")
for line in result.splitlines():
if "SSID" in line and "BSSID" not in line:
ssid = line.split(":")[1].strip()
print(f"当前连接的 WiFi SSID:{ssid}")
return ssid
except subprocess.CalledProcessError as e:
print(f"获取 WiFi SSID 失败: {e}")
except UnicodeDecodeError as e:
print(f"读取 WiFi SSID 时发生编码错误: {e}")
return None
# 检查是否连接到有线网络
def is_ethernet_connected():
for iface, addrs in psutil.net_if_addrs().items():
if "Ethernet" in iface or "以太网" in iface:
for addr in addrs:
if addr.family == 2: # AF_INET 表示 IPv4 地址
print(f"检测到有线连接:{iface}")
return True
return False
# 主函数
def main():
connected_wifi = get_connected_wifi()
if connected_wifi:
print(f"检测到 WiFi:{connected_wifi}")
if connected_wifi in MUTE_WIFI_LIST:
print(f"{connected_wifi} 在静音列表中,系统正在静音...")
mute_system()
elif connected_wifi in UNMUTE_WIFI_LIST:
print(f"{connected_wifi} 在取消静音列表中,系统正在取消静音...")
unmute_system()
else:
print(f"连接到 {connected_wifi},无需操作。")
elif is_ethernet_connected():
print("检测到有线网络连接,系统正在取消静音...")
unmute_system()
else:
print("未连接到任何 WiFi 或有线网络。")
if __name__ == "__main__":
main()
第三步:设置任务计划程序(自动化)
步骤 1:打开任务计划程序
- 按下 Win + S 键,搜索“任务计划程序”(Task Scheduler),并打开它。
- 在左侧导航栏中,右键单击“任务计划程序库”并选择“创建任务”。
步骤 2:创建任务
-
常规 选项卡:
- 在“名称”字段中输入任务的名称(例如,“自动静音控制”)。
- 选中“使用最高权限运行”选项,以确保任务在后台运行时拥有足够的权限。
-
触发器 选项卡:
- 点击“新建”来添加一个触发器。
- 从下拉菜单中选择 “工作站解锁” 作为触发条件,这样每次解锁计算机时都会运行该脚本。
- 你也可以选择 “事件” 触发类型来监控网络状态变化,具体步骤如下:
- 触发器类型 选择“在事件中触发”。
- 选择以下设置:
- 日志:
Microsoft-Windows-NetworkProfile/Operational
- 源:
NetworkProfile
- 事件 ID:
10000
(表示网络已连接)
- 日志:
- 点击“确定”保存触发器。
注意:
10001
的事件 ID 表示网络已断开连接,你可以根据需求设置多个触发器(连接网络时静音,断开网络时取消静音)。 -
操作 选项卡:
-
点击“新建”来添加操作。
-
在“操作”下拉菜单中选择 “启动程序”。
-
在“程序或脚本”字段中,输入你的 Python 解释器的路径,例如: (修改为你的python解释器路径)
D:\JAVA\Python3.12.5\pythonw.exe
-
在“添加参数”字段中,输入你的脚本路径,例如: (修改为你的python脚本路径)
D:\WorkSpace\Python-script\wifi_mute_control.pyw
-
点击“确定”保存操作。
-
-
条件 选项卡:
- 你可以勾选“仅在计算机使用交流电源时启动”以减少电池电量消耗,但这不是必须的。
-
设置 选项卡:
- 确保“如果任务失败,重新启动间隔”选项勾选,以便在失败时尝试重新运行任务。
- 其他选项可以保持默认设置。
步骤 3:测试任务
- 完成设置后,点击“确定”保存任务。
- 右键单击任务,并选择“运行”以手动触发任务,确保脚本能够正常运行。
- 锁定计算机并解锁,或连接到指定的 WiFi,查看是否自动静音或取消静音。