설명: 파이썬 스크립트를 통해 여러 WiFi 네트워크를 설정해 특정 네트워크에 연결 시 음소거 또는 볼륨 복원 기능을 자동화할 수 있습니다. 스크립트는 현재 연결된 WiFi 정보를 확인하고, 설정된 목록과 비교하여 음소거/복원 작업을 수행합니다.
사전 조건: 파이썬 인터프리터가 설치되어 있어야 합니다.
파이썬 환경 설치 가이드: https://blog.csdn.net/sensen_kiss/article/details/141940274
필요 라이브러리 설치
----------------------------------------------------------------------
D:/JAVA/Python3.12.5/python.exe -m pip install pywifi pycaw comtypes
스크립트 작성
-----------------------------------------------------
network_sound_control.pyw
import subprocess
import psutil
from pycaw.pycaw import AudioUtilities, IAudioEndpointVolume
from comtypes import CLSCTX_ALL
from ctypes import POINTER, cast
# 설정된 WiFi 네트워크 목록
SILENCE_WIFI_LIST = ["NETWORK_1_5G", "OFFICE_WIFI"] # 해당 네트워크 연결 시 음소거
UNMUTE_WIFI_LIST = ["HOME_WIFI", "DESKTOP_NETWORK"] # 해당 네트워크 연결 시 볼륨 복원
# 오디오 상태 조절 함수
def adjust_volume(mute_state):
devices = AudioUtilities.GetSpeakers()
interface = devices.Activate(IAudioEndpointVolume._iid_, CLSCTX_ALL, None)
volume = cast(interface, POINTER(IAudioEndpointVolume))
current_status = volume.GetMute()
if mute_state:
if not current_status:
print("시스템 음소거 중...")
volume.SetMute(1, None)
else:
if current_status:
print("시스템 볼륨 복원 중...")
volume.SetMute(0, None)
# 현재 연결된 WiFi 정보 추출
def get_current_network():
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}")
return ssid
except Exception as e:
print(f"네트워크 정보 조회 실패: {e}")
return None
# 유선 연결 여부 확인
def check_ethernet():
for iface, addrs in psutil.net_if_addrs().items():
if "Ethernet" in iface or "以太网" in iface:
for addr in addrs:
if addr.family == 2: # IPv4 주소
print(f"유선 연결 감지: {iface}")
return True
return False
# 메인 실행 로직
def main():
current_network = get_current_network()
if current_network:
print(f"연결된 네트워크: {current_network}")
if current_network in SILENCE_WIFI_LIST:
adjust_volume(True)
elif current_network in UNMUTE_WIFI_LIST:
adjust_volume(False)
else:
print("기본 설정으로 유지됩니다.")
elif check_ethernet():
print("유선 연결 감지됨, 볼륨 복원 중...")
adjust_volume(False)
else:
print("모든 네트워크 연결 해제됨.")
if __name__ == "__main__":
main()
자동화 설정 (작업 스케줄러)
-----------------
작업 생성 절차
- 작업 스케줄러 열기
- Win + S 입력 후 "작업 스케줄러" 검색
- 왼쪽 메뉴에서 "작업 스케줄러 라이브러리" 우클릭 → "작업 만들기" - 일반 탭 설정
- 이름: 예) "네트워크 소리 관리"
- "최고 권한으로 실행" 체크 - 트리거 탭 설정
- "새로 만들기" 클릭
- 트리거 유형: "컴퓨터 잠금 해제" 선택
- 또는 "이벤트 기반" 선택:
- 로그: Microsoft-Windows-NetworkProfile/Operational
- 원인: NetworkProfile
- 이벤트 ID: 10000 (네트워크 연결) - 작업 탭 설정
- "새로 만들기" 클릭
- 프로그램/스크립트: 파이썬 인터프리터 경로 입력
`D:\JAVA\Python3.12.5\pythonw.exe`
- 매개변수: 스크립트 파일 경로 입력
`D:\WorkSpace\Python-script\network_sound_control.pyw` - 조건 탭
- "배터리 절약 모드에서만 실행" 옵션 선택 권장 - 설정 탭
- "실패 시 재시도 간격" 활성화
테스트 방법
1. 작업 저장 후 우클릭 → "실행"으로 수동 테스트
2. 컴퓨터 잠금 후 해제 또는 설정된 WiFi 연결 시 동작 확인