WiFi 연결 상태에 따라 시스템 소리 제어 스크립트

설명: 파이썬 스크립트를 통해 여러 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()

자동화 설정 (작업 스케줄러)
-----------------

작업 생성 절차

  1. 작업 스케줄러 열기
    - Win + S 입력 후 "작업 스케줄러" 검색
    - 왼쪽 메뉴에서 "작업 스케줄러 라이브러리" 우클릭 → "작업 만들기"
  2. 일반 탭 설정
    - 이름: 예) "네트워크 소리 관리"
    - "최고 권한으로 실행" 체크
  3. 트리거 탭 설정
    - "새로 만들기" 클릭
    - 트리거 유형: "컴퓨터 잠금 해제" 선택
    - 또는 "이벤트 기반" 선택:
    - 로그: Microsoft-Windows-NetworkProfile/Operational
    - 원인: NetworkProfile
    - 이벤트 ID: 10000 (네트워크 연결)
  4. 작업 탭 설정
    - "새로 만들기" 클릭
    - 프로그램/스크립트: 파이썬 인터프리터 경로 입력
    `D:\JAVA\Python3.12.5\pythonw.exe`

    - 매개변수: 스크립트 파일 경로 입력
    `D:\WorkSpace\Python-script\network_sound_control.pyw`
  5. 조건 탭
    - "배터리 절약 모드에서만 실행" 옵션 선택 권장
  6. 설정 탭
    - "실패 시 재시도 간격" 활성화

테스트 방법
1. 작업 저장 후 우클릭 → "실행"으로 수동 테스트
2. 컴퓨터 잠금 후 해제 또는 설정된 WiFi 연결 시 동작 확인

태그: python pywifi pycaw comtypes network-monitoring

6월 14일 19:51에 게시됨