Ограничение уровня громкости в определенное время

  • Автор темы Автор темы D1gaTel
  • Дата начала Дата начала

D1gaTel

Бог флуда
В общем попросил тут дипсик написать мне код, что бы например с 22 до 8 утра громкость на пк была всегда в 1% (женя любит громко слушать муpыку ночь., с басами блять)

И накаляк мне он такой вот код для powershell:

NGINX:
# Проверка прав администратора
if (-not ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
    Start-Process powershell.exe "-NoProfile -ExecutionPolicy Bypass -File `"$PSCommandPath`"" -Verb RunAs
    exit
}

# Установка модуля AudioDeviceCmdlets (если не установлен)
if (-not (Get-Module -Name AudioDeviceCmdlets -ListAvailable)) {
    Install-PackageProvider -Name NuGet -Force | Out-Null
    Install-Module -Name AudioDeviceCmdlets -Force -AllowClobber
}

Import-Module AudioDeviceCmdlets

# Основной цикл регулировки громкости
while ($true) {
    $currentTime = Get-Date
    $currentHour = $currentTime.Hour

    # Ночной режим (22:00 - 8:00) → громкость 1%
    if ($currentHour -ge 22 -or $currentHour -lt 8) {
        Set-AudioDevice -Volume 1
        Write-Host "[$currentTime] Ночной режим: громкость 1%" -ForegroundColor DarkYellow
    }
    # Дневной режим (8:00 - 22:00) → громкость 70%
    else {
        Set-AudioDevice -Volume 70
        Write-Host "[$currentTime] Дневной режим: громкость 70%" -ForegroundColor Green
    }

    # Пауза 5 минут перед следующей проверкой
    Start-Sleep -Seconds 300;
}

И естественно не работает :lol: , выдает ошибку powershell
NGINX:
C:\1D\deepseek_powershell_20250617_057991.ps1:16 знак:15
+ while ($true) {
+               ~
Отсутствует закрывающий знак "}" в блоке операторов или определении типа.
    + CategoryInfo          : ParserError: (:) [], ParseException
    + FullyQualifiedErrorId : MissingEndCurlyBrace

Говорил ему, что хуйня код не работает, он давал новые, новые и новые, которые нехуя не работают так-же.

В чём тут ошибка? Я в упор ее не вижу, помогите :)

P.s. Сам не силён в программировании..
 
Последнее редактирование:
Код:
# AutoVolumeControl.ps1
# Автоматическая регулировка громкости в зависимости от времени суток

# Проверка, что скрипт запущен из файла
if (-not $PSCommandPath) {
    Write-Error "Скрипт должен быть запущен из .ps1 файла, а не напрямую в консоли."
    exit 1
}

# Проверка прав администратора
if (-not ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole(`
    [Security.Principal.WindowsBuiltInRole]::Administrator)) {
    Write-Host "Повышение прав до администратора..." -ForegroundColor Yellow
    Start-Process powershell.exe "-NoProfile -ExecutionPolicy Bypass -File `"$PSCommandPath`"" -Verb RunAs
    exit
}

# Установка NuGet (если не установлен)
if (-not (Get-PackageProvider -Name NuGet -ErrorAction SilentlyContinue)) {
    Write-Host "Устанавливаю поставщика NuGet..." -ForegroundColor Cyan
    Install-PackageProvider -Name NuGet -Force -Scope CurrentUser | Out-Null
}

# Установка модуля AudioDeviceCmdlets (если не установлен)
if (-not (Get-Module -Name AudioDeviceCmdlets -ListAvailable)) {
    Write-Host "Устанавливаю модуль AudioDeviceCmdlets..." -ForegroundColor Cyan
    Install-Module -Name AudioDeviceCmdlets -Force -AllowClobber -Scope CurrentUser
}

# Импорт модуля
try {
    Import-Module AudioDeviceCmdlets -ErrorAction Stop
} catch {
    Write-Error "Не удалось импортировать модуль AudioDeviceCmdlets. Перезапустите PowerShell вручную."
    exit 1
}

# Основной цикл
while ($true) {
    $currentTime = Get-Date
    $currentHour = $currentTime.Hour

    try {
        $device = Get-AudioDevice -Playback
        if ($null -eq $device) {
            Write-Warning "Нет активного устройства воспроизведения."
        } else {
            if ($currentHour -ge 22 -or $currentHour -lt 8) {
                Set-AudioDevice -Volume 1
                Write-Host "[$currentTime] Ночной режим: громкость 1%" -ForegroundColor DarkYellow
            } else {
                Set-AudioDevice -Volume 70
                Write-Host "[$currentTime] Дневной режим: громкость 70%" -ForegroundColor Green
            }
        }
    } catch {
        Write-Warning "Ошибка при управлении устройством звука: $_"
    }

    Start-Sleep -Seconds 300  # 5 минут
}

  • Открой Блокнот или любой текстовый редактор.
  • Вставь код из выше.
  • Сохрани файл как:
    AutoVolumeControl.ps1
    (обязательно с расширением .ps1)
  • Запусти файл от имени администратора:
 
@Asmadey

Может у меня powershell кривой, но твой код выдает кучу ошибок.
Код:
PS C:\1D\123> powershell ./1.ps1
C:\1D\123\1.ps1:47 знак:16
+         } else {
+                ~
Отсутствует закрывающий знак "}" в блоке операторов или определении типа.
C:\1D\123\1.ps1:43 знак:9
+     try {
+         ~
Отсутствует закрывающий знак "}" в блоке операторов или определении типа.
C:\1D\123\1.ps1:61 знак:2
+ }
+  ~
В операторе Try отсутствует блок Catch или блок Finally.
C:\1D\123\1.ps1:39 знак:15
+ while ($true) {
+               ~
Отсутствует закрывающий знак "}" в блоке операторов или определении типа.
C:\1D\123\1.ps1:5 знак:26
+ if (-not $PSCommandPath) {
+                          ~
Отсутствует закрывающий знак "}" в блоке операторов или определении типа.
    + CategoryInfo          : ParserError: (:) [], ParseException
    + FullyQualifiedErrorId : MissingEndCurlyBrace

Надоело мне плясать с poweshell, попросил дипсика написать на питоне код, и о чудо с 1 раза сразу все заработало как надо.
Python:
import time
from datetime import datetime
from pycaw.pycaw import AudioUtilities, IAudioEndpointVolume
from ctypes import cast, POINTER
from comtypes import CLSCTX_ALL

def set_volume(percent):
    devices = AudioUtilities.GetSpeakers()
    interface = devices.Activate(
        IAudioEndpointVolume._iid_, CLSCTX_ALL, None)
    volume = cast(interface, POINTER(IAudioEndpointVolume))
    volume.SetMasterVolumeLevelScalar(percent / 100, None)

def is_night_time():
    current_hour = datetime.now().hour
    return current_hour >= 22 or current_hour < 8

def main():
    while True:
        if is_night_time():
            set_volume(1)
            print(f"Ночное время ({datetime.now().strftime('%H:%M')}), громкость установлена на 1%")
        else:
            print(f"Дневное время ({datetime.now().strftime('%H:%M')}), громкость не ограничена")
        time.sleep(60)  # Проверяем каждую минуту

if __name__ == "__main__":
    print("Скрипт ограничения громкости запущен...")
    main()
 
Назад
Сверху