Showing preview only (1,467K chars total). Download the full file or copy to clipboard to get everything.
Repository: lx-s/WinMute
Branch: main
Commit: 7c5a8b4a5f66
Files: 108
Total size: 1.4 MB
Directory structure:
gitextract_si3e3_3t/
├── .editorconfig
├── .gitattributes
├── .github/
│ ├── FUNDING.yml
│ └── ISSUE_TEMPLATE/
│ ├── bug_report.md
│ └── feature_request.md
├── .gitignore
├── CONTRIBUTING.md
├── CURRENT_VERSION
├── Dist/
│ ├── InnoSetup/
│ │ ├── translations/
│ │ │ ├── info-before.de.txt
│ │ │ ├── info-before.en.txt
│ │ │ ├── info-before.es.txt
│ │ │ ├── info-before.fr.txt
│ │ │ ├── info-before.it.txt
│ │ │ ├── info-before.ko.txt
│ │ │ ├── info-before.lv.txt
│ │ │ ├── info-before.nl.txt
│ │ │ ├── info-before.ro.txt
│ │ │ ├── info-before.ru.txt
│ │ │ └── info-before.zh_Hans.txt
│ │ ├── winmute-setup-languages.iss
│ │ └── winmute-setup.iss
│ ├── bin/
│ │ ├── changelog.txt
│ │ ├── license.rtf
│ │ ├── license.txt
│ │ └── update-check.disabled
│ ├── chocolatey/
│ │ ├── WinMute.nuspec
│ │ ├── howto.txt
│ │ └── tools/
│ │ ├── VERIFICATION.txt
│ │ ├── chocolateybeforemodify.ps1
│ │ ├── chocolateyinstall.ps1
│ │ └── chocolateyuninstall.ps1
│ ├── winget/
│ │ └── manifests/
│ │ └── l/
│ │ └── LX-Systems/
│ │ └── WinMute/
│ │ ├── 2.5.0.0/
│ │ │ ├── LX-Systems.WinMute.installer.yaml
│ │ │ ├── LX-Systems.WinMute.locale.en-US.yaml
│ │ │ └── LX-Systems.WinMute.yaml
│ │ ├── 2.5.1.0/
│ │ │ ├── LX-Systems.WinMute.installer.yaml
│ │ │ ├── LX-Systems.WinMute.locale.en-US.yaml
│ │ │ └── LX-Systems.WinMute.yaml
│ │ ├── 2.5.2.0/
│ │ │ ├── LX-Systems.WinMute.installer.yaml
│ │ │ ├── LX-Systems.WinMute.locale.en-US.yaml
│ │ │ └── LX-Systems.WinMute.yaml
│ │ └── 2.5.3.0/
│ │ ├── LX-Systems.WinMute.installer.yaml
│ │ ├── LX-Systems.WinMute.locale.en-US.yaml
│ │ └── LX-Systems.WinMute.yaml
│ └── winget.txt
├── LICENSE
├── README.md
├── Translations/
│ ├── lang-de.json
│ ├── lang-en.json
│ ├── lang-es.json
│ ├── lang-fr.json
│ ├── lang-it.json
│ ├── lang-ko.json
│ ├── lang-lv.json
│ ├── lang-nl.json
│ ├── lang-ro.json
│ ├── lang-ru.json
│ └── lang-zh_Hans.json
├── WinMute/
│ ├── AboutDlg.cpp
│ ├── BluetoothDetector.cpp
│ ├── BluetoothDetector.h
│ ├── LogDialog.cpp
│ ├── MMNotificationClient.cpp
│ ├── MMNotificationClient.h
│ ├── MuteControl.cpp
│ ├── MuteControl.h
│ ├── QuietHoursTimer.cpp
│ ├── QuietHoursTimer.h
│ ├── SettingsDlg.cpp
│ ├── Settings_BluetoothDlg.cpp
│ ├── Settings_GeneralDlg.cpp
│ ├── Settings_ManageEndpointsDlg.cpp
│ ├── Settings_MuteDlg.cpp
│ ├── Settings_QuietHoursDlg.cpp
│ ├── Settings_WifiDlg.cpp
│ ├── TrayIcon.cpp
│ ├── TrayIcon.h
│ ├── UpdateChecker.cpp
│ ├── UpdateChecker.h
│ ├── Utility.cpp
│ ├── Utility.h
│ ├── VersionHelper.h
│ ├── VistaAudio.cpp
│ ├── VistaAudioSessionEvents.cpp
│ ├── VistaAudioSessionEvents.h
│ ├── WMLog.cpp
│ ├── WMLog.h
│ ├── WMSettings.cpp
│ ├── WMSettings.h
│ ├── WMi18n.cpp
│ ├── WMi18n.h
│ ├── WiFiDetector.h
│ ├── WifiDetector.cpp
│ ├── WinAudio.h
│ ├── WinMain.cpp
│ ├── WinMute.cpp
│ ├── WinMute.h
│ ├── WinMute.rc
│ ├── WinMute.vcxproj
│ ├── WinMute.vcxproj.filters
│ ├── WinMute.vcxproj.user
│ ├── common.cpp
│ ├── common.h
│ ├── libs/
│ │ └── json.hpp
│ └── resource.h
├── WinMute.props
├── WinMute.slnx
├── cppcgl-nativerecommended.ruleset
└── winmute.cppcheck
================================================
FILE CONTENTS
================================================
================================================
FILE: .editorconfig
================================================
[*.{c,c++,cc,cpp,cxx,h,h++,hh,hpp,hxx,inl,ipp,tlh,tli}]
vc_generate_documentation_comments = doxygen_triple_slash
end_of_line = lf
insert_final_newline = true
charset = utf-8
indent_style = space
indent_size = 3
insert_final_newline = true
trim_trailing_whitespace = true
================================================
FILE: .gitattributes
================================================
# Set the default behavior, in case people don't have core.autolf set.
* text=auto eol=lf
# *.gitignore text eol=lf
# *.gitattributes text eol=lf
# *.c text eol=lf
# *.h text eol=lf
# *.cpp text eol=lf
# *.hpp text eol=lf
# *.mk text eol=lf
# *.xml text eol=lf
# *.json text eol=lf
# *.html text eol=lf
# *.css text eol=lf
# *.txt text eol=lf
# Declare files that will always have CRLF line endings on checkout.
*.sln text eol=crlf
*.vcxproj text eol=crlf
*.vcxproj.filters text eol=crlf
*.vcxproj.users text eol=crlf
*.rc text eol=lf
*.props eol=crlf
resource.h text eol=crlf
# Denote all files that are truly binary and should not be modified.
*.png binary
*.jpg binary
*.ico binary
*.docx binary
*.pdf binary
================================================
FILE: .github/FUNDING.yml
================================================
github: lx-s
custom: ["https://paypal.me/AlexSteinhoefer"]
================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.md
================================================
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: ''
assignees: ''
---
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Desktop (please complete the following information):**
- OS: [e.g. iOS]
- Version [e.g. 22]
**Additional context**
Add any other context about the problem here.
================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.md
================================================
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: ''
assignees: ''
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.
================================================
FILE: .gitignore
================================================
# Compilation temporaries and binaries
Release/
Debug/
*.ipdb
*.iobj
*.ipdb
*.aps
*.opensdf
*.sdf
*.suo
*.exp
*.pdb
*.lib
*.ods#
*.dll
*.exe
*.nupkg
# Visual Studio temporaries
ipch/
*.VC.opendb
*.VC.db
*.lastcodeanalysissucceeded
.vs/
Bin/
# Cpp Check
winmute-cppcheck-build-dir/
================================================
FILE: CONTRIBUTING.md
================================================
# How To Contribute
## New Features
If you have the next great idea for this little tool, you are welcome to open an
issues with your idea. This is how WiFi- and Bluetooth-based muting came to life 🙂
If your idea is too big for the scope of this tool or I don't have the time to
implement it, I'll let you know and you are free to provide a PR with the code,
if you have the time to provide the code yourself.
## Bug fixes
You're welcome at any time to provide pull requests with fixes for bugs you discovered.
Try to keep it in the current coding style as much as possible. Apart from that I won't
dictate any strict rules.
## Art
Since my artistic competence is hovering right around the skill level of "programmer art",
a new program icon suitable for Windows' light and dark theme (or GitHubs README) would be greatly appreciated 🙂
## Translations
You are invited to provide translations for the app. But there are some rules.
1. Please only translate if you are fluid with the language you provide the translation and also if you are familiar with the nomenclature of the Android system. If in doubt about a specific string, check out other Apps of big companies, like WhatsApp, Facebook, Google, etc., and see how they did it.
2. Only contribute, if you are committed to translate the majority of strings. No one wants an app, which is a mix of English and the native language. I might remove translations again, if they won't receive updates on new string resources.
[](https://translate.codeberg.org/engage/winmute/)
Translations can be provided via [Weblate](https://translate.codeberg.org/engage/winmute/).
================================================
FILE: CURRENT_VERSION
================================================
{
"version": 1,
"stable": {
"version": "2.5.4.0",
"downloadUrl": "https://github.com/lx-s/WinMute/releases/tag/2.5.4.0"
},
"beta": {
"version": "2.4.9.0",
"downloadUrl": "https://github.com/lx-s/WinMute/releases/tag/2.4.9.0"
}
}
================================================
FILE: Dist/InnoSetup/translations/info-before.de.txt
================================================
WinMute benötigt eine installierte Microsoft Visual C++ Laufzeitumgebung.
Diese kann hier unter den folgenden Links heruntergeladen werden:
* https://docs.microsoft.com/cpp/windows/latest-supported-vc-redist
* https://aka.ms/vs/17/release/vc_redist.x64.exe
================================================
FILE: Dist/InnoSetup/translations/info-before.en.txt
================================================
Please make sure that the latest Microsoft Visual C++ runtime is installed on your system.
To run WinMute only the x64 runtime files are needed.
You can download it here:
* https://docs.microsoft.com/cpp/windows/latest-supported-vc-redist
* https://aka.ms/vs/17/release/vc_redist.x64.exe
================================================
FILE: Dist/InnoSetup/translations/info-before.es.txt
================================================
Por favor, asegúrese de que la última versión de Microsoft Visual C++ está instalada en su sistema.
Para ejecutar WinMute sólo se necesitan los archivos de ejecución x64.
Puedes descargarlo aquí:
* https://docs.microsoft.com/cpp/windows/latest-supported-vc-redist
* https://aka.ms/vs/17/release/vc_redist.x64.exe
================================================
FILE: Dist/InnoSetup/translations/info-before.fr.txt
================================================
Assurez-vous que la dernière version du runtime Microsoft Visual C++ est installée sur votre système.
Pour exécuter WinMute, seuls les fichiers d'exécution x64 sont nécessaires.
Vous pouvez le télécharger ici :
* https://docs.microsoft.com/cpp/windows/latest-supported-vc-redist
* https://aka.ms/vs/17/release/vc_redist.x64.exe
================================================
FILE: Dist/InnoSetup/translations/info-before.it.txt
================================================
Assicurati che nel sistema sia installata lasione più recente di Microsoft Visual C++.
Per eseguire WinMute sono necessari solo i file runtime x64.
Puoi scaricarlo qui:
* https://docs.microsoft.com/cpp/windows/latest-supported-vc-redist
* https://aka.ms/vs/17/release/vc_redist.x64.exe
================================================
FILE: Dist/InnoSetup/translations/info-before.ko.txt
================================================
시스템에 최신 Microsoft Visual C++ 런타임이 설치되어 있는지 확인해 주세요.
WinMute를 실행하기 위해서는 x64 런타임 파일만 필요합니다.
여기에서 다운로드할 수 있습니다:
* https://docs.microsoft.com/cpp/windows/latest-supported-vc-redist
* https://aka.ms/vs/17/release/vc_redist.x64.exe
================================================
FILE: Dist/InnoSetup/translations/info-before.lv.txt
================================================
Lūdzu, pārliecinieties, ka jūsu sistēmā ir uzstādīta jaunākā Microsoft Visual C++ x64 izpilde.
Jūs variet to lejupielādēt šeit:
* https://docs.microsoft.com/cpp/windows/latest-supported-vc-redist
* https://aka.ms/vs/17/release/vc_redist.x64.exe
================================================
FILE: Dist/InnoSetup/translations/info-before.nl.txt
================================================
WinMute vereist een geïnstalleerde Microsoft Visual C++-runtimeomgeving.
Deze kan hier via de volgende links worden gedownload:
* https://docs.microsoft.com/cpp/windows/latest-supported-vc-redist
* https://aka.ms/vs/17/release/vc_redist.x64.exe
================================================
FILE: Dist/InnoSetup/translations/info-before.ro.txt
================================================
Vă rugăm să vă asigurați că cel mai recent Microsoft Visual C++ runtime este instalat pe sistemul dvs.
Pentru a rula WinMute sunt necesare doar fișierele x64 runtime.
Îl poți descărca de aici:
* https://docs.microsoft.com/cpp/windows/latest-supported-vc-redist
* https://aka.ms/vs/17/release/vc_redist.x64.exe
================================================
FILE: Dist/InnoSetup/translations/info-before.ru.txt
================================================
WinMute требует установленной среды выполнения Microsoft Visual C++.
Ее можно скачать по следующим ссылкам:
* https://docs.microsoft.com/cpp/windows/latest-supported-vc-redist
* https://aka.ms/vs/17/release/vc_redist.x64.exe
================================================
FILE: Dist/InnoSetup/translations/info-before.zh_Hans.txt
================================================
请确保您的系统上安装了最新的Microsoft Visual C++。
运行WinMute,需要x64支持。
您可以在此处下载:
* https://docs.microsoft.com/cpp/windows/latest-supported-vc-redist
* https://aka.ms/vs/17/release/vc_redist.x64.exe
================================================
FILE: Dist/InnoSetup/winmute-setup-languages.iss
================================================
[CustomMessages]
de.StartpAppLogon=WinMute mit Windows starten
en.StartpAppLogon=Start WinMute when you log on
es.StartpAppLogon=Inicie WinMute cuando inicie sesión
fr.StartpAppLogon=Démarrez WinMute lorsque vous vous connectez
it.StartpAppLogon=Esegui WinMute all'accesso
ko.StartpAppLogon=로그온 시 WinMute 시작
lv.StartpAppLogon=Start WinMute when you log on
nl.StartpAppLogon=WinMute starten wanneer deze gebruiker aanmeldt
ch_s.StartpAppLogon=开机启动WinMute
ru.StartpAppLogon=Запускать WinMute при входе этого пользователя в систему
de.CheckForUpdates=Automatisch nach Updates suchen
en.CheckForUpdates=Automatically check for updates
es.CheckForUpdates=Comprueba automáticamente si hay actualizaciones.
fr.CheckForUpdates=Vérifier automatiquement les mises à jour
it.CheckForUpdates=Verifica automaticamente la disponibilità di aggiornamenti.
ko.CheckForUpdates=업데이트를 자동으로 확인합니다
lv.CheckForUpdates=Automatically check for updates
nl.CheckForUpdates=Nieuwe updates zoeken bij opstarten
ru.CheckForUpdates=Проверять наличие новых обновлений при запуске
ch_s.CheckForUpdates=启动时检查新更新
[Languages]
Name: "de"; MessagesFile: "compiler:Languages\German.isl"; InfoBeforeFile: "translations/info-before.de.txt";
Name: "en"; MessagesFile: "compiler:Default.isl"; InfoBeforeFile: "translations/info-before.en.txt";
Name: "es"; MessagesFile: "compiler:Languages\Spanish.isl"; InfoBeforeFile: "translations/info-before.es.txt";
Name: "fr"; MessagesFile: "compiler:Languages\French.isl"; InfoBeforeFile: "translations/info-before.fr.txt";
Name: "it"; MessagesFile: "compiler:Languages\Italian.isl"; InfoBeforeFile: "translations/info-before.it.txt";
Name: "ko"; MessagesFile: "compiler:Languages\Korean.isl"; InfoBeforeFile: "translations/info-before.ko.txt";
Name: "lv"; MessagesFile: "compiler:Languages\Latvian.isl"; InfoBeforeFile: "translations/info-before.lv.txt";
Name: "nl"; MessagesFile: "compiler:Languages\dutch.isl"; InfoBeforeFile: "translations/info-before.nl.txt";
Name: "ru"; MessagesFile: "compiler:Languages\Russian.isl"; InfoBeforeFile: "translations/info-before.ru.txt";
Name: "ch_s"; MessagesFile: "compiler:Languages\ChineseSimplified.isl"; InfoBeforeFile: "translations/info-before.zh_Hans.txt";
================================================
FILE: Dist/InnoSetup/winmute-setup.iss
================================================
#include ".\winmute-setup-languages.iss"
#define MyAppName "WinMute"
#define MyAppExeName "..\bin\" + MyAppName + ".exe"
#define MyAppVersion GetVersionNumbersString(MyAppExeName)
#define MyAppPublisher "LX-Systems"
#define MyAppURL "https://www.lx-s.de/winmute"
#define MyAppExeName "WinMute.exe"
#define MyAppMutex "LxSystemsWinMuteRunning"
#define CurrentYear GetDateTimeString('yyyy','','')
[Setup]
AppId={{D2E8F9EF-11E7-418B-B9B7-A35A69A30490}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
AppVerName={#MyAppName} {#MyAppVersion}
AppCopyright=(c) {#CurrentYear} {#MyAppPublisher}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
VersionInfoDescription={#MyAppName} installer
VersionInfoProductName={#MyAppName}
VersionInfoVersion={#MyAppVersion}
UninstallDisplayName={#MyAppName}
UninstallDisplayIcon={app}\{#MyAppExeName}
WizardStyle=modern
ShowLanguageDialog=yes
UsePreviousLanguage=no
LanguageDetectionMethod=uilanguage
DefaultDirName={autopf}\{#MyAppPublisher}\{#MyAppName}
DisableProgramGroupPage=yes
LicenseFile=..\bin\license.rtf
AppMutex={#MyAppMutex}
SetupMutex={#MyAppMutex}Setup
PrivilegesRequiredOverridesAllowed=dialog
PrivilegesRequired=lowest
OutputDir=..\bin\
OutputBaseFilename=WinMuteSetup
SetupIconFile=..\..\WinMute\icons\app.ico
ArchitecturesInstallIn64BitMode=x64os
Compression=lzma
SolidCompression=yes
[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
Name: "autostart" ; Description: "{cm:StartpAppLogon}" ; GroupDescription: "Autostart"; Flags: unchecked
Name: "updates"; Description: "{cm:CheckForUpdates}"; GroupDescription: "Updates"; Flags: unchecked
[Files]
Source: "..\bin\{#MyAppExeName}"; DestDir: "{app}"; Flags: ignoreversion
Source: "..\bin\changelog.txt"; DestDir: "{app}"; Flags: ignoreversion
Source: "..\bin\license.txt"; DestDir: "{app}"; Flags: ignoreversion
Source: "..\bin\lang\lang-de.json"; DestDir: "{app}\lang"; Flags: ignoreversion
Source: "..\bin\lang\lang-en.json"; DestDir: "{app}\lang"; Flags: ignoreversion
Source: "..\bin\lang\lang-es.json"; DestDir: "{app}\lang"; Flags: ignoreversion
Source: "..\bin\lang\lang-fr.json"; DestDir: "{app}\lang"; Flags: ignoreversion
Source: "..\bin\lang\lang-it.json"; DestDir: "{app}\lang"; Flags: ignoreversion
Source: "..\bin\lang\lang-ko.json"; DestDir: "{app}\lang"; Flags: ignoreversion
Source: "..\bin\lang\lang-lv.json"; DestDir: "{app}\lang"; Flags: ignoreversion
Source: "..\bin\lang\lang-nl.json"; DestDir: "{app}\lang"; Flags: ignoreversion
Source: "..\bin\lang\lang-ro.json"; DestDir: "{app}\lang"; Flags: ignoreversion
Source: "..\bin\lang\lang-ru.json"; DestDir: "{app}\lang"; Flags: ignoreversion
Source: "..\bin\lang\lang-zh_Hans.json"; DestDir: "{app}\lang"; Flags: ignoreversion
[Icons]
Name: "{autoprograms}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{autodesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon
[Registry]
Root: HKCU; Subkey: "Software\lx-systems"; Flags: uninsdeletekeyifempty
Root: HKCU; Subkey: "Software\lx-systems\WinMute"; Flags: uninsdeletekey
Root: HKCU; Subkey: "Software\lx-systems\WinMute"; ValueType: string; ValueName: "InstallPath"; ValueData: "{app}"
Root: HKCU; Subkey: "Software\lx-systems\WinMute"; ValueType: dword; ValueName: "CheckForUpdate"; ValueData: "1"; Tasks: updates;
Root: HKCU; Subkey: "Software\lx-systems\WinMute\BluetoothDevices"; Flags: uninsdeletekey
Root: HKCU; Subkey: "Software\lx-systems\WinMute\WifiNetworks"; Flags: uninsdeletekey
Root: HKCU; Subkey: "Software\lx-systems\WinMute\ManagedAudioEndpoints"; Flags: uninsdeletekey
Root: HKCU; Subkey: "Software\Microsoft\Windows\CurrentVersion\Run"; ValueType: string; ValueName: "LX-Systems WinMute"; ValueData: "{app}\{#MyAppExeName}"; Tasks: autostart; Flags: uninsdeletevalue
[Run]
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent runasoriginaluser
================================================
FILE: Dist/bin/changelog.txt
================================================
Version 2.5.4 (2025-11-12)
* Fixed: "Save" Button not enabling, when adding a new WiFi SSID
Version 2.5.3 (2025-10-24)
* Added new language: Korean (thanks to https://translate.codeberg.org/user/jseo/)
* Added new language: Latvian (thanks to https://github.com/Coool)
* Added new language: Russian (thanks to https://translate.codeberg.org/user/yurtpage/)
* Added new logging Dialog, so the protocol can be viewed easily without having to store it to disk
Version 2.5.2 (2025-02-17)
* Added new language: French (thanks to https://translate.codeberg.org/user/avalondrey/)
* Fixed dialog when adding new devices to mute list (#38)
* Fixed uninstall icon in add/remove programs control panel
Version 2.5.1 (2024-05-03)
* Added new language: Simplified Chinese (thanks to https://translate.codeberg.org/user/richzhl/)
* Updated translations (thanks to all contributors!)
Version 2.5.0.1 (2024-02-26)
* Fixed update-check file for chocolatey package manager
Version 2.5.0 (2024-02-06)
* WinMute now supports multiple languages!
If your language is missing, and you want to contribute, please check
the WinMute GitHub project.
Thanks goes out for @bovirus for suggesting this feature, helping out with
the italian language version and providing help and feedback throughout
the implementation.
* The following languages are available
- German
- English
- Spanish
- Italian
- Dutch (partially)
* Optional update notification (disabled for installations via package manager)
* Some small bugfixes
Version 2.4.9-Pre (2023-12-19)
* Pre-Release for 2.5.0
Version 2.4.1 (2023-09-29)
* Fixes crash on signout and shutdown
Version 2.4.0 (2023-09-22)
* Added the option to delay muting by a configurable amount of seconds.
Version 2.3.1 (2023-07-27)
* Fixed annoying error message when the Windows registry key "SystemUsesLightTheme" is not present.
Version 2.3.0 (2023-04-25)
* Added function to only mute specific endpoints
* As is good tradition, also added a switch to NOT mute specific endpoints
* Fixed a problem that WinMute never unmutes, when the PC bootet during quiet hours.
* Fixed bluetooth muting description
* Changed SetCoalescableTimer to SetTimer, so WinMute can run under Windows 7.
Please note that Windows 7 is nevertheless not supported any more.
Version 2.2.0 (2022-11-28)
* Removed screensaver detection as it caused problems with
anti-cheat software of current games (e.g. Overwatch 2, Darktide).
Version 2.1.2 (2022-08-25)
* Changed bluetooth detection logic, so that muting
the workstation doesn't happen, when scanning for new
devices.
* Fixed crash when connectiong via remote desktop
* Show log-file path in settings UI
* Enhanced logging
Version 2.1.1 (2022-08-03)
* Improved UI when WLAN or Bluetooth is not available
* Added a 5 second delay before unmuting the workstation,
when a bluetooth device reconnects. This should prevent
music blasting out of your pc, when the device is connected,
but the audio endpoint has not been changed yet.
* Integrated Bluetooth muting into overall mute logic, so that
the workstation is not unmuted, when it is locked but an audio
Bluetooth device reconnects.
Version 2.1.0 (2022-08-02)
* Added new feature to mute workstation when an bluetooth audio device
disconnects (and re-enable audio if it reconnects)
* Fixed saving of SSID-lists
* Fixed some spelling errors
Version 2.0.0 (2022-05-01)
* WinMute now mutes all audio endpoints and not just the default endpoint.
It also stores all endpoint states and restores them if the appropriate
option is set.
* Reworked mute detection logic. This should fix timing errors, e.g. when
screensaver with screenlock is active.
* WinMute can now mute your computer when it is connected (alternatively
when it is _not_ connected) to a particular wireless network.
* Added detection for display standby
* Added detection for RDP sessions
* Added autostart option (no more fiddling with the Startup-folder)
* Added Hi-DPI awareness
* Added tray icon for bright system theme
* UI Rework (New settings and about dialogue)
* Various fixes and improvements
* Updated project to VS 2022
Version 1.6.0 (2020-12-18)
* Added "Quiet Hours": A time frame where WinMute automatically
mutes and afterwards unmutes your workstation.
* Added proxy process to recognize screensaver startup when
the current foreground application is a 32-bit application
* Removed 32-bit build.
Version 1.5.0 (2020-06-29)
* Added support for mute on suspend, shutdown and logout
Automatic audio-restore is disabled for these events.
Version 1.4.6 (2020-04-24)
* Compiled with spectre migitations... just 'cause
* Added "Support"-Link to About dialog
* Small menu redesign.
Version 1.4.5 (2019-09-04)
* Fixed crash when all audio endpoints are removed while the program is running
(might happen, when connecting to your PC via RDP).
* Upgraded compiler toolset to VS2019
Version 1.4.4 (2017-08-14)
* New, simpler icon
* System notification area icon is now white, to fit better with
with windows' default icons
* Upgraded compiler toolset to VS2017
Version 1.4.3 (2016-08-11)
* Maintenance release, no new features
* Upgraded to new compiler toolset
* Removed Windows XP as I can also no longer test it and as Visual Studio 2015
no longer supports this platform.
* Use more modern UI elements
Version 1.4.1/1.4.2 (2014-07-17)
* Fixed screensaver muting: It sometimes happened that WinMute
muted Windows Audio for no apparent reason and "forgot" to
unmute. This is now fixed.
Version 1.4 (2014-07-10)
* WinMute can now also mute if the screensaver starts
Due to windows restrictions, unmuting the audio can take up to one second
after the screensaver resumes.
* Added a toggle switch to configure if WinMute should unmute at all after
a workstation lock or a screensaver run
Version 1.3 (2012-02-23)
* Right-click menu is now correctly dismissed if the user clicks somewhere
outside of the menu.
* Embedded Visual C++ 2010 DLLs. This increases file size by about 100kb, but
enables the usage of this tool in workplaces that do not have deployed the
Visual C++ 2010 Runtime Environment yet.
* Vista/7/8: Correctly mute the new device, if the default audio endpoint
changes.
* XP: Greatly improved hardware detection code. WinMute now mutes all devices,
instead of just setting the volume of the first device it finds to zero.
If the Mute-Button is locked via Group Policies, WinMute will try to
use the Volume Slider to "emulate" sound muting.
* XP: Actively tries to prevent other programs from unmuting the system.
Version 1.2 (2011-05-30)
* Fixed a bug where WinMute could malfunction if the audio
device was changed or disconnected during a windows session.
Version 0.0 - 1.1
* These documents have been lost forever...
================================================
FILE: Dist/bin/license.rtf
================================================
{\rtf1\ansi\deff3\adeflang1025
{\fonttbl{\f0\froman\fprq2\fcharset0 Times New Roman;}{\f1\froman\fprq2\fcharset2 Symbol;}{\f2\fswiss\fprq2\fcharset0 Arial;}{\f3\froman\fprq2\fcharset0 Liberation Serif{\*\falt Times New Roman};}{\f4\fswiss\fprq2\fcharset0 Liberation Sans{\*\falt Arial};}{\f5\fnil\fprq2\fcharset0 Calibri;}{\f6\fnil\fprq2\fcharset0 Arial;}{\f7\fnil\fprq2\fcharset0 Symbol;}{\f8\fnil\fprq2\fcharset0 Microsoft YaHei;}{\f9\fnil\fprq2\fcharset0 Lucida Sans;}{\f10\fswiss\fprq0\fcharset128 Lucida Sans;}}
{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}
{\stylesheet{\s0\snext0\rtlch\af9\afs24\alang1081 \ltrch\lang1031\langfe2052\hich\af3\loch\nowidctlpar\hyphpar0\ltrpar\cf0\f3\fs24\lang1031\kerning1\dbch\af11\langfe2052 Normal;}
{\*\cs15\snext15\hich\af7\loch\f7 ListLabel 1;}
{\s16\sbasedon0\snext17\rtlch\af9\afs28 \ltrch\hich\af4\loch\sb240\sa120\keepn\f4\fs28\dbch\af8 \u220\'dcberschrift;}
{\s17\sbasedon0\snext17\loch\sl276\slmult1\sb0\sa140 Body Text;}
{\s18\sbasedon17\snext18\rtlch\af10 \ltrch\loch\sl276\slmult1\sb0\sa140 List;}
{\s19\sbasedon0\snext19\rtlch\af10\afs24\ai \ltrch\loch\sb120\sa120\noline\fs24\i caption;}
{\s20\sbasedon0\snext20\rtlch\af10 \ltrch\loch\noline Verzeichnis;}
}{\*\listtable{\list\listtemplateid1
{\listlevel\levelnfc23\leveljc0\levelstartat0\levelfollow0{\leveltext \'01\u183 ?;}{\levelnumbers;}\f1\fi0\li0}
{\listlevel\levelnfc0\leveljc0\levelstartat1\levelfollow0{\leveltext \'02\'01.;}{\levelnumbers\'01;}\fi-360\li1080}
{\listlevel\levelnfc0\leveljc0\levelstartat1\levelfollow0{\leveltext \'02\'02.;}{\levelnumbers\'01;}\fi-360\li1440}
{\listlevel\levelnfc0\leveljc0\levelstartat1\levelfollow0{\leveltext \'02\'03.;}{\levelnumbers\'01;}\fi-360\li1800}
{\listlevel\levelnfc0\leveljc0\levelstartat1\levelfollow0{\leveltext \'02\'04.;}{\levelnumbers\'01;}\fi-360\li2160}
{\listlevel\levelnfc0\leveljc0\levelstartat1\levelfollow0{\leveltext \'02\'05.;}{\levelnumbers\'01;}\fi-360\li2520}
{\listlevel\levelnfc0\leveljc0\levelstartat1\levelfollow0{\leveltext \'02\'06.;}{\levelnumbers\'01;}\fi-360\li2880}
{\listlevel\levelnfc0\leveljc0\levelstartat1\levelfollow0{\leveltext \'02\'07.;}{\levelnumbers\'01;}\fi-360\li3240}
{\listlevel\levelnfc0\leveljc0\levelstartat1\levelfollow0{\leveltext \'02\'08.;}{\levelnumbers\'01;}\fi-360\li3600}\listid1}
{\list\listtemplateid2
{\listlevel\levelnfc255\leveljc0\levelstartat1\levelfollow2{\leveltext \'00;}{\levelnumbers;}\fi0\li0}
{\listlevel\levelnfc255\leveljc0\levelstartat1\levelfollow2{\leveltext \'00;}{\levelnumbers;}\fi0\li0}
{\listlevel\levelnfc255\leveljc0\levelstartat1\levelfollow2{\leveltext \'00;}{\levelnumbers;}\fi0\li0}
{\listlevel\levelnfc255\leveljc0\levelstartat1\levelfollow2{\leveltext \'00;}{\levelnumbers;}\fi0\li0}
{\listlevel\levelnfc255\leveljc0\levelstartat1\levelfollow2{\leveltext \'00;}{\levelnumbers;}\fi0\li0}
{\listlevel\levelnfc255\leveljc0\levelstartat1\levelfollow2{\leveltext \'00;}{\levelnumbers;}\fi0\li0}
{\listlevel\levelnfc255\leveljc0\levelstartat1\levelfollow2{\leveltext \'00;}{\levelnumbers;}\fi0\li0}
{\listlevel\levelnfc255\leveljc0\levelstartat1\levelfollow2{\leveltext \'00;}{\levelnumbers;}\fi0\li0}
{\listlevel\levelnfc255\leveljc0\levelstartat1\levelfollow2{\leveltext \'00;}{\levelnumbers;}\fi0\li0}\listid2}
}{\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}{\listoverride\listid2\listoverridecount0\ls2}}{\*\generator LibreOffice/24.8.4.2$Windows_X86_64 LibreOffice_project/bb3cfa12c7b1bf994ecc5649a80400d06cd71002}{\info{\creatim\yr0\mo0\dy0\hr0\min0}{\revtim\yr2025\mo2\dy17\hr17\min32}{\printim\yr0\mo0\dy0\hr0\min0}}{\*\userprops}\deftab708
\hyphauto1\viewscale100\formshade\paperh15840\paperw12240\margl1440\margr1440\margt1440\margb1440\sectd\sbknone\sftnnar\saftnnrlc\sectunlocked1\pgwsxn12240\pghsxn15840\marglsxn1440\margrsxn1440\margtsxn1440\margbsxn1440\ftnbj\ftnstart1\ftnrstcont\ftnnar\fet\aftnrstcont\aftnstart1\aftnnrlc
{\*\ftnsep\chftnsep}\pgndec\pard\plain \s0\rtlch\af9\afs24\alang1081 \ltrch\lang1031\langfe2052\hich\af3\loch\nowidctlpar\hyphpar0\ltrpar\cf0\f3\fs24\lang1031\kerning1\dbch\af11\langfe2052\sl276\slmult1\ql\widctlpar\sb0\sa200\ltrpar{\hich\af6\loch\fs22\lang1031\b\f6\loch
Copyright (C) 2011-202}{\hich\af6\loch\fs22\lang1031\b\f6\loch
5}{\hich\af6\loch\fs22\lang1031\b\f6\loch
, Alexander Steinh\u246\'f6fer\line }{\hich\af6\loch\fs22\lang1031\b0\f6\loch
All rights reserved.}
\par \pard\plain \s0\rtlch\af9\afs24\alang1081 \ltrch\lang1031\langfe2052\hich\af3\loch\nowidctlpar\hyphpar0\ltrpar\cf0\f3\fs24\lang1031\kerning1\dbch\af11\langfe2052\sl276\slmult1\ql\widctlpar\sb0\sa200\ltrpar{\hich\af6\loch\fs22\lang1031\b0\f6\loch
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:}
\par \pard\plain \s0\rtlch\af9\afs24\alang1081 \ltrch\lang1031\langfe2052\hich\af3\loch\nowidctlpar\hyphpar0\ltrpar\cf0\f3\fs24\lang1031\kerning1\dbch\af11\langfe2052{\listtext\pard\plain \hich\af7\loch\f7 \u183\'b7\tab}\ilvl0\ls1 \fi0\li720\lin720\sl276\slmult1\ql\widctlpar\fi-360\li720\lin720\sb0\sa200\ltrpar{\hich\af6\loch\fs22\lang1031\b0\f6\loch
Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.}
\par \pard\plain \s0\rtlch\af9\afs24\alang1081 \ltrch\lang1031\langfe2052\hich\af3\loch\nowidctlpar\hyphpar0\ltrpar\cf0\f3\fs24\lang1031\kerning1\dbch\af11\langfe2052{\listtext\pard\plain \hich\af7\loch\f7 \u183\'b7\tab}\ilvl0\ls1 \fi0\li720\lin720\sl276\slmult1\ql\widctlpar\fi-360\li720\lin720\sb0\sa200\ltrpar{\hich\af6\loch\fs22\lang1031\b0\f6\loch
Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.}
\par \pard\plain \s0\rtlch\af9\afs24\alang1081 \ltrch\lang1031\langfe2052\hich\af3\loch\nowidctlpar\hyphpar0\ltrpar\cf0\f3\fs24\lang1031\kerning1\dbch\af11\langfe2052{\listtext\pard\plain \hich\af7\loch\f7 \u183\'b7\tab}\ilvl0\ls1 \fi0\li720\lin720\sl276\slmult1\ql\widctlpar\fi-360\li720\lin720\sb0\sa200\ltrpar{\hich\af6\loch\fs22\lang1031\b0\f6\loch
Neither the name of the \{organization\} nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.}
\par \pard\plain \s0\rtlch\af9\afs24\alang1081 \ltrch\lang1031\langfe2052\hich\af3\loch\nowidctlpar\hyphpar0\ltrpar\cf0\f3\fs24\lang1031\kerning1\dbch\af11\langfe2052\sl276\slmult1\ql\widctlpar\sb0\sa200\ltrpar{\hich\af6\loch\fs22\lang1031\b0\f6\loch
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE AREDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.}
\par }
================================================
FILE: Dist/bin/license.txt
================================================
WinMute
Copyright (C) 2025 Alexander Steinhoefer
-----------------------------------------------------------------------------
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
* Neither the name of the author nor the names of its contributors may
be used to endorse or promote products derived from this software
without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE
================================================
FILE: Dist/bin/update-check.disabled
================================================
This file should be used, when WinMute is installed via a package manager.
If this file is present, WinMute does not display update-check options.
================================================
FILE: Dist/chocolatey/WinMute.nuspec
================================================
<?xml version="1.0" encoding="utf-8"?>
<!-- Do not remove this test for UTF-8: if “Ω” doesn’t appear as greek uppercase omega letter enclosed in quotation marks, you should use an editor that supports UTF-8, not this one. -->
<package xmlns="http://schemas.microsoft.com/packaging/2015/06/nuspec.xsd">
<metadata>
<id>winmute</id>
<version>2.5.4.0</version>
<title>WinMute</title>
<authors>Alexander Steinhöfer</authors>
<owners>Alexander Steinhöfer</owners>
<packageSourceUrl>https://github.com/lx-s/WinMute/releases</packageSourceUrl>
<bugTrackerUrl>https://github.com/lx-s/WinMute/issues</bugTrackerUrl>
<projectSourceUrl>https://github.com/lx-s/WinMute</projectSourceUrl>
<projectUrl>https://github.com/lx-s/WinMute/</projectUrl>
<iconUrl>https://cdn.statically.io/gh/lx-s/WinMute/main/WinMute/icons/app-512.png</iconUrl>
<tags>winmute windows utility audio</tags>
<summary>Automatic sound muter</summary>
<description>WinMute automatically mutes your PC volume if you lock your screen or the screensaver is running.</description>
<copyright>© 2024 Alexander Steinhöfer</copyright>
<releaseNotes>https://github.com/lx-s/WinMute/releases/tag/2.5.2.0</releaseNotes>
<licenseUrl>https://raw.githubusercontent.com/lx-s/WinMute/main/LICENSE</licenseUrl>
<dependencies>
<dependency id="vcredist140" version="14.3"/>
</dependencies>
</metadata>
<files>
<file src="tools\**" target="tools\" />
<file src="..\bin\WinMute.exe" target="bin\" />
<file src="..\bin\WinMute.exe.gui" target="bin\" />
<file src="..\bin\changelog.txt" target="bin\" />
<file src="..\bin\license.txt" target="bin\" />
<file src="..\bin\update-check.disabled" target="bin\" />
<file src="..\bin\lang\*.json" target="bin\lang\" />
</files>
</package>
================================================
FILE: Dist/chocolatey/howto.txt
================================================
choco pack
choco push <file> --source https://push.chocolatey.org/
Get API-Key from: https://push.chocolatey.org/account
choco apikey add -k <your key here> -s https://push.chocolatey.org/
================================================
FILE: Dist/chocolatey/tools/VERIFICATION.txt
================================================
VERIFICATION
Powershell> Get-ChildItem | Get-FileHash -Algorithm SHA256 | Format-List
----------------------------------------------------------------------------
Algorithm : SHA256
Hash : 9D7577D389808853947ECA83BA08D6D46A206859AD0ED28F95D38F6F8F4C850E
Path : changelog.txt
Algorithm : SHA256
Hash : 9CCE14785CE3BE2620072AB6460CF727A5684809781CC9A11A24301E0E87B574
Path : license.txt
Algorithm : SHA256
Hash : FC28DCBC89FD451D439FEE3171E4705E7EF3327DDE716E72A55F3B2299FC056F
Path : liesmich.html
Algorithm : SHA256
Hash : 6B0B9149FF44EC42499CDCEFD762270CCB913D4D3413A61441B00F53B1656B7C
Path : readme.html
Algorithm : SHA256
Hash : A4211BF558937DEFB0B9BF7820C8538A583B8CF48AD3A1FB7FAB585979F4093E
Path : ScreensaverNotify.dll
Algorithm : SHA256
Hash : D0BFB57B3371BB8164D65D10EC3E85B5939A8FD321CE42B875FE7D453B81DBFC
Path : ScreensaverNotify32.dll
Algorithm : SHA256
Hash : 130BF27A204A14E4923E619CDDA7900D02F21EBDB6D9B0FE57730942D8B1884D
Path : ScreensaverProxy32.exe
Algorithm : SHA256
Hash : BC020A4675F2A05F602329AAD93C7FCF95F2BFB178177E7C44536C08BDE1BBD2
Path : WinMute.exe
Algorithm : SHA256
Hash : E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855
Path : WinMute.exe.gui
================================================
FILE: Dist/chocolatey/tools/chocolateybeforemodify.ps1
================================================
Stop-Process -Name WinMute
================================================
FILE: Dist/chocolatey/tools/chocolateyinstall.ps1
================================================
================================================
FILE: Dist/chocolatey/tools/chocolateyuninstall.ps1
================================================
Stop-Process -Name WinMute
Remove-Item "HKCU:\SOFTWARE\lx-systems\WinMute"
Remove-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" -Name "LX-Systems WinMute"
================================================
FILE: Dist/winget/manifests/l/LX-Systems/WinMute/2.5.0.0/LX-Systems.WinMute.installer.yaml
================================================
# Created using wingetcreate 1.6.1.0
# yaml-language-server: $schema=https://aka.ms/winget-manifest.installer.1.6.0.schema.json
PackageIdentifier: LX-Systems.WinMute
PackageVersion: 2.5.0.0
InstallerType: inno
InstallerSwitches:
Custom: /SILENT /CURRENTUSER
ReleaseDate: 2024-02-06
Dependencies:
PackageDependencies:
- PackageIdentifier: Microsoft.VCRedist.2015+.x64
Installers:
- Architecture: x64
InstallerUrl: https://github.com/lx-s/WinMute/releases/download/2.5.0.0/WinMute-2.5.0-Setup.exe
InstallerSha256: 2159122473D4B5B5931098AC527272502FC137D3F34D1487318DE93C7211C34D
ManifestType: installer
ManifestVersion: 1.6.0
================================================
FILE: Dist/winget/manifests/l/LX-Systems/WinMute/2.5.0.0/LX-Systems.WinMute.locale.en-US.yaml
================================================
# Created using wingetcreate 1.6.1.0
# yaml-language-server: $schema=https://aka.ms/winget-manifest.defaultLocale.1.6.0.schema.json
PackageIdentifier: LX-Systems.WinMute
PackageVersion: 2.5.0.0
PackageLocale: en-US
Publisher: LX-Systems
PublisherUrl: https://www.lx-s.de
PublisherSupportUrl: https://github.com/lx-s/WinMute/issues
PackageName: WinMute
PackageUrl: https://github.com/lx-s/WinMute
License: BSD-3-CLAUSE
LicenseUrl: https://github.com/lx-s/WinMute/blob/main/LICENSE
ShortDescription: WinMute lets you automatically mute your PC volume on certain events.
ManifestType: defaultLocale
ManifestVersion: 1.6.0
ReleaseNotes: |-
- WinMute now supports multiple languages! The following languages are available: German, English, Spanish, Italian
- Optional update notification (disabled for installations via package manager)
- Some small bugfixes and UI improvements
ReleaseNotesUrl: https://github.com/lx-s/WinMute/releases/tag/2.5.0.0
================================================
FILE: Dist/winget/manifests/l/LX-Systems/WinMute/2.5.0.0/LX-Systems.WinMute.yaml
================================================
# Created using wingetcreate 1.6.1.0
# yaml-language-server: $schema=https://aka.ms/winget-manifest.version.1.6.0.schema.json
PackageIdentifier: LX-Systems.WinMute
PackageVersion: 2.5.0.0
DefaultLocale: en-US
ManifestType: version
ManifestVersion: 1.6.0
================================================
FILE: Dist/winget/manifests/l/LX-Systems/WinMute/2.5.1.0/LX-Systems.WinMute.installer.yaml
================================================
# Created using wingetcreate 1.6.1.0
# yaml-language-server: $schema=https://aka.ms/winget-manifest.installer.1.6.0.schema.json
PackageIdentifier: LX-Systems.WinMute
PackageVersion: 2.5.1.0
InstallerType: inno
InstallerSwitches:
Custom: /SILENT /CURRENTUSER
Dependencies:
PackageDependencies:
- PackageIdentifier: Microsoft.VCRedist.2015+.x64
Installers:
- Architecture: x64
InstallerUrl: https://github.com/lx-s/WinMute/releases/download/2.5.1.0/WinMute-2.5.1-Setup.exe
InstallerSha256: 0F4A31D3354022388F96500DCD35F490D44A73AABC3527A667EBEB57EF40E37F
ManifestType: installer
ManifestVersion: 1.6.0
================================================
FILE: Dist/winget/manifests/l/LX-Systems/WinMute/2.5.1.0/LX-Systems.WinMute.locale.en-US.yaml
================================================
# Created using wingetcreate 1.6.1.0
# yaml-language-server: $schema=https://aka.ms/winget-manifest.defaultLocale.1.6.0.schema.json
PackageIdentifier: LX-Systems.WinMute
PackageVersion: 2.5.1.0
PackageLocale: en-US
Publisher: LX-Systems
PublisherUrl: https://www.lx-s.de
PublisherSupportUrl: https://github.com/lx-s/WinMute/issues
PackageName: WinMute
PackageUrl: https://github.com/lx-s/WinMute
License: BSD-3-CLAUSE
LicenseUrl: https://github.com/lx-s/WinMute/blob/main/LICENSE
ShortDescription: WinMute lets you automatically mute your PC volume on certain events.
ManifestType: defaultLocale
ManifestVersion: 1.6.0
================================================
FILE: Dist/winget/manifests/l/LX-Systems/WinMute/2.5.1.0/LX-Systems.WinMute.yaml
================================================
# Created using wingetcreate 1.6.1.0
# yaml-language-server: $schema=https://aka.ms/winget-manifest.version.1.6.0.schema.json
PackageIdentifier: LX-Systems.WinMute
PackageVersion: 2.5.1.0
DefaultLocale: en-US
ManifestType: version
ManifestVersion: 1.6.0
================================================
FILE: Dist/winget/manifests/l/LX-Systems/WinMute/2.5.2.0/LX-Systems.WinMute.installer.yaml
================================================
# Created using wingetcreate 1.9.2.0
# yaml-language-server: $schema=https://aka.ms/winget-manifest.installer.1.9.0.schema.json
PackageIdentifier: LX-Systems.WinMute
PackageVersion: 2.5.2.0
InstallerType: inno
InstallerSwitches:
Custom: /SILENT /CURRENTUSER
Dependencies:
PackageDependencies:
- PackageIdentifier: Microsoft.VCRedist.2015+.x64
Installers:
- Architecture: x64
InstallerUrl: https://github.com/lx-s/WinMute/releases/download/2.5.2.0/WinMute-2.5.2-Setup.exe
InstallerSha256: 75446D98D267856FE888DC206130BEDAD992007A1311B65DE1389175CE087760
ManifestType: installer
ManifestVersion: 1.9.0
ReleaseDate: 2025-02-17
================================================
FILE: Dist/winget/manifests/l/LX-Systems/WinMute/2.5.2.0/LX-Systems.WinMute.locale.en-US.yaml
================================================
# Created using wingetcreate 1.9.2.0
# yaml-language-server: $schema=https://aka.ms/winget-manifest.defaultLocale.1.9.0.schema.json
PackageIdentifier: LX-Systems.WinMute
PackageVersion: 2.5.2.0
PackageLocale: en-US
Publisher: LX-Systems
PublisherUrl: https://www.lx-s.de
PublisherSupportUrl: https://github.com/lx-s/WinMute/issues
PackageName: WinMute
PackageUrl: https://github.com/lx-s/WinMute
License: BSD-3-CLAUSE
LicenseUrl: https://github.com/lx-s/WinMute/blob/main/LICENSE
ShortDescription: WinMute lets you automatically mute your PC volume on certain events.
Tags:
- lock
- pc-volume
- screensaver
- tools
- windows
ReleaseNotesUrl: https://github.com/lx-s/WinMute/releases/tag/2.5.2.0
ManifestType: defaultLocale
ManifestVersion: 1.9.0
================================================
FILE: Dist/winget/manifests/l/LX-Systems/WinMute/2.5.2.0/LX-Systems.WinMute.yaml
================================================
# Created using wingetcreate 1.9.2.0
# yaml-language-server: $schema=https://aka.ms/winget-manifest.version.1.9.0.schema.json
PackageIdentifier: LX-Systems.WinMute
PackageVersion: 2.5.2.0
DefaultLocale: en-US
ManifestType: version
ManifestVersion: 1.9.0
================================================
FILE: Dist/winget/manifests/l/LX-Systems/WinMute/2.5.3.0/LX-Systems.WinMute.installer.yaml
================================================
# Created using wingetcreate 1.10.3.0
# yaml-language-server: $schema=https://aka.ms/winget-manifest.installer.1.10.0.schema.json
PackageIdentifier: LX-Systems.WinMute
PackageVersion: 2.5.3.0
InstallerType: inno
InstallerSwitches:
Custom: /SILENT /CURRENTUSER
Dependencies:
PackageDependencies:
- PackageIdentifier: Microsoft.VCRedist.2015+.x64
Installers:
- Architecture: x64
InstallerUrl: https://github.com/lx-s/WinMute/releases/download/2.5.3.0/WinMute-2.5.3-Setup.exe
InstallerSha256: D0C36127902851CFFDF4089C28B12C1EC57F510B47D58EBA98E2EE8D27B92877
ManifestType: installer
ManifestVersion: 1.10.0
ReleaseDate: 2025-10-24
================================================
FILE: Dist/winget/manifests/l/LX-Systems/WinMute/2.5.3.0/LX-Systems.WinMute.locale.en-US.yaml
================================================
# Created using wingetcreate 1.10.3.0
# yaml-language-server: $schema=https://aka.ms/winget-manifest.defaultLocale.1.10.0.schema.json
PackageIdentifier: LX-Systems.WinMute
PackageVersion: 2.5.3.0
PackageLocale: en-US
Publisher: LX-Systems
PublisherUrl: https://www.lx-s.de
PublisherSupportUrl: https://github.com/lx-s/WinMute/issues
PackageName: WinMute
PackageUrl: https://github.com/lx-s/WinMute
License: BSD-3-CLAUSE
LicenseUrl: https://github.com/lx-s/WinMute/blob/main/LICENSE
ShortDescription: WinMute lets you automatically mute your PC volume on certain events.
Tags:
- lock
- pc-volume
- screensaver
- tools
- windows
ReleaseNotesUrl: https://github.com/lx-s/WinMute/releases/tag/2.5.3.0
ManifestType: defaultLocale
ManifestVersion: 1.10.0
================================================
FILE: Dist/winget/manifests/l/LX-Systems/WinMute/2.5.3.0/LX-Systems.WinMute.yaml
================================================
# Created using wingetcreate 1.10.3.0
# yaml-language-server: $schema=https://aka.ms/winget-manifest.version.1.10.0.schema.json
PackageIdentifier: LX-Systems.WinMute
PackageVersion: 2.5.3.0
DefaultLocale: en-US
ManifestType: version
ManifestVersion: 1.10.0
================================================
FILE: Dist/winget.txt
================================================
# Update
wingetcreate update --submit --urls "https://github.com/lx-s/WinMute/releases/download/<vers>/WinMute-<vers>-Setup.exe|x64" --version <vers> LX-Systems.WinMute
# Token
wingetcreate.exe token --store --token <GitHubPersonalAccessToken>
================================================
FILE: LICENSE
================================================
Copyright (C) 2025, Alexander Steinhoefer
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the {organization} nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
================================================
FILE: README.md
================================================
# WinMute
<!-- badges -->
<div align="right">
<a href="https://translate.codeberg.org/engage/winmute/">
<img src="https://translate.codeberg.org/widget/winmute/winmute/svg-badge.svg" alt="Translation status" />
</a>
</div>
<div align="center">
<img alt="WinMute's logo" title="WinMute" src="WinMute/icons/app.svg" style="height:128px; margin-bottom: 20px">
</div>
**WinMute** is a small and simple tool, that automatically mutes (and unmutes) your workstation
based on triggers, e.g. the screensaver starts, or your bluetooth headphone disconnects.
It was created to not repeatedly annoy my co-workers with random sounds or music from my
computer whenever I left the room and forgot to mute my computer.
## Features
* WinMute can automatically mute all sound devices on your workstation when:
* you lock your workstation.
* the display turns off.
* you log off or switch user.
* your workstation shuts down, goes into hibernate or goes to sleep.
* your bluetooth headset/headphones disconnect.
* your workstation is connected to a particular wireless network.
* alternatively: your Workstation is _not_ connected to particular wireless network
* WinMute is small and only needs a few kilobytes of disk space
* WinMute is ad-free, telemetry-free and generally does not send any data whatsoever
## Screenshots


## Languages
WinMute is currently available in the following languages:
[](https://translate.codeberg.org/engage/winmute/)
## Contributions
If you are fluent in another language, want to fix some bugs or pitch some new ideas,
please take a look at [CONTRIBUTING.md](CONTRIBUTING.md).
## Usage
### Requirements
* Windows 7 or any newer version of Windows.
* [Visual Studio 2015-2022 Redistributable](https://support.microsoft.com/help/2977003/the-latest-supported-visual-c-downloads)
### Installation
Either unzip it to your favourite directory or run the Setup.exe and you are all set up!
### Uninstalling WinMute
If you've installed it with the setup, uninstall it from the Windows programs control panel).
If you've installed it without the setup, just delete it.
If you want to also remove your personal WinMute settings, open the registry via `regedit.exe` and delete the Folder located in `HKEY_CURRENT_USER\Software\lx-systems\WinMute`.
### How to (un)mute
Just start it and you are good to go!
Whenever you lock your screen from now on or the screensaver starts, WinMute will automatically mute your windows volume, and unmute it right away when you come back to your pc.
If you want to change the behaviour or explore all the other options, right-click on the taskbar notification icon and explore!
================================================
FILE: Translations/lang-de.json
================================================
{
"meta.lang.name": "Deutsch (German)",
"meta.lang.mode": "ltr",
"init.error.settings.title": "Fehler beim Initialisieren",
"init.error.settings.text": "Kritischer Fehler beim Initialisieren von WinMute",
"init.error.already-running.title": "WinMute läuft bereits",
"init.error.already-running.text": "Bitte halten Sie ausschau nach einem weißen Lautsprechersymbol im Symbolbereich der Taskleiste.",
"init.error.winmute.title": "Fehler beim Starten von WinMute.",
"init.error.winmute.text": "Ein kritischer Fehler trat beim starten von WinMute auf. Das Programm muss beendet werden.",
"init.error.winmute.platform-support.title": "Nur Windows Vista and neuer werden unterstützt",
"init.error.winmute.platform-support.text": "Für Windows XP Unterstützung, kann WinMute in der Version 1.4.2 oder älter installiert werden.",
"general.error.winapi.text": "{} fehlgeschlagen mit Fehler {}: {}",
"general.error.audio-service-shutdown.title": "Der Audioservice wurde beendet.",
"general.error.audio-service-shutdown.text": "WinMute kann diese Situation nicht Beheben. Bitte starten Sie das Programm neu.",
"popup.remote-session-detected.title": "Remote Session festgestellt",
"popup.remote-session-detected.text": "Alle Audiogeräte wurden stumm geschaltet",
"popup.bluetooth-muting-disabled.title": "Bluetooth-Stummschalten deaktiviert",
"popup.bluetooth-muting-disabled.text": "Bluetooth ist nicht verfügbar oder deaktiviert.\nDas Bluetooth-abhängige Stummschalten wurde deaktiviert.",
"popup.wlan-muting-disabled.title": "WLAN-Stummschalten deaktiviert",
"popup.wlan-muting-disabled.text": "WLAN ist nicht verfügbar oder deaktiviert.\nDas WLAN-abhängige Stummschalten wurde deaktiviert.",
"popup.quiet-hours-started.title": "Die Ruhezeit hat begonnen",
"popup.quiet-hours-started.text": "Der Computer wird stumm geschaltet.",
"popup.quiet-hours-ended.title": "Ruhezeit vorbei",
"popup.quiet-hours-ended.text": "Audiopegel wurden wiederhergestellt.",
"popup.workstation-muted.title": "Computer stummgeschaltet",
"popup.wlan-not-on-mute-list.text": "WLAN-Netzwerk \"{}\" ist nicht auf der Erlaubt-Liste.",
"popup.wlan-is-on-mute-list.text": "WLAN-Netzwerknetwork \"{}\" wurde für das automatische Stummschalten konfiguriert.",
"popup.muting-workstation-after-delay.title": "Verzögertes Stummschalten des Computers",
"popup.muting-workstation-after-delay.text": "Alle Audiogeräte wurden stummgeschaltet",
"popup.volume-restored.title": "Lautstärke wiederhergestellt",
"popup.volume-restored.text": "Die Lautstärkepegel aller Audiogeräte wurden wiederhergestellt",
"popup.muting-workstation.title": "Stummschalten des Computers",
"popup.muting-workstation.text": "Alle Audiogeräte wurden stumm geschaltet",
"popup.error.quiet-hours-start.title": "Beginn der Ruhzeit",
"popup.error.quiet-hours-start.text": "Fehler beim Registrieren des Windows-Timers für den Ruhezeit-Beginn",
"popup.error.quiet-hours-stop.title": "Ende der Ruhezeit",
"popup.error.quiet-hours-stop.text": "Fehler beim Registrieren des Windows-Timers für das Ruhezeit-Ende",
"traymenu.info": "Info",
"traymenu.mute-when": "Stummschalten sobald...",
"traymenu.mute-on-lock": "... PC gesperrt wird",
"traymenu.mute-on-screen-suspend": "... der Bildschirm sich ausschaltet",
"traymenu.restore-volume": "Lautstärke wiederherstellen",
"traymenu.mute-no-restore": "Stummschalten ohne Wiederherstellung...",
"traymenu.mute-on-shutdown": "... Herunterfahren",
"traymenu.mute-on-sleep": "... Standby",
"traymenu.mute-on-logout": "... Ausloggen",
"traymenu.mute-all-devices": "Alle Geräte jetzt stummschalten",
"traymenu.settings": "Einstellungen...",
"traymenu.exit": "Beenden",
"settings.title": "Einstellungen",
"settings.btn-save": "Speichern",
"settings.btn-cancel": "Abbrechen",
"settings.btn-add": "Hinzufügen",
"settings.btn-edit": "Bearbeiten",
"settings.btn-remove": "Entfernen",
"settings.btn-remove-all": "Alle entfernen",
"settings.tab.general": "Allgemein",
"settings.tab.mute": "Stummschalten",
"settings.tab.quiet-hours": "Ruhezeit",
"settings.tab.bluetooth": "Bluetooth",
"settings.tab.wifi": "WLAN",
"settings.bluetooth.add-edit.add-title": "Bluetooth-Gerät hinzufügen",
"settings.bluetooth.add-edit.edit-title": "Bluetooth-Gerät bearbeiten",
"settings.bluetooth.add-edit.device-name-label": "Bluetooth Gerätename:",
"settings.general.run-on-startup": "WinMute mit Windows starten",
"settings.general.enable-logging": "Protokoll in Datei speichern",
"settings.general.btn-open-log-file": "Protokolldatei öffnen...",
"settings.general.btn-open-log-window": "Protokoll anzeigen...",
"settings.general.select-language-label": "Sprache",
"settings.bluetooth.add-edit.enter-device-name-placeholder": "Bitte geben Sie einen Gerätenamen an",
"settings.bluetooth.description": "\"Bluetooth Muting\" aktiviert das Stummschalten des PCs sobald ein Bluetooth-Audiogerät vom PC getrennt wird und hebt die Stummschaltung auf, sobald es wieder verbunden wird.\n\nDieses Verhalten kann für alle oder nur bestimmte Bluetooth-Geräte aktiviert werden.",
"settings.bluetooth.enable-muting": "\"Bluetooth Stummschalten\" aktivieren",
"settings.bluetooth.enable-muting-filter": "Nur für die folgenden Geräte aktivieren:",
"settings.bluetooth-disabled-info": "Info: Bluetooth ist auf diesem Gerät nicht verfügbar.\nEinige Optionen wurden deaktiviert.",
"settings.mute.general-title": "Allgemein",
"settings.mute.show-mute-event-notifications": "Zeige Benachrichtigungen an",
"settings.mute.manage-endpoints-individually": "Verwalte Audiogeräte individuell",
"settings.mute.btn-manage-endpoints": "Audiogeräte verwalten...",
"settings.mute.mute-with-restore.title": "Stummschalten mit Lautstärkewiederherstellung, wenn...",
"settings.mute.mute-with-restore.when-workstation-is-locked": "... der PC gesperrt wird",
"settings.mute.mute-with-restore.when-screen-turns-off": "... der Bildschirm in Standby geht",
"settings.mute.mute-with-restore.restore-volume": "Lautstärke danach wiederherstellen",
"settings.mute.mute-with-restore.restore-volume-delay-label": "Sekunden Verzögerung vor dem Stummschalten.",
"settings.mute.mute-without-restore.title": "Stummschalten ohne Lautstärkenwiederherstellung, wenn...",
"settings.mute.mute-without-restore.when-computer-shuts-down": "... der Computer heruntegefahren wird",
"settings.mute.mute-without-restore.when-computer-goes-to-sleep": "... der Computer in den Schlaf-/Ruhemodus geht",
"settings.mute.mute-without-restore.when-user-logs-out": "... sich der Benutzer abmeldet",
"settings.mute.mute-without-restore.when-rdp-session-starts": "... eine RDP Session erkannt wird",
"settings.quiet-hours.intro": "Während der Ruhezeit schaltet WinMute alle Audiogeräte auf Stumm und stellt anschließend die Lautstärke wieder her.",
"settings.quiet-hours.enable": "Ruhzeit aktivieren",
"settings.quiet-hours.start-time-label": "Beginn:",
"settings.quiet-hours.end-time-label": "Ende:",
"settings.quiet-hours.force-unmute": "Lautstärkewiederherstellung erzwingen",
"settings.quiet-hours.force-unmute-description": "Die Lautstärke wird von allen Audiogeräten wiederhergestellt, unabhängig davon ob diese vor der Ruhezeit stumm geschaltet waren, oder nicht.",
"settings.quiet-hours.show-notifications": "Benachrichtigungen zur Ruhezeit anzeigen",
"settings.quiet-hours.error.invalid-time-range.title": "Fehlerhafter Zeitraum",
"settings.quiet-hours.error.invalid-time-range.text": "Beginn und Ende müssen unterschiedliche Zeiten sein.",
"settings.quiet-hours.error.error-while-saving.title": "Fehler beim Speichern der Einstellungen",
"settings.quiet-hours.error.error-while-saving.text": "Während dem Speichern der Ruhezeiteinstellungen trat ein Fehler auf",
"settings.wifi.intro": "Das WLAN basiert Stummschalten ermöglicht es die PC-Lautstärke abhängig von dem Namen des verbundenen WLAN Netzwerks zu steuern.",
"settings.wifi.enable": "Aktiviere WLAN-basiertes Stummschalten",
"settings.wifi.mute-when-not-in-list": "Stummschalten, wenn das WLAN nicht in der Liste ist",
"settings.wifi.wifi-disabled-info": "Info: WLAN ist auf diesem Gerät nicht verfügbar.\nEinige Optionen wurden deaktiviert.",
"settings.wifi.add-edit.add-title": "WLAN Netzwerk hinzufügen",
"settings.wifi.add-edit.edit-title": "WLAN Netzwerk bearbeiten",
"settings.wifi.add-edit.ssid-name-label": "SSID/WLAN-Name:",
"settings.wifi.add-edit.enter-device-name-placeholder": "Bitte geben sie einen WLAN Netzwerknamen ein",
"settings.mute.manage-endpoints.title": "Audiogeräte verwalten",
"settings.mute.manage-endpoints.list-behaviour.title": "Allgemein",
"settings.mute.manage-endpoints.list-behaviour.mute-only-listed": "Nur gespeicherte Audiogeräte stummschalten",
"settings.mute.manage-endpoints.list-behaviour.mute-all-but-listed": "Alle bis auf die gespeicherten Audiogeräte stummschalten",
"settings.mute.manage-endpoints.endpoints.title": "Audiogeräte",
"settings.mute.manage-endpoints.add-edit.add-title": "Gerät hinzufügen",
"settings.mute.manage-endpoints.add-edit.edit-title": "Gerät bearbeiten",
"settings.mute.manage-endpoints.add-edit.endpoint-name-placeholder": "Bitte ein Audiogerät angeben",
"settings.mute.manage-endpoints.add-edit.endpoint-name-label": "Audiogerät:",
"about.title": "Über WinMute",
"about.general.author-site-label": "Entwickler: www.lx-s.de",
"about.general.project-site-label": "Projektseite && Code",
"about.general.support-label": "Hilfe/Unterstützung",
"about.general.description": "WinMute wird von Alexander Steinhöfer in seiner Freizeit entwickelt. Der Quelltext sowie neue Programmversionen können auf GitHub heruntergeladen werden. Beiträge in Form von Code, Tickets oder Featurewünsche werden gerne gesehen! Vielen Dank dass Sie dieses kleine Tool verwenden!",
"about.tab.winmute": "WinMute",
"about.tab.license": "Lizenz",
"about.btn-close": "OK",
"settings.wifi.mute-when-in-list": "Stummschalten, wenn das WLAN in der Liste ist",
"settings.general.check-for-updates-on-start": "Bei Programmstart nach Updates suchen",
"popup.update-available.text": "Die installierte Version ist {}.\nKlicken sie auf diese Nachricht zum Öffnen der Downloadseite.",
"popup.update-available-beta.title": "WinMute Beta {} ist verfügbar!",
"popup.update-available-beta.text": "Die installierte Version ist {}.\nKlicken sie auf diese Nachricht zum Öffnen der Beta-Downloadseite.",
"settings.bluetooth.bluetooth-disabled-info": "Info: Bluetooth ist auf diesem Gerät nicht verfügbar.\nEinige Optionen wurden deaktiviert.",
"popup.error.update-check-failed.title": "Updateprüfung fehlgeschlagen.",
"popup.update-available.title": "WinMute {} ist verfügbar!",
"pupup.error.update-check-failed.text": "Fehler beim Prüfen auf eine neue Version.\nBitte prüfen Sie die Protokolldateien.",
"settings.general.check-for-beta-updates-on-start": "Auf Vorabversionen überprüfen",
"settings.general.updates-handled-externally": "Optionen deaktiviert: Updates werden extern durchgeführt",
"settings.general.help-translating": "Hilf beim Übersetzen",
"log.title": "WinMute Protokolldatei"
}
================================================
FILE: Translations/lang-en.json
================================================
{
"meta.lang.name": "English",
"meta.lang.mode": "ltr",
"init.error.settings.title": "Failed to initialize settings",
"init.error.settings.text": "Critical error while initializing WinMute",
"init.error.already-running.title": "WinMute is already running",
"init.error.already-running.text": "Please look for a winmutes application icon in the Windows taskbar notification area.",
"init.error.winmute.title": "Failed to start WinMute.",
"init.error.winmute.text": "WinMute encountered a critical error while initializing and must shut down.",
"init.error.winmute.platform-support.title": "Only Windows Vista and newer is supported",
"init.error.winmute.platform-support.text": "If Windows XP support is needed, please download WinMute version 1.4.2 or lower.",
"general.error.winapi.text": "{} failed with error {}: {}",
"general.error.audio-service-shutdown.title": "The audio service has been shut down.",
"general.error.audio-service-shutdown.text": "WinMute is not able to recover from that condition.\nPlease try to restart the program.",
"popup.update-available.title": "WinMute {} is available!",
"popup.update-available.text": "The installed version is {}.\nClick on this message to open the download page.",
"popup.update-available-beta.title": "WinMute Beta {} is available!",
"popup.update-available-beta.text": "Your current version is {}.\nClick on this message to open the beta-download page.",
"popup.error.update-check-failed.title": "Update check failed.",
"pupup.error.update-check-failed.text": "Unable to check for a new version.\nPlease check/enable logging for further details.",
"popup.remote-session-detected.title": "Remote Session detected",
"popup.remote-session-detected.text": "All audio devices have been muted",
"popup.bluetooth-muting-disabled.title": "Bluetooth muting disabled",
"popup.bluetooth-muting-disabled.text": "Bluetooth is not available or disabled.\nBluetooth muting will be disabled on this computer.",
"popup.wlan-muting-disabled.title": "WLAN muting disabled",
"popup.wlan-muting-disabled.text": "WLAN is not available or disabled.\nWLAN muting will be disabled on this computer.",
"popup.quiet-hours-started.title": "Quiet hours started",
"popup.quiet-hours-started.text": "Computer audio will now be muted.",
"popup.quiet-hours-ended.title": "Quiet Hours ended",
"popup.quiet-hours-ended.text": "Computer audio has been restored.",
"popup.workstation-muted.title": "Audio muted",
"popup.wlan-not-on-mute-list.text": "WLAN network \"{}\" is not on allowed list.",
"popup.wlan-is-on-mute-list.text": "WLAN network \"{}\" is configured for AutoMute.",
"popup.muting-workstation-after-delay.title": "Muting computer after delay",
"popup.muting-workstation-after-delay.text": "All devices have been muted",
"popup.volume-restored.title": "Volume restored",
"popup.volume-restored.text": "All devices have been restored to their previous configuration",
"popup.muting-workstation.title": "Muting computer",
"popup.muting-workstation.text": "All devices have been muted",
"popup.error.quiet-hours-start.title": "Quiet Hours Start",
"popup.error.quiet-hours-start.text": "Failed to register quiet hours start with windows timer system",
"popup.error.quiet-hours-stop.title": "Quiet Hours Stop",
"popup.error.quiet-hours-stop.text": "Failed to register end of quiet hours with windows timer system",
"traymenu.info": "About",
"traymenu.mute-when": "Mute when...",
"traymenu.mute-on-lock": "... computer is locked",
"traymenu.mute-on-screen-suspend": "... screen turns off",
"traymenu.restore-volume": "Restore volume afterwards",
"traymenu.mute-no-restore": "Mute on (no volume restore)...",
"traymenu.mute-on-shutdown": "... shutdown",
"traymenu.mute-on-sleep": "... sleep",
"traymenu.mute-on-logout": "... logout",
"traymenu.mute-all-devices": "Mute all devices now",
"traymenu.settings": "Settings...",
"traymenu.exit": "Exit",
"settings.title": "Settings",
"settings.btn-save": "Save",
"settings.btn-cancel": "Cancel",
"settings.btn-add": "Add",
"settings.btn-edit": "Edit",
"settings.btn-remove": "Remove",
"settings.btn-remove-all": "Remove all",
"settings.tab.general": "General",
"settings.tab.mute": "Mute",
"settings.tab.quiet-hours": "Quiet Hours",
"settings.tab.bluetooth": "Bluetooth",
"settings.tab.wifi": "WLAN",
"settings.bluetooth.add-edit.add-title": "Add Bluetooth device",
"settings.bluetooth.add-edit.edit-title": "Edit Bluetooth device",
"settings.bluetooth.add-edit.device-name-label": "Bluetooth device name:",
"settings.general.run-on-startup": "Run WinMute when this user logs on",
"settings.general.check-for-updates-on-start": "Check for new updates on startup",
"settings.general.check-for-beta-updates-on-start": "Also check for new beta versions",
"settings.general.updates-handled-externally": "Options disabled: Updates are handled externally",
"settings.general.enable-logging": "Save log to file",
"settings.general.btn-open-log-file": "Open log file...",
"settings.general.btn-open-log-window": "Show log...",
"settings.general.select-language-label": "Language",
"settings.general.help-translating": "Help translating",
"settings.bluetooth.add-edit.enter-device-name-placeholder": "Please enter a Bluetooth device name",
"settings.bluetooth.description": "\"Bluetooth Muting\" allows disabling the audio if an audio-class bluetooth device is disconnected, and re-enables it if a device is reconnected to the computer.\n\nThis behaviour can be enabled for all bluetooth audio-devices or only for a specific set.",
"settings.bluetooth.enable-muting": "Enable Bluetooth-based muting",
"settings.bluetooth.enable-muting-filter": "Enable only for these devices:",
"settings.bluetooth.bluetooth-disabled-info": "Note: Bluetooth is not available on this device.\nSome options have been disabled.",
"settings.mute.general-title": "General",
"settings.mute.show-mute-event-notifications": "Show mute event notifications",
"settings.mute.manage-endpoints-individually": "Manage audio devices individually",
"settings.mute.btn-manage-endpoints": "Manage devices...",
"settings.mute.mute-with-restore.title": "Mute with volume restore, when...",
"settings.mute.mute-with-restore.when-workstation-is-locked": "... the computer is locked",
"settings.mute.mute-with-restore.when-screen-turns-off": "... the screen turns off",
"settings.mute.mute-with-restore.restore-volume": "Restore volume afterwards",
"settings.mute.mute-with-restore.restore-volume-delay-label": "seconds delay before muting.",
"settings.mute.mute-without-restore.title": "Mute without volume restore, when...",
"settings.mute.mute-without-restore.when-computer-shuts-down": "... the computer shuts down",
"settings.mute.mute-without-restore.when-computer-goes-to-sleep": "... the computer goes into sleep/hibernate",
"settings.mute.mute-without-restore.when-user-logs-out": "... the user logs out",
"settings.mute.mute-without-restore.when-rdp-session-starts": "... WinMute is started within a RDP session",
"settings.quiet-hours.intro": "During Quiet Hours WinMute automatically mutes the computers audio devices and unmutes them afterwards.",
"settings.quiet-hours.enable": "Enable Quiet Hours",
"settings.quiet-hours.start-time-label": "Start time:",
"settings.quiet-hours.end-time-label": "End time:",
"settings.quiet-hours.force-unmute": "Force unmute",
"settings.quiet-hours.force-unmute-description": "If force unmute is enabled, WinMute will unmute the computers audio devices when quiet hours end and not take into account if they were already muted before quiet hours started.",
"settings.quiet-hours.show-notifications": "Show Quiet Hours notifications",
"settings.quiet-hours.error.invalid-time-range.title": "Invalid time range",
"settings.quiet-hours.error.invalid-time-range.text": "Start and stop must not be the same time.",
"settings.quiet-hours.error.error-while-saving.title": "Failed to save quiet hours settings",
"settings.quiet-hours.error.error-while-saving.text": "Something went wrong while saving the settings",
"settings.wifi.intro": "\"WLAN Mute\" mutes the computer based on the name of the connected wireless network.",
"settings.wifi.enable": "Enable WLAN based muting",
"settings.wifi.mute-when-in-list": "Mute if connected WLAN is in list",
"settings.wifi.mute-when-not-in-list": "Mute if connected WLAN is not in list",
"settings.wifi.wifi-disabled-info": "Note: WLAN is not available on this device.\nSome options have been disabled.",
"settings.wifi.add-edit.add-title": "Add WiFi network",
"settings.wifi.add-edit.edit-title": "Edit WiFi network",
"settings.wifi.add-edit.ssid-name-label": "SSID/WiFi Name:",
"settings.wifi.add-edit.enter-device-name-placeholder": "Please enter a SSID/WiFi name",
"settings.mute.manage-endpoints.title": "Manage audio devices",
"settings.mute.manage-endpoints.list-behaviour.title": "General",
"settings.mute.manage-endpoints.list-behaviour.mute-only-listed": "Mute only listed devices",
"settings.mute.manage-endpoints.list-behaviour.mute-all-but-listed": "Mute all but listed devices",
"settings.mute.manage-endpoints.endpoints.title": "Devices",
"settings.mute.manage-endpoints.add-edit.add-title": "Add Device",
"settings.mute.manage-endpoints.add-edit.edit-title": "Edit Device",
"settings.mute.manage-endpoints.add-edit.endpoint-name-placeholder": "Please enter a device name",
"settings.mute.manage-endpoints.add-edit.endpoint-name-label": "Device name:",
"about.title": "About WinMute",
"about.general.author-site-label": "Author: www.lx-s.de",
"about.general.project-site-label": "Project Site && Code",
"about.general.support-label": "Support",
"about.general.description": "WinMute is developed by Alexander Steinhoefer his spare time. The code as well as new releases for this tool can be found on GitHub. Contributions in the form of code, tickets or feature requests are very welcome. Thanks for using this little tool!",
"about.tab.winmute": "WinMute",
"about.tab.license": "License",
"about.btn-close": "OK",
"log.title": "WinMute Log-File"
}
================================================
FILE: Translations/lang-es.json
================================================
{
"meta.lang.name": "Español (Spanish)",
"meta.lang.mode": "ltr",
"init.error.settings.title": "No se pudo inicializar la configuración",
"init.error.settings.text": "Error crítico al inicializar WinMute",
"init.error.already-running.title": "WinMute ya se está ejecutando",
"init.error.already-running.text": "Por favor busque el ícono de la aplicación WinMute en el área de notificación de la barra de tareas de Windows.",
"init.error.winmute.title": "No se pudo iniciar WinMute.",
"init.error.winmute.text": "WinMute encontró un error crítico durante la inicialización y debe cerrarse.",
"init.error.winmute.platform-support.title": "Solo se soporta Windows Vista y versiones más recientes",
"init.error.winmute.platform-support.text": "Si requiere soporte para Windows XP, por favor descargue WinMute 1.4.2 o inferior.",
"general.error.winapi.text": "{} falló con error {}: {}",
"general.error.audio-service-shutdown.title": "El servicio de audio ha sido terminado.",
"general.error.audio-service-shutdown.text": "WinMute no puede recuperarse de esta condición.\nPor favor intente reiniciar el programa.",
"popup.remote-session-detected.title": "Sesión remota detectada",
"popup.remote-session-detected.text": "Se han silenciado todos los dispositivos de audio",
"popup.bluetooth-muting-disabled.title": "Silenciamiento de Bluetooth deshabilitado",
"popup.bluetooth-muting-disabled.text": "Bluetooth no está disponible o está deshabilitado.\nEl silenciamiento de Bluetooth será deshabilitado en esta computadora.",
"popup.wlan-muting-disabled.title": "Silenciamiento de WiFi desactivado",
"popup.wlan-muting-disabled.text": "WiFi no está disponible o está deactivado.\nEl silenciamiento de WiFi será deshabilitado en esta computadora.",
"popup.quiet-hours-started.title": "Horas de silencio activadas",
"popup.quiet-hours-started.text": "El audio de la computadora será silenciado ahora.",
"popup.quiet-hours-ended.title": "Horas de silencio terminadas",
"popup.quiet-hours-ended.text": "El audio de la computadora ha sido restaurado.",
"popup.workstation-muted.title": "Audio silenciado",
"popup.wlan-not-on-mute-list.text": "La red de WiFi \"{}\" no esta en la lista de redes permitidas.",
"popup.wlan-is-on-mute-list.text": "La red WiFi \"{}\" está configurada para AutoMute.",
"popup.muting-workstation-after-delay.title": "Silenciando la computadora después de demora",
"popup.muting-workstation-after-delay.text": "Todos los dispositivos han sido silenciados",
"popup.volume-restored.title": "Volumen restaurado",
"popup.volume-restored.text": "Todos los dispositivos han sido restaurados a su configuración anterior",
"popup.muting-workstation.title": "Silenciando computadora",
"popup.muting-workstation.text": "Todos los dispositivos han sido silenciados",
"popup.error.quiet-hours-start.title": "Empezar Horas de Silencio",
"popup.error.quiet-hours-start.text": "Fallo al registrar el inicio de las horas de silencio con el sistema de temporizador de Windows",
"popup.error.quiet-hours-stop.title": "Fin de las horas de silencio",
"popup.error.quiet-hours-stop.text": "Fallo al registrar el final de las horas de silencio con el sistema de temporizador de Windows",
"traymenu.info": "Acerca de",
"traymenu.mute-when": "Silenciar cuando...",
"traymenu.mute-on-lock": "... la computadora está bloqueada",
"traymenu.mute-on-screen-suspend": "... la pantalla se apaga",
"traymenu.restore-volume": "Restaurar el volumen después",
"traymenu.mute-no-restore": "Silencio activado (no se restablece el volumen)...",
"traymenu.mute-on-shutdown": "... apagado",
"traymenu.mute-on-sleep": "... suspender",
"traymenu.mute-on-logout": "... cerrar sesión",
"traymenu.mute-all-devices": "Silenciar todos los dispositivos ahora",
"traymenu.settings": "Configuración...",
"traymenu.exit": "Salir",
"settings.title": "Configuración",
"settings.btn-save": "Guardar",
"settings.btn-cancel": "Cancelar",
"settings.btn-add": "Añadir",
"settings.btn-edit": "Editar",
"settings.btn-remove": "Quitar",
"settings.btn-remove-all": "Quitar todo",
"settings.tab.general": "General",
"settings.tab.mute": "Silencio",
"settings.tab.quiet-hours": "Horas de silencio",
"settings.tab.bluetooth": "Bluetooth",
"settings.tab.wifi": "WLAN",
"settings.bluetooth.add-edit.add-title": "Añade un dispositivo Bluetooth",
"settings.bluetooth.add-edit.edit-title": "Editar dispositivo Bluetooth",
"settings.bluetooth.add-edit.device-name-label": "Nombre del dispositivo Bluetooth:",
"settings.general.run-on-startup": "Ejecutar WinMute cuando este usuario se conecte",
"settings.general.enable-logging": "Guardar registro en archivo",
"settings.general.btn-open-log-file": "Abrir el archivo de registro...",
"settings.general.select-language-label": "Idioma",
"settings.bluetooth.add-edit.enter-device-name-placeholder": "Por favor, introduzca un nombre para el dispositivo Bluetooth",
"settings.bluetooth.description": "\"Silenciar Bluetooth\" permite desactivar el audio si se desconecta un dispositivo bluetooth de clase audio, y volver a activarlo si se vuelve a conectar al ordenador.\n\nEste comportamiento se puede activar para todos los dispositivos de audio bluetooth o sólo para un conjunto específico.",
"settings.bluetooth.enable-muting": "Activar el silenciamiento basado en Bluetooth",
"settings.bluetooth.enable-muting-filter": "Activar sólo para estos dispositivos:",
"settings.bluetooth-disabled-info": "",
"settings.mute.general-title": "General",
"settings.mute.show-mute-event-notifications": "Mostrar notificaciones de eventos silenciados",
"settings.mute.manage-endpoints-individually": "Gestiona individualmente los dispositivos de audio",
"settings.mute.btn-manage-endpoints": "Gestiona los dispositivos...",
"settings.mute.mute-with-restore.title": "Silencio con restauración del volumen, cuando...",
"settings.mute.mute-with-restore.when-workstation-is-locked": "... el ordenador está bloqueado",
"settings.mute.mute-with-restore.when-screen-turns-off": "... la pantalla se apaga",
"settings.mute.mute-with-restore.restore-volume": "Restaurar el volumen después",
"settings.mute.mute-with-restore.restore-volume-delay-label": "segundos de retardo antes de silenciar.",
"settings.mute.mute-without-restore.title": "Silenciar sin restaurar el volumen, cuando...",
"settings.mute.mute-without-restore.when-computer-shuts-down": "... el ordenador se apaga",
"settings.mute.mute-without-restore.when-computer-goes-to-sleep": "... el ordenador entra en reposo/hibernación",
"settings.mute.mute-without-restore.when-user-logs-out": "... el usuario se desconecta",
"settings.mute.mute-without-restore.when-rdp-session-starts": "... WinMute se inicia dentro de una sesión RDP",
"settings.quiet-hours.intro": "Durante las horas de silencio, WinMute silencia automáticamente los dispositivos de audio del ordenador y los vuelve a silenciar después.",
"settings.quiet-hours.enable": "Activar las horas de silencio",
"settings.quiet-hours.start-time-label": "Hora de inicio:",
"settings.quiet-hours.end-time-label": "Hora de finalización:",
"settings.quiet-hours.force-unmute": "Forzar el silencio",
"settings.quiet-hours.force-unmute-description": "Si la opción de forzar el silencio está activada, WinMute anulará el silencio de los dispositivos de audio del ordenador cuando finalicen las horas de silencio y no tendrá en cuenta si ya estaban silenciados antes de que comenzaran las horas de silencio.",
"settings.quiet-hours.show-notifications": "Mostrar notificaciones de horas de silencio",
"settings.quiet-hours.error.invalid-time-range.title": "Intervalo de tiempo no válido",
"settings.quiet-hours.error.invalid-time-range.text": "El inicio y el final deben ser tiempos diferentes.",
"settings.quiet-hours.error.error-while-saving.title": "No se ha podido guardar la configuración de las horas de silencio",
"settings.quiet-hours.error.error-while-saving.text": "Algo ha ido mal al guardar la configuración",
"settings.wifi.intro": "\"WLAN Mute\" silencia la computadora según el nombre de la red inalámbrica conectada.",
"settings.wifi.enable": "Habilitar el silenciamiento basado en WLAN",
"settings.wifi.mute-when-in-list": "Silenciar si la WLAN conectada está en la lista",
"settings.wifi.mute-when-not-in-list": "Silenciar si la WLAN conectada no está en la lista",
"settings.wifi.wifi-disabled-info": "Nota: WLAN no está disponible en este dispositivo.\nAlgunas opciones han sido deshabilitadas.",
"settings.wifi.add-edit.add-title": "Añadir red WiFi",
"settings.wifi.add-edit.edit-title": "Editar red WiFi",
"settings.wifi.add-edit.ssid-name-label": "Nombre SSID/WiFi:",
"settings.wifi.add-edit.enter-device-name-placeholder": "Por favor proporcione un nombre de SSID/WiFi",
"settings.mute.manage-endpoints.title": "Administrar dispositivos de audio",
"settings.mute.manage-endpoints.list-behaviour.title": "General",
"settings.mute.manage-endpoints.list-behaviour.mute-only-listed": "Silenciar solo los dispositivos listados",
"settings.mute.manage-endpoints.list-behaviour.mute-all-but-listed": "Silenciar todo excepto los dispositivos listados",
"settings.mute.manage-endpoints.endpoints.title": "Dispositivos",
"settings.mute.manage-endpoints.add-edit.add-title": "Añadir dispositivo",
"settings.mute.manage-endpoints.add-edit.edit-title": "Editar dispositivo",
"settings.mute.manage-endpoints.add-edit.endpoint-name-placeholder": "Por favor proporcione un nombre de dispositivo",
"settings.mute.manage-endpoints.add-edit.endpoint-name-label": "Nombre de dispositivo:",
"about.title": "Acerca de WinMute",
"about.general.author-site-label": "Autor: www.lx-s.de",
"about.general.project-site-label": "Sitio del proyecto && Código",
"about.general.support-label": "Soporte",
"about.general.description": "WinMute es desarrollado por Alexander Steinhoefer en su tiempo libre. El código, así como los nuevos lanzamientos de esta herramienta, pueden encontrarse en Github. Las contribuciones en forma de código, tickets o solicitudes de características son muy bienvenidas. Gracias por usar esta pequeña herramienta!",
"about.tab.winmute": "WinMute",
"about.tab.license": "Licencia",
"about.btn-close": "OK",
"popup.update-available.text": "La versión instalada es {}.\nHaga clic en este mensaje para abrir la página de descarga.",
"popup.update-available-beta.title": "¡WinMute Beta {} ya está disponible!",
"settings.general.check-for-updates-on-start": "Buscar nuevas actualizaciones al iniciar",
"popup.update-available-beta.text": "Tu versión actual es {}.\nHaga clic en este mensaje para abrir la página de descarga de la versión beta.",
"settings.bluetooth.bluetooth-disabled-info": "Nota: el bluetooth no está disponible en este dispositivo.\nAlgunas opciones se han desactivado.",
"popup.error.update-check-failed.title": "Error en la comprobación de la actualización.",
"settings.general.updates-handled-externally": "Opciones desactivadas: Las actualizaciones se gestionan externamente",
"popup.update-available.title": "¡WinMute {} está disponible!",
"pupup.error.update-check-failed.text": "No se ha podido comprobar si hay una nueva versión.\nPor favor compruebe/habilite el registro para obtener más detalles.",
"settings.general.check-for-beta-updates-on-start": "Compruebe también si hay nuevas versiones beta",
"settings.general.help-translating": "Ayuda a la traducción",
"log.title": "WinMute Archivo de registro",
"settings.general.btn-open-log-window": "Mostrar registro..."
}
================================================
FILE: Translations/lang-fr.json
================================================
{
"meta.lang.name": "French (Français)",
"meta.lang.mode": "ltr",
"init.error.settings.title": "Échec de l'initialisation des paramètres",
"init.error.settings.text": "Erreur critique lors de l'initialisation de WinMute",
"init.error.already-running.title": "WinMute est déjà en cours d'exécution",
"init.error.already-running.text": "Veuillez rechercher une icône d’application winmutes dans la zone de notification de la barre des tâches Windows.",
"init.error.winmute.title": "Échec du démarrage de WinMute.",
"init.error.winmute.text": "WinMute a rencontré une erreur critique lors de l'initialisation et doit s'arrêter.",
"init.error.winmute.platform-support.title": "Seuls Windows Vista et les versions plus récentes sont pris en charge",
"init.error.winmute.platform-support.text": "Si la prise en charge de Windows XP est nécessaire, veuillez télécharger WinMute version 1.4.2 ou inférieure.",
"general.error.winapi.text": "{} a échoué avec l'erreur {} : {}",
"general.error.audio-service-shutdown.title": "Le service audio a été fermé.",
"general.error.audio-service-shutdown.text": "WinMute n'est pas en mesure de se remettre de cette situation.\nVeuillez essayer de redémarrer le programme.",
"popup.update-available.title": "WinMute {} est disponible !",
"popup.update-available.text": "La version installée est {}.\nCliquez sur ce message pour ouvrir la page de téléchargement.",
"popup.update-available-beta.title": "WinMute Beta {} est disponible !",
"popup.update-available-beta.text": "Votre version actuelle est {}.\nCliquez sur ce message pour ouvrir la page de téléchargement de la version bêta.",
"popup.error.update-check-failed.title": "La mise à jour a échoué.",
"pupup.error.update-check-failed.text": "Impossible de vérifier la présence d'une nouvelle version.\nVeuillez vérifier/activer la journalisation pour plus de détails.",
"popup.remote-session-detected.title": "Session à distance détectée",
"popup.remote-session-detected.text": "Tous les applications audio ont été coupés",
"popup.bluetooth-muting-disabled.title": "Coupure Bluetooth désactivée",
"popup.bluetooth-muting-disabled.text": "Le Bluetooth n'est pas disponible ou est désactivé.\nLa désactivation du Bluetooth sera désactivée sur cet ordinateur.",
"popup.wlan-muting-disabled.title": "Désactivation du mode muet WLAN",
"popup.wlan-muting-disabled.text": "Le WLAN n'est pas disponible ou est désactivé.\nLa désactivation du WLAN sera désactivée sur cet ordinateur.",
"popup.quiet-hours-started.title": "Les coupure de sons ont commencé",
"popup.quiet-hours-started.text": "Le son de l'ordinateur sera désormais coupé.",
"popup.quiet-hours-ended.title": "Fin des coupures de sons",
"popup.quiet-hours-ended.text": "le sons de l'ordinateur a été restauré.",
"popup.workstation-muted.title": "Audio muter",
"popup.wlan-not-on-mute-list.text": "Le réseau WLAN «{}» n'est pas sur la liste autorisée.",
"popup.wlan-is-on-mute-list.text": "Le réseau WLAN «{}» est configuré pour AutoMute.",
"popup.muting-workstation-after-delay.title": "Coupure du sons de l'ordinateur après un délai",
"popup.muting-workstation-after-delay.text": "Tous les applications ont été mis en sourdine",
"popup.volume-restored.title": "Sons restauré",
"popup.volume-restored.text": "Tous les applications ont été restaurés à leur configuration précédente",
"popup.muting-workstation.title": "Couper le sons du pc",
"popup.muting-workstation.text": "Tous les applications ont été mis en sourdine",
"popup.error.quiet-hours-start.title": "Début des heures de coupure",
"popup.error.quiet-hours-start.text": "Impossible d'enregistrer les heures de coupure avec le système de minuterie Windows",
"popup.error.quiet-hours-stop.title": "Impossible d'enregistrer les heures de coupure avec le système de minuterie Windows",
"popup.error.quiet-hours-stop.text": "Impossible d'enregistrer la fin des heures de coupure avec le système de minuterie Windows",
"traymenu.info": "À propos",
"traymenu.mute-when": "Muet quand...",
"traymenu.mute-on-lock": "... l'ordinateur est verrouillé",
"traymenu.mute-on-screen-suspend": "... l'écran s'éteint",
"traymenu.restore-volume": "Restaurer le sons après",
"traymenu.mute-no-restore": "Sons activé (pas de restauration du volume)...",
"traymenu.mute-on-shutdown": "... fermer",
"traymenu.mute-on-sleep": "... dormir",
"traymenu.mute-on-logout": "... déconnexion",
"traymenu.mute-all-devices": "Couper le son de tous les applications maintenant",
"traymenu.settings": "Paramètres...",
"traymenu.exit": "Sortie",
"settings.title": "Paramètres",
"settings.btn-save": "Sauvegarder",
"settings.btn-cancel": "Annuler",
"settings.btn-add": "Ajouter",
"settings.btn-edit": "Modifier",
"settings.btn-remove": "Retirer",
"settings.btn-remove-all": "Supprimer tout",
"settings.tab.general": "Menu Général",
"settings.tab.mute": "Muet",
"settings.tab.quiet-hours": "Réglages pendant la coupure",
"settings.tab.bluetooth": "Bluetooth",
"settings.tab.wifi": "WLAN",
"settings.bluetooth.add-edit.add-title": "Ajouter un appareil Bluetooth",
"settings.bluetooth.add-edit.edit-title": "Modifier l'appareil Bluetooth",
"settings.bluetooth.add-edit.device-name-label": "Nom de l'appareil Bluetooth :",
"settings.general.run-on-startup": "Exécutez WinMute lorsque l'ordinateur se connecte",
"settings.general.check-for-updates-on-start": "Rechercher de nouvelles mises à jour au démarrage",
"settings.general.check-for-beta-updates-on-start": "Vérifiez également les nouvelles versions bêta",
"settings.general.updates-handled-externally": "Options désactivées : les mises à jour sont gérées en externe",
"settings.general.enable-logging": "Enregistrer le journal dans un fichier",
"settings.general.btn-open-log-file": "Ouvrir le fichier journal...",
"settings.general.select-language-label": "Langue",
"settings.general.help-translating": "Aide à la traduction",
"settings.bluetooth.add-edit.enter-device-name-placeholder": "Veuillez saisir un appareil Bluetooth",
"settings.bluetooth.description": "« Bluetooth Muting » permet de désactiver l'audio si un périphérique Bluetooth de classe audio est déconnecté, et de le réactiver si un périphérique est reconnecté à l'ordinateur.\n\nPeut être actif pour tous les périphériques audio Bluetooth ou uniquement pour un appareil spécifique.",
"settings.bluetooth.enable-muting": "Activer la coupure de sons via Bluetooth",
"settings.bluetooth.enable-muting-filter": "Activer uniquement pour ces appareils :",
"settings.bluetooth.bluetooth-disabled-info": "Remarque : le Bluetooth n'est pas disponible sur cet appareil.\nCertaines options ont été désactivées.",
"settings.mute.general-title": "Général",
"settings.mute.show-mute-event-notifications": "Afficher les notifications d'événements en sourdine",
"settings.mute.manage-endpoints-individually": "Gérer les périphériques audio individuellement",
"settings.mute.btn-manage-endpoints": "Gérer les appareils...",
"settings.mute.mute-with-restore.title": "Couper le son avec restauration du volume, lorsque...",
"settings.mute.mute-with-restore.when-workstation-is-locked": "... l'ordinateur est verrouillé",
"settings.mute.mute-with-restore.when-screen-turns-off": "... l'écran s'éteint",
"settings.mute.mute-with-restore.restore-volume": "Restaurer le volume par la suite",
"settings.mute.mute-with-restore.restore-volume-delay-label": "secondes de délai avant la coupure de sons.",
"settings.mute.mute-without-restore.title": "Couper le son sans restaurer le sons, lorsque...",
"settings.mute.mute-without-restore.when-computer-shuts-down": "... l'ordinateur s'éteint",
"settings.mute.mute-without-restore.when-computer-goes-to-sleep": "... l'ordinateur passe en veille/hibernation",
"settings.mute.mute-without-restore.when-user-logs-out": "... l'utilisateur se déconnecte",
"settings.mute.mute-without-restore.when-rdp-session-starts": "... WinMute est démarré dans une session RDP",
"settings.quiet-hours.intro": "Pendant les heures calmes, WinMute coupe automatiquement le son des périphériques audio de l'ordinateur et les réactive ensuite.",
"settings.quiet-hours.enable": "Activer les heures de silence",
"settings.quiet-hours.start-time-label": "Heure de début :",
"settings.quiet-hours.end-time-label": "Heure de fin :",
"settings.quiet-hours.force-unmute": "Forcer la désactivation du son",
"settings.quiet-hours.force-unmute-description": "Si la fonction de désactivation forcée du son est activée, WinMute désactivera le son des périphériques audio des ordinateurs à la fin des heures de coupure et ne tiendra pas compte s'ils étaient déjà désactivés avant le début des heures de coupure.",
"settings.quiet-hours.show-notifications": "Afficher les notifications d'heures de coupure",
"settings.quiet-hours.error.invalid-time-range.title": "Plage horaire non valide",
"settings.quiet-hours.error.invalid-time-range.text": "Le démarrage et l'arrêt ne doivent pas être simultanés.",
"settings.quiet-hours.error.error-while-saving.title": "Impossible d'enregistrer les paramètres des heures de coupure",
"settings.quiet-hours.error.error-while-saving.text": "Une erreur s'est produite lors de l'enregistrement des paramètres",
"settings.wifi.intro": "«WLAN Mute» coupe le son de l'ordinateur en fonction du nom du réseau sans fil connecté.",
"settings.wifi.enable": "Activer la mise en sourdine basée sur le WLAN",
"settings.wifi.mute-when-in-list": "Couper le son si le réseau Wi-Fi connecté est dans la liste",
"settings.wifi.mute-when-not-in-list": "Désactiver si le réseau Wi-Fi connecté n'est pas dans la liste",
"settings.wifi.wifi-disabled-info": "Remarque : le Wi-Fi n'est pas disponible sur cet appareil.\nCertaines options ont été désactivées.",
"settings.wifi.add-edit.add-title": "Ajouter un réseau WiFi",
"settings.wifi.add-edit.edit-title": "Modifier le réseau WiFi",
"settings.wifi.add-edit.ssid-name-label": "SSID/Nom Wi-Fi :",
"settings.wifi.add-edit.enter-device-name-placeholder": "Veuillez saisir un nom SSID/WiFi",
"settings.mute.manage-endpoints.title": "Gérer les périphériques audio",
"settings.mute.manage-endpoints.list-behaviour.title": "Général",
"settings.mute.manage-endpoints.list-behaviour.mute-only-listed": "Couper le son uniquement des appareils répertoriés",
"settings.mute.manage-endpoints.list-behaviour.mute-all-but-listed": "Couper le son de tous les appareils sauf ceux répertoriés",
"settings.mute.manage-endpoints.endpoints.title": "Appareils",
"settings.mute.manage-endpoints.add-edit.add-title": "Ajouter un appareil",
"settings.mute.manage-endpoints.add-edit.edit-title": "Modifier l'appareil",
"settings.mute.manage-endpoints.add-edit.endpoint-name-placeholder": "Veuillez saisir un nom d'appareil",
"settings.mute.manage-endpoints.add-edit.endpoint-name-label": "Nom de l'appareil :",
"about.title": "À propos de WinMute",
"about.general.author-site-label": "Auteur : www.lx-s.de",
"about.general.project-site-label": "Site et code du projet",
"about.general.support-label": "Aide",
"about.general.description": "WinMute est développé par Alexander Steinhoefer pendant son temps libre. Le code ainsi que les nouvelles versions de cet outil sont disponibles sur GitHub. Les contributions sous forme de code, de tickets ou de demandes de fonctionnalités sont les bienvenues. Merci d'utiliser ce petit outil !",
"about.tab.winmute": "WinMute",
"about.tab.license": "Licence",
"about.btn-close": "OK"
}
================================================
FILE: Translations/lang-it.json
================================================
{
"meta.lang.name": "Italiano (Italian)",
"meta.lang.mode": "ltr",
"init.error.settings.title": "Impossibile inizializzare le impostazioni",
"init.error.settings.text": "Errore critico durante l'inizializzazione di WinMute",
"init.error.already-running.title": "WinMute è già in esecuzione",
"init.error.already-running.text": "Cerca l'icona dell'applicazione WinMutes nell'area di notifica della barra delle applicazioni di Windows.",
"init.error.winmute.title": "Impossibile avviare WinMute.",
"init.error.winmute.text": "WinMute durante l'inizializzazione ha riscontrato un errore critico ed è necessario chiudere l'applicazione.",
"init.error.winmute.platform-support.title": "È supportato solo Windows Vista e versioni successive",
"init.error.winmute.platform-support.text": "Se hai bisogno del supporto per Windows XP, scarica WinMute versione 1.4.2 o precedente.",
"general.error.winapi.text": "{} non riuscito con errore {}: {}",
"general.error.audio-service-shutdown.title": "Il servizio audio è stato chiuso.",
"general.error.audio-service-shutdown.text": "WinMute non è in grado di recuperare da tale condizione.\nProva a riavviare il programma.",
"popup.remote-session-detected.title": "Rilevata sessione remota",
"popup.remote-session-detected.text": "Tutti i dispositivi audio sono stati disattivati",
"popup.bluetooth-muting-disabled.title": "Disabilitazione audio Bluetooth disattivata",
"popup.bluetooth-muting-disabled.text": "Il Bluetooth non è disponibile o è disabilitato.\nIn questo computer la disabilitazione dell'audio Bluetooth verrà disattivata.",
"popup.wlan-muting-disabled.title": "Disabilitazione audio WLAN disattivata",
"popup.wlan-muting-disabled.text": "La WLAN non è disponibile o è disabilitata. \nIn questo computer la disabilitazione dell'audio WLAN verrà disattivata.",
"popup.quiet-hours-started.title": "Cominciano le ore tranquille",
"popup.quiet-hours-started.text": "L'audio del computer verrà ora disattivato.",
"popup.quiet-hours-ended.title": "Ore tranquille terminate",
"popup.quiet-hours-ended.text": "L'audio del computer è stato riattivato.",
"popup.workstation-muted.title": "Audio computer OFF",
"popup.wlan-not-on-mute-list.text": "La rete WLAN \"{}\" non è nell'elenco consentito.",
"popup.wlan-is-on-mute-list.text": "La rete WLAN \"{}\" è configurata per la disabilitazione audio automatica.",
"popup.muting-workstation-after-delay.title": "Ritardo disattivazione audio computer",
"popup.muting-workstation-after-delay.text": "Tutti i dispositivi audio sono stati disattivati",
"popup.volume-restored.title": "Volume ripristinato",
"popup.volume-restored.text": "Tutti i dispositivi audio sono stati ripristinati alla loro configurazione precedente",
"popup.muting-workstation.title": "Audio OFF computer",
"popup.muting-workstation.text": "Tutti i dispositivi audio sono stati disattivati",
"popup.error.quiet-hours-start.title": "Avvio ore tranquille",
"popup.error.quiet-hours-start.text": "Impossibile registrare l'inizio delle ore di silenzio con il timer di sistema di Windows",
"popup.error.quiet-hours-stop.title": "Fine ore silenzio",
"popup.error.quiet-hours-stop.text": "Impossibile registrare la fine delle ore di silenzio con il timer di sistema di Windows",
"traymenu.info": "Info programma",
"traymenu.mute-when": "Audio OFF quando...",
"traymenu.mute-on-lock": "... il computer viene bloccato",
"traymenu.mute-on-screen-suspend": "... lo schermo verrà spento",
"traymenu.restore-volume": "Ripristina il volume in seguito",
"traymenu.mute-no-restore": "Disattiva audio (nessun ripristino volume) quando...",
"traymenu.mute-on-shutdown": "... il computer viene spento",
"traymenu.mute-on-sleep": "... il computer va in sospensione",
"traymenu.mute-on-logout": "... l'utente si scollega",
"traymenu.mute-all-devices": "Disattiva audio per tutti i dispositivi",
"traymenu.settings": "Impostazioni...",
"traymenu.exit": "Esci",
"settings.title": "Impostazioni",
"settings.btn-save": "Salva",
"settings.btn-cancel": "Annulla",
"settings.btn-add": "Aggiungi",
"settings.btn-edit": "Modifica",
"settings.btn-remove": "Rimuovi",
"settings.btn-remove-all": "Rimuovi tutto",
"settings.tab.general": "Generale",
"settings.tab.mute": "Disattiva audio",
"settings.tab.quiet-hours": "Ore silenzio",
"settings.tab.bluetooth": "Bluetooth",
"settings.tab.wifi": "WLAN",
"settings.bluetooth.add-edit.add-title": "Aggiungi dispositivo Bluetooth",
"settings.bluetooth.add-edit.edit-title": "Modifica dispositivo Bluetooth",
"settings.bluetooth.add-edit.device-name-label": "Nome dispositivo Bluetooth:",
"settings.general.run-on-startup": "Esegui WinMute all'accesso dell'utente",
"settings.general.enable-logging": "Salva il registro in un file",
"settings.general.btn-open-log-file": "Apri file registro eventi...",
"settings.general.select-language-label": "Lingua",
"settings.bluetooth.add-edit.enter-device-name-placeholder": "Inserisci il nome di un dispositivo Bluetooth",
"settings.bluetooth.description": "\"Audio OFF Bluetooth\" consente di disattivare l'audio se un dispositivo Bluetooth di classe audio viene disconnesso e di riattivare l'audio se un dispositivo Bluetooth viene ricollegato al computer.\n\nPuoi abilitare questo comportamento per tutti i dispositivi audio Bluetooth o solo per un set specifico di dispositivi.",
"settings.bluetooth.enable-muting": "Abilita disabilitazione audio basata su hardware Bluetooth",
"settings.bluetooth.enable-muting-filter": "Abilita solo per questi dispositivi:",
"settings.bluetooth.bluetooth-disabled-info": "Nota: il Bluetooth non è disponibile nel dispositivo, quindi alcune opzioni sono state disabilitate.",
"settings.mute.general-title": "Generale",
"settings.mute.show-mute-event-notifications": "Visualizza notifiche eventi disattivazione",
"settings.mute.manage-endpoints-individually": "Gestisci i dispositivi audio individualmente",
"settings.mute.btn-manage-endpoints": "Gestisci dispositivi audio...",
"settings.mute.mute-with-restore.title": "Disattiva audio con ripristino del volume, quando...",
"settings.mute.mute-with-restore.when-workstation-is-locked": "... il computer viene bloccato",
"settings.mute.mute-with-restore.when-screen-turns-off": "... lo schermo viene spento",
"settings.mute.mute-with-restore.restore-volume": "Ripristina il volume in seguito",
"settings.mute.mute-with-restore.restore-volume-delay-label": "secondi di ritardo prima della disattivazione dell'audio.",
"settings.mute.mute-without-restore.title": "Disattiva l'audio senza ripristinare il volume, quando...",
"settings.mute.mute-without-restore.when-computer-shuts-down": "... il computer viene spento",
"settings.mute.mute-without-restore.when-computer-goes-to-sleep": "... il computer entra in modalità sospensione/ibernazione",
"settings.mute.mute-without-restore.when-user-logs-out": "... l'utente si scollega",
"settings.mute.mute-without-restore.when-rdp-session-starts": "... WinMute è avviato all'interno di una sessione RDP",
"settings.quiet-hours.intro": "Durante le ore di silenzio WinMute disattiva automaticamente i dispositivi audio del computer e li riattiverà successivamente.",
"settings.quiet-hours.enable": "Abilita ore di silenzio",
"settings.quiet-hours.start-time-label": "Orario inizio:",
"settings.quiet-hours.end-time-label": "Orario fine:",
"settings.quiet-hours.force-unmute": "Forza audio ON",
"settings.quiet-hours.force-unmute-description": "Se è attivato 'Forza audio ON', WinMute riattiverà i dispositivi audio durante le ore di silenzio e non prenderà in considerazione se erano già disattivati prima dell'inizio delle ore di silenzio.",
"settings.quiet-hours.show-notifications": "Visualizza notifiche ore di silenzio",
"settings.quiet-hours.error.invalid-time-range.title": "Intervallo temporale non valido",
"settings.quiet-hours.error.invalid-time-range.text": "Non è possibile avviare e arrestare allo stesso orario.\nCorreggi l'intervallo di tempo.",
"settings.quiet-hours.error.error-while-saving.title": "Impossibile salvare le impostazioni delle ore di silenzio",
"settings.quiet-hours.error.error-while-saving.text": "Si è verificato un errore durante il salvataggio delle impostazioni",
"settings.wifi.intro": "'Audio OFF in base a nome rete WLAN' consente di disattivare l'audio del computer in base al nome della rete wireless connessa.",
"settings.wifi.enable": "Abilita disabilitazione audio basata su nome rete WLAN",
"settings.wifi.mute-when-not-in-list": "Disattiva audio se la rete WLAN NON è in elenco",
"settings.wifi.wifi-disabled-info": "Nota: la WLAN non è disponibile nel dispositivo, quindi alcune opzioni sono state disabilitate.",
"settings.wifi.add-edit.add-title": "Aggiungi rete WiFi",
"settings.wifi.add-edit.edit-title": "Modifica rete WiFi",
"settings.wifi.add-edit.ssid-name-label": "Nome SSID/WiFi:",
"settings.wifi.add-edit.enter-device-name-placeholder": "Inserisci un nome SSID/WiFi",
"settings.mute.manage-endpoints.title": "Gestisci dispositivi audio",
"settings.mute.manage-endpoints.list-behaviour.title": "Generale",
"settings.mute.manage-endpoints.list-behaviour.mute-only-listed": "Disattiva solo i dispositivi audio elencati",
"settings.mute.manage-endpoints.list-behaviour.mute-all-but-listed": "Disattiva tutti i dispositivi audio tranne quelli elencati",
"settings.mute.manage-endpoints.endpoints.title": "Dispositivi audio",
"settings.mute.manage-endpoints.add-edit.add-title": "Aggiungi dispositivi audio",
"settings.mute.manage-endpoints.add-edit.edit-title": "Modifica dispositivi audio",
"settings.mute.manage-endpoints.add-edit.endpoint-name-placeholder": "Inserisci un nome per il dispositivo audio",
"settings.mute.manage-endpoints.add-edit.endpoint-name-label": "Nome dispositivo audio:",
"about.title": "Info su WinMute",
"about.general.author-site-label": "Autore: www.lx-s.de",
"about.general.project-site-label": "Sito e codice del progetto",
"about.general.support-label": "Supporto",
"about.general.description": "WinMute è sviluppato da Alexander Steinhoefer nel suo tempo libero.\nIl codice e le nuove versioni di questo strumento sono disponibili su GitHub.\nI contributi sotto forma di codice, ticket o richieste di funzionalità sono molto graditi.\nGrazie per l'uso di questo piccolo strumento!",
"about.tab.winmute": "WinMute",
"about.tab.license": "Licenza",
"about.btn-close": "OK",
"settings.wifi.mute-when-in-list": "Disattiva audio se la rete WLAN è in elenco",
"popup.update-available.text": "La versione installata è {}.\nFai clic su questo messaggio per aprire la pagina di download.",
"popup.update-available-beta.title": "È disponibile WinMute Beta {}!",
"settings.general.check-for-updates-on-start": "All'avvio verifica la presenza di nuovi aggiornamenti",
"popup.update-available-beta.text": "La versione attuale è {}.\nFai clic su questo messaggio per aprire la pagina di download della versione beta.",
"popup.error.update-check-failed.title": "Controllo aggiornamenti non riuscito.",
"popup.update-available.title": "È disponibile WinMute {}!",
"pupup.error.update-check-failed.text": "Impossibile verificare la disponibilità di una nuova versione.\nPer ulteriori dettagli controlla/abilita la registrazione eventi.",
"settings.general.check-for-beta-updates-on-start": "Controlla anche disponibilità nuove versioni beta",
"settings.general.help-translating": "Aiuta nella traduzione",
"settings.general.updates-handled-externally": "Opzioni disabilitate: aggiornamenti gestiti esternamente",
"log.title": "WinMute Registro Eventi"
}
================================================
FILE: Translations/lang-ko.json
================================================
{
"meta.lang.name": "한글 (Korean)",
"meta.lang.mode": "ltr",
"init.error.settings.title": "설정을 초기화하지 못했습니다",
"init.error.settings.text": "WinMute 초기화 중 심각한 오류가 발생했습니다",
"init.error.already-running.title": "WinMute가 이미 실행중입니다",
"init.error.already-running.text": "Windows 작업 표시줄 알림 영역에서 WinMute 애플리케이션 아이콘을 확인해주세요.",
"init.error.winmute.title": "WinMute를 시작하지 못했습니다.",
"init.error.winmute.text": "WinMute를 초기화하는 동안 심각한 오류가 발생하여 종료해야 합니다.",
"init.error.winmute.platform-support.title": "Windows Vista 이상만 지원됩니다",
"init.error.winmute.platform-support.text": "Windows XP 지원이 필요한 경우 WinMute 버전 1.4.2 이하를 다운로드하세요.",
"general.error.winapi.text": "{} 실패, 오류 코드 {}: {}",
"general.error.audio-service-shutdown.title": "오디오 서비스가 종료되었습니다.",
"general.error.audio-service-shutdown.text": "WinMute를 해당 상태에서 복구할 수 없습니다.\n프로그램을 다시 시작해주세요.",
"popup.update-available.title": "WinMute {} 버전을 사용할 수 있습니다!",
"popup.update-available.text": "설치된 버전은 {}입니다.\n이 메시지를 클릭하여 다운로드 페이지를 엽니다.",
"popup.update-available-beta.title": "WinMute Beta {} 버전을 사용할 수 있습니다!",
"popup.update-available-beta.text": "현재 버전은 {}입니다.\n이 메시지를 클릭하여 베타 다운로드 페이지를 엽니다.",
"popup.error.update-check-failed.title": "업데이트 확인을 실패했습니다.",
"pupup.error.update-check-failed.text": "새버전을 확인할 수 없습니다.\n자세한 내용은 로그 확인/로그 활성화를 해주세요.",
"popup.remote-session-detected.title": "원격 세션이 감지되었습니다",
"popup.remote-session-detected.text": "모든 오디오 장치가 음소거되었습니다",
"popup.bluetooth-muting-disabled.title": "블루투스 음소거가 비활성화되었습니다",
"popup.bluetooth-muting-disabled.text": "블루투스를 사용할 수 없거나 비활성화되어 있습니다.\n이 컴퓨터에서 블루투스 음소거 기능이 비활성화됩니다.",
"popup.wlan-muting-disabled.title": "WLAN 음소거 해제됨",
"popup.wlan-muting-disabled.text": "WLAN을 사용할 수 없거나 비활성화되어 있습니다.\n이 컴퓨터에서 WLAN 음소거가 비활성화됩니다.",
"popup.quiet-hours-started.title": "무음 시간 시작됨",
"popup.quiet-hours-started.text": "이제 컴퓨터 오디오가 음소거됩니다.",
"popup.quiet-hours-ended.title": "무음 시간 종료됨",
"popup.quiet-hours-ended.text": "컴퓨터 오디오가 복원되었습니다.",
"popup.workstation-muted.title": "오디오 음소거되었습니다",
"popup.wlan-not-on-mute-list.text": "WLAN 네트워크 \"{}\"이 허용 목록에 없습니다.",
"popup.wlan-is-on-mute-list.text": "WLAN 네트워크 \"{}\"는 자동 음소거용으로 구성되어 있습니다.",
"popup.muting-workstation-after-delay.title": "지연 시간 후 컴퓨터 음소거",
"popup.muting-workstation-after-delay.text": "모든 장치가 음소거되었습니다",
"popup.volume-restored.title": "볼륨을 원래대로 복원합니다",
"popup.volume-restored.text": "모든 장치가 이전 설정으로 복원되었습니다",
"popup.muting-workstation.title": "컴퓨터 음소거",
"popup.muting-workstation.text": "모든 장치가 음소거되었습니다",
"popup.error.quiet-hours-start.title": "무음 시간 시작",
"popup.error.quiet-hours-start.text": "윈도우 타이머 시스템에 무음 시간 시작 등록을 실패했습니다",
"popup.error.quiet-hours-stop.title": "무음 시간 중지",
"popup.error.quiet-hours-stop.text": "윈도우 타이머 시스템에 무음 시간 중지 등록을 실패했습니다",
"traymenu.info": "정보",
"traymenu.mute-when": "다음 상황에서 음소거 실행...",
"traymenu.mute-on-lock": "... 컴퓨터가 잠김",
"traymenu.mute-on-screen-suspend": "... 화면이 꺼짐",
"traymenu.restore-volume": "다시 켜질 때 볼륨 복원",
"traymenu.mute-no-restore": "음소거 실행 (볼륨 복구 없음)...",
"traymenu.mute-on-shutdown": "... 컴퓨터 종료",
"traymenu.mute-on-sleep": "... 절전 모드",
"traymenu.mute-on-logout": "... 로그아웃",
"traymenu.mute-all-devices": "지금 모든 장치 음소거",
"traymenu.settings": "설정...",
"traymenu.exit": "종료",
"settings.title": "설정",
"settings.btn-save": "저장",
"settings.btn-cancel": "취소",
"settings.btn-add": "추가",
"settings.btn-edit": "편집",
"settings.btn-remove": "삭제",
"settings.btn-remove-all": "모두 삭제",
"settings.tab.general": "일반",
"settings.tab.mute": "음소거",
"settings.tab.quiet-hours": "무음 시간",
"settings.tab.bluetooth": "블루투스",
"settings.tab.wifi": "WLAN",
"settings.bluetooth.add-edit.add-title": "블루투스 장치 추가",
"settings.bluetooth.add-edit.edit-title": "블루투스 장치 편집",
"settings.bluetooth.add-edit.device-name-label": "블루투스 장치명:",
"settings.general.run-on-startup": "이 사용자가 로그인할 때 WinMute 실행",
"settings.general.check-for-updates-on-start": "시작 시 신규 업데이트 확인",
"settings.general.check-for-beta-updates-on-start": "신규 베타 버전도 확인",
"settings.general.updates-handled-externally": "옵션 비활성화: 업데이트는 외부에서 처리됩니다",
"settings.general.enable-logging": "로그를 파일에 저장",
"settings.general.btn-open-log-file": "로그 파일 열기...",
"settings.general.btn-open-log-window": "로그 표시...",
"settings.general.select-language-label": "언어",
"settings.general.help-translating": "번역에 참여하기",
"settings.bluetooth.add-edit.enter-device-name-placeholder": "블루투스 장치명을 입력해주세요",
"settings.bluetooth.description": "Bluetooth 음소거 기능은 오디오 클래스 블루투스 장치가 연결 해제될 경우 자동으로 오디오를 음소거하고, 장치가 다시 연결되면 오디오를 재활성화합니다.\n\n이 동작은 모든 블루투스 오디오 장치에 적용할 수도 있고, 특정 장치 집합에만 적용하도록 설정할 수도 있습니다.",
"settings.bluetooth.enable-muting": "블루투스 기반 음소거 활성화",
"settings.bluetooth.enable-muting-filter": "이 장치들에만 활성화:",
"settings.bluetooth.bluetooth-disabled-info": "참고: 이 기기에서는 블루투스를 사용할 수 없습니다.\n일부 옵션이 비활성화되었습니다.",
"settings.mute.general-title": "일반",
"settings.mute.show-mute-event-notifications": "음소거 이벤트 알림 표시",
"settings.mute.manage-endpoints-individually": "오디오 장치를 개별적으로 관리",
"settings.mute.btn-manage-endpoints": "장치 관리...",
"settings.mute.mute-with-restore.title": "음소거 및 음소거 해제 설정...",
"settings.mute.mute-with-restore.when-workstation-is-locked": "... 컴퓨터가 잠길때 음소거",
"settings.mute.mute-with-restore.when-screen-turns-off": "... 화면 꺼질 때 음소거",
"settings.mute.mute-with-restore.restore-volume": "다시 켜질때 음소거 해제",
"settings.mute.mute-with-restore.restore-volume-delay-label": "초 지연 후 음소거를 실행합니다.",
"settings.mute.mute-without-restore.title": "기타 음소거 설정...",
"settings.mute.mute-without-restore.when-computer-shuts-down": "... 컴퓨터 종료 시 음소거",
"settings.mute.mute-without-restore.when-computer-goes-to-sleep": "... 컴퓨터가 절전 모드/초절전모드에 진입할 때 음소거",
"settings.mute.mute-without-restore.when-user-logs-out": "... 유저 로그아웃 시 음소거",
"settings.mute.mute-without-restore.when-rdp-session-starts": "... 원격데스크탑(RDP) 세션에서 WinMute가 실행될 때 음소거",
"settings.quiet-hours.intro": "무음 시간 동안 WinMute는 컴퓨터 오디오 장치를 자동으로 음소거하고 종료 후 음소거를 해제합니다.",
"settings.quiet-hours.enable": "무음 시간 활성화",
"settings.quiet-hours.start-time-label": "시작 시간:",
"settings.quiet-hours.end-time-label": "종료 시간:",
"settings.quiet-hours.force-unmute": "강제 음소거 해제",
"settings.quiet-hours.force-unmute-description": "강제 음소거 해제 기능이 활성화되면, 무음 시간이 종료될 때 WinMute가 컴퓨터의 오디오 장치를 자동으로 음소거 해제하며, 무음 시간이 시작되기 전 이미 음소거 상태였는지는 고려하지 않습니다.",
"settings.quiet-hours.show-notifications": "무음 시간 알림 표시",
"settings.quiet-hours.error.invalid-time-range.title": "잘못된 시간 범위",
"settings.quiet-hours.error.invalid-time-range.text": "시작과 중지가 같은 시간이어서는 안 됩니다.",
"settings.quiet-hours.error.error-while-saving.title": "무음 시간 설정 저장 실패",
"settings.quiet-hours.error.error-while-saving.text": "설정을 저장하는 동안 문제가 발생했습니다",
"settings.wifi.intro": "\"WLAN 음소거\"는 연결된 무선 네트워크의 이름에 따라 컴퓨터를 음소거합니다.",
"settings.wifi.enable": "WLAN 기반 음소거 활성화",
"settings.wifi.mute-when-in-list": "목록에 있는 WLAN에 연결되면 음소거",
"settings.wifi.mute-when-not-in-list": "목록에 없는 WLAN에 연결되면 음소거",
"settings.wifi.wifi-disabled-info": "참고: 이 장치에서는 WLAN을 사용할 수 없습니다.\n일부 옵션이 비활성화되었습니다.",
"settings.wifi.add-edit.add-title": "WiFi 네트워크 추가",
"settings.wifi.add-edit.edit-title": "WiFi 네트워크 편집",
"settings.wifi.add-edit.ssid-name-label": "SSID/WiFi 이름:",
"settings.wifi.add-edit.enter-device-name-placeholder": "SSID/WiFi 이름을 입력해주세요",
"settings.mute.manage-endpoints.title": "오디오 장치 관리",
"settings.mute.manage-endpoints.list-behaviour.title": "일반",
"settings.mute.manage-endpoints.list-behaviour.mute-only-listed": "목록의 장치만 음소거",
"settings.mute.manage-endpoints.list-behaviour.mute-all-but-listed": "목록에 있는 장치만 전체 음소거",
"settings.mute.manage-endpoints.endpoints.title": "장치 목록",
"settings.mute.manage-endpoints.add-edit.add-title": "장치 추가",
"settings.mute.manage-endpoints.add-edit.edit-title": "장치 편집",
"settings.mute.manage-endpoints.add-edit.endpoint-name-placeholder": "장치명을 입력해주세요",
"settings.mute.manage-endpoints.add-edit.endpoint-name-label": "장치 이름:",
"about.title": "WinMute 정보",
"about.general.author-site-label": "제작자: www.lx-s.de",
"about.general.project-site-label": "프로젝트 사이트 && 코드",
"about.general.support-label": "지원",
"about.general.description": "WinMute는 Alexander Steinhoefer가 개인 시간에 개발한 오픈소스 도구입니다. 이 프로그램의 소스 코드와 최신 버전은 GitHub에서 확인할 수 있습니다. 코드 기여, 이슈 등록, 기능 제안 등 다양한 형태의 참여를 환영합니다. 이 작은 도구를 사용해 주셔서 감사합니다!",
"about.tab.winmute": "WinMute",
"about.tab.license": "라이선스",
"about.btn-close": "확인",
"log.title": "WinMute 로그 파일"
}
================================================
FILE: Translations/lang-lv.json
================================================
{
"meta.lang.name": "Latviešu (Latvian)",
"meta.lang.mode": "ltr",
"init.error.settings.title": "",
"init.error.settings.text": "",
"init.error.already-running.title": "",
"init.error.already-running.text": "",
"init.error.winmute.title": "",
"init.error.winmute.text": "",
"init.error.winmute.platform-support.title": "",
"init.error.winmute.platform-support.text": "",
"general.error.winapi.text": "",
"general.error.audio-service-shutdown.title": "",
"general.error.audio-service-shutdown.text": "",
"popup.update-available.title": "",
"popup.update-available.text": "",
"popup.update-available-beta.title": "",
"popup.update-available-beta.text": "",
"popup.error.update-check-failed.title": "",
"pupup.error.update-check-failed.text": "",
"popup.remote-session-detected.title": "",
"popup.remote-session-detected.text": "",
"popup.bluetooth-muting-disabled.title": "",
"popup.bluetooth-muting-disabled.text": "",
"popup.wlan-muting-disabled.title": "",
"popup.wlan-muting-disabled.text": "",
"popup.quiet-hours-started.title": "",
"popup.quiet-hours-started.text": "",
"popup.quiet-hours-ended.title": "",
"popup.quiet-hours-ended.text": "",
"popup.workstation-muted.title": "",
"popup.wlan-not-on-mute-list.text": "",
"popup.wlan-is-on-mute-list.text": "",
"popup.muting-workstation-after-delay.title": "",
"popup.muting-workstation-after-delay.text": "",
"popup.volume-restored.title": "",
"popup.volume-restored.text": "",
"popup.muting-workstation.title": "",
"popup.muting-workstation.text": "",
"popup.error.quiet-hours-start.title": "",
"popup.error.quiet-hours-start.text": "",
"popup.error.quiet-hours-stop.title": "",
"popup.error.quiet-hours-stop.text": "",
"traymenu.info": "Par",
"traymenu.mute-when": "",
"traymenu.mute-on-lock": "",
"traymenu.mute-on-screen-suspend": "",
"traymenu.restore-volume": "",
"traymenu.mute-no-restore": "",
"traymenu.mute-on-shutdown": "",
"traymenu.mute-on-sleep": "",
"traymenu.mute-on-logout": "",
"traymenu.mute-all-devices": "",
"traymenu.settings": "Iestatījumi…",
"traymenu.exit": "Iziet",
"settings.title": "Iestatījumi",
"settings.btn-save": "Saglabāt",
"settings.btn-cancel": "Atcelt",
"settings.btn-add": "Pievienot",
"settings.btn-edit": "Labot",
"settings.btn-remove": "Noņemt",
"settings.btn-remove-all": "",
"settings.tab.general": "Vispārīgie",
"settings.tab.mute": "",
"settings.tab.quiet-hours": "",
"settings.tab.bluetooth": "",
"settings.tab.wifi": "WLAN",
"settings.bluetooth.add-edit.add-title": "Pievienot Bluetooth ierīci",
"settings.bluetooth.add-edit.edit-title": "",
"settings.bluetooth.add-edit.device-name-label": "Bluetooth ierīces nosaukums:",
"settings.general.run-on-startup": "",
"settings.general.check-for-updates-on-start": "",
"settings.general.check-for-beta-updates-on-start": "",
"settings.general.updates-handled-externally": "",
"settings.general.enable-logging": "Saglabāt žurnālu failā",
"settings.general.btn-open-log-file": "",
"settings.general.select-language-label": "Valoda",
"settings.general.help-translating": "Palīdziet iztulkot",
"settings.bluetooth.add-edit.enter-device-name-placeholder": "",
"settings.bluetooth.description": "",
"settings.bluetooth.enable-muting": "",
"settings.bluetooth.enable-muting-filter": "",
"settings.bluetooth.bluetooth-disabled-info": "",
"settings.mute.general-title": "",
"settings.mute.show-mute-event-notifications": "",
"settings.mute.manage-endpoints-individually": "",
"settings.mute.btn-manage-endpoints": "",
"settings.mute.mute-with-restore.title": "",
"settings.mute.mute-with-restore.when-workstation-is-locked": "",
"settings.mute.mute-with-restore.when-screen-turns-off": "",
"settings.mute.mute-with-restore.restore-volume": "",
"settings.mute.mute-with-restore.restore-volume-delay-label": "",
"settings.mute.mute-without-restore.title": "",
"settings.mute.mute-without-restore.when-computer-shuts-down": "",
"settings.mute.mute-without-restore.when-computer-goes-to-sleep": "",
"settings.mute.mute-without-restore.when-user-logs-out": "",
"settings.mute.mute-without-restore.when-rdp-session-starts": "",
"settings.quiet-hours.intro": "",
"settings.quiet-hours.enable": "",
"settings.quiet-hours.start-time-label": "",
"settings.quiet-hours.end-time-label": "",
"settings.quiet-hours.force-unmute": "",
"settings.quiet-hours.force-unmute-description": "",
"settings.quiet-hours.show-notifications": "",
"settings.quiet-hours.error.invalid-time-range.title": "",
"settings.quiet-hours.error.invalid-time-range.text": "",
"settings.quiet-hours.error.error-while-saving.title": "",
"settings.quiet-hours.error.error-while-saving.text": "",
"settings.wifi.intro": "",
"settings.wifi.enable": "",
"settings.wifi.mute-when-in-list": "",
"settings.wifi.mute-when-not-in-list": "",
"settings.wifi.wifi-disabled-info": "",
"settings.wifi.add-edit.add-title": "",
"settings.wifi.add-edit.edit-title": "",
"settings.wifi.add-edit.ssid-name-label": "SSID/Wi-Fi nosaukums:",
"settings.wifi.add-edit.enter-device-name-placeholder": "",
"settings.mute.manage-endpoints.title": "",
"settings.mute.manage-endpoints.list-behaviour.title": "",
"settings.mute.manage-endpoints.list-behaviour.mute-only-listed": "",
"settings.mute.manage-endpoints.list-behaviour.mute-all-but-listed": "",
"settings.mute.manage-endpoints.endpoints.title": "Audio ierīces",
"settings.mute.manage-endpoints.add-edit.add-title": "Pievienot ierīci",
"settings.mute.manage-endpoints.add-edit.edit-title": "",
"settings.mute.manage-endpoints.add-edit.endpoint-name-placeholder": "",
"settings.mute.manage-endpoints.add-edit.endpoint-name-label": "Audio ierīces nosaukums:",
"about.title": "Par WinMute",
"about.general.author-site-label": "Izstrādātājs: www.lx-s.de",
"about.general.project-site-label": "",
"about.general.support-label": "",
"about.general.description": "",
"about.tab.winmute": "WinMute",
"about.tab.license": "Licence",
"about.btn-close": "Labi"
}
================================================
FILE: Translations/lang-nl.json
================================================
{
"meta.lang.name": "Nederlands (Dutch)",
"meta.lang.mode": "ltr",
"init.error.settings.title": "De instellingen kunnen niet worden geladen",
"init.error.settings.text": "Er is een kritieke fout opgetreden tijdens het starten",
"init.error.already-running.title": "WinMute is al actief",
"init.error.already-running.text": "Zoek naar het WinMute-pictogram in het systeemvak van de Windows-taakbalk.",
"init.error.winmute.title": "WinMute kan niet worden gestart.",
"init.error.winmute.text": "Er is een kritieke fout opgetreden waardoor WinMute dient te worden afgesloten.",
"init.error.winmute.platform-support.title": "Windows Vista of nieuwer vereist",
"init.error.winmute.platform-support.text": "Als u Windows XP-ondersteuning wilt, download dan WinMute 1.4.2 of ouder.",
"general.error.winapi.text": "{} mislukt met foutmelding {}: {}",
"general.error.audio-service-shutdown.title": "De audiodienst is afgesloten.",
"general.error.audio-service-shutdown.text": "WinMute kan niet worden hersteld.\nHerstart het programma.",
"popup.remote-session-detected.title": "Externe sessie aangetroffen",
"popup.remote-session-detected.text": "Alle audio-apparaten zijn gedempt",
"popup.bluetooth-muting-disabled.title": "Bluetoothdemping is uitgeschakeld",
"popup.bluetooth-muting-disabled.text": "Bluetooth is uitgeschakeld of niet beschikbaar.\nBluetoothdemping wordt daarom uitgeschakeld.",
"popup.wlan-muting-disabled.title": "WLAN-demping is uitgeschakeld",
"popup.wlan-muting-disabled.text": "WLAN is niet beschikbaar of uitgeschakeld.\nWLAN muting wordt uitgeschakeld op deze computer.",
"popup.quiet-hours-started.title": "Stille uren gestart",
"popup.quiet-hours-started.text": "Computergeluid wordt nu gedempt.",
"popup.quiet-hours-ended.title": "Stille uren beëindigd",
"popup.quiet-hours-ended.text": "Computer audio is hersteld.",
"popup.workstation-muted.title": "Audio gedempt",
"popup.wlan-not-on-mute-list.text": "WLAN network \"{}\" staat niet in de lijst van toegestane.",
"popup.wlan-is-on-mute-list.text": "WLAN network \"{}\" is geconfigureerd voor AutoMute.",
"popup.muting-workstation-after-delay.title": "Computer stil na wachttijd",
"popup.muting-workstation-after-delay.text": "Alle apparaten werden gedempt",
"popup.volume-restored.title": "Volume hersteld",
"popup.volume-restored.text": "Alle apparaten werden teruggezet naar hun vorige configuratie",
"popup.muting-workstation.title": "Computer dempen",
"popup.muting-workstation.text": "Alle apparaten werden gedempt",
"popup.error.quiet-hours-start.title": "Stille uren start",
"popup.error.quiet-hours-start.text": "Registratie van stille uren starttijd met windows timer systeem mislukt",
"popup.error.quiet-hours-stop.title": "Stille uren stop",
"popup.error.quiet-hours-stop.text": "Registratie van stille uren eindtijd met windows timer systeem mislukt",
"traymenu.info": "Over",
"traymenu.mute-when": "Dempen wanneer…",
"traymenu.mute-on-lock": "… computer vergrendeld is",
"traymenu.mute-on-screen-suspend": "… scherm uitschakelt",
"traymenu.restore-volume": "Nadien volume herstellen",
"traymenu.mute-no-restore": "Dempen bij (geen volume herstellen)…",
"traymenu.mute-on-shutdown": "… uitschakelen",
"traymenu.mute-on-sleep": "… slaapstand",
"traymenu.mute-on-logout": "… afmelden",
"traymenu.mute-all-devices": "Nu alle apparaten dempen",
"traymenu.settings": "Instellingen…",
"traymenu.exit": "Verlaat",
"settings.title": "Instellingen",
"settings.btn-save": "Opslaan",
"settings.btn-cancel": "Annuleren",
"settings.btn-add": "Toevoegen",
"settings.btn-edit": "Wijzigen",
"settings.btn-remove": "Verwijderen",
"settings.btn-remove-all": "Verwijder alles",
"settings.tab.general": "Algemeen",
"settings.tab.mute": "Dempen",
"settings.tab.quiet-hours": "Stille uren",
"settings.tab.bluetooth": "Bluetooth",
"settings.tab.wifi": "WLAN",
"settings.bluetooth.add-edit.add-title": "Bluetoothapparaat toevoegen",
"settings.bluetooth.add-edit.edit-title": "Bluetoothapparaat wijzigen",
"settings.bluetooth.add-edit.device-name-label": "Naam Bluetoothapparaat:",
"settings.general.run-on-startup": "WinMute starten wanneer deze gebruiker aanmeldt",
"settings.general.enable-logging": "Logboek opslaan in bestand",
"settings.general.btn-open-log-file": "Logbestand openen…",
"settings.general.select-language-label": "Taal",
"settings.bluetooth.add-edit.enter-device-name-placeholder": "Geef de naam van een Bluetoothapparaat op",
"settings.bluetooth.description": "",
"settings.bluetooth.enable-muting": "",
"settings.bluetooth.enable-muting-filter": "",
"settings.bluetooth.bluetooth-disabled-info": "",
"settings.mute.general-title": "",
"settings.mute.show-mute-event-notifications": "",
"settings.mute.manage-endpoints-individually": "",
"settings.mute.btn-manage-endpoints": "",
"settings.mute.mute-with-restore.title": "",
"settings.mute.mute-with-restore.when-workstation-is-locked": "",
"settings.mute.mute-with-restore.when-screen-turns-off": "",
"settings.mute.mute-with-restore.restore-volume": "",
"settings.mute.mute-with-restore.restore-volume-delay-label": "",
"settings.mute.mute-without-restore.title": "",
"settings.mute.mute-without-restore.when-computer-shuts-down": "",
"settings.mute.mute-without-restore.when-computer-goes-to-sleep": "",
"settings.mute.mute-without-restore.when-user-logs-out": "",
"settings.mute.mute-without-restore.when-rdp-session-starts": "",
"settings.quiet-hours.intro": "",
"settings.quiet-hours.enable": "",
"settings.quiet-hours.start-time-label": "",
"settings.quiet-hours.end-time-label": "",
"settings.quiet-hours.force-unmute": "",
"settings.quiet-hours.force-unmute-description": "",
"settings.quiet-hours.show-notifications": "",
"settings.quiet-hours.error.invalid-time-range.title": "",
"settings.quiet-hours.error.invalid-time-range.text": "",
"settings.quiet-hours.error.error-while-saving.title": "",
"settings.quiet-hours.error.error-while-saving.text": "",
"settings.wifi.intro": "",
"settings.wifi.enable": "",
"settings.wifi.mute-when-not-in-list": "",
"settings.wifi.wifi-disabled-info": "",
"settings.wifi.add-edit.add-title": "",
"settings.wifi.add-edit.edit-title": "",
"settings.wifi.add-edit.ssid-name-label": "",
"settings.wifi.add-edit.enter-device-name-placeholder": "",
"settings.mute.manage-endpoints.title": "",
"settings.mute.manage-endpoints.list-behaviour.title": "",
"settings.mute.manage-endpoints.list-behaviour.mute-only-listed": "",
"settings.mute.manage-endpoints.list-behaviour.mute-all-but-listed": "",
"settings.mute.manage-endpoints.endpoints.title": "",
"settings.mute.manage-endpoints.add-edit.add-title": "",
"settings.mute.manage-endpoints.add-edit.edit-title": "",
"settings.mute.manage-endpoints.add-edit.endpoint-name-placeholder": "",
"settings.mute.manage-endpoints.add-edit.endpoint-name-label": "",
"about.title": "",
"about.general.author-site-label": "",
"about.general.project-site-label": "",
"about.general.support-label": "",
"about.general.description": "",
"about.tab.winmute": "",
"about.tab.license": "",
"about.btn-close": "",
"settings.general.help-translating": "Help met vertalen",
"settings.general.check-for-updates-on-start": "Nieuwe updates zoeken bij opstarten",
"popup.update-available.title": "WinMute {} is beschikbaar!",
"popup.update-available-beta.title": "WinMute Beta {} is beschikbaar!",
"popup.update-available-beta.text": "Uw huidige versie is {}\nKlik op dit bericht om de beta-downloadpagina te openen.",
"popup.error.update-check-failed.title": "Update check mislukt.",
"pupup.error.update-check-failed.text": "Kon niet controleren of er een nieuwe versie is.\nKijk de logs na of schakel logging in voor meer details.",
"settings.general.check-for-beta-updates-on-start": "Ook zoeken naar betaversies",
"settings.general.updates-handled-externally": "Opties uitgeschakeld: updates worden extern afgehandeld",
"popup.update-available.text": "De geïnstalleerde versie is {}.\nKlik op dit bericht om de downloadpagina te openen.",
"log.title": "WinMute Notulen"
}
================================================
FILE: Translations/lang-ro.json
================================================
{
"meta.lang.name": "Română (Romanian)",
"meta.lang.mode": "ltr",
"init.error.settings.title": "",
"init.error.settings.text": "",
"init.error.already-running.title": "",
"init.error.already-running.text": "",
"init.error.winmute.title": "",
"init.error.winmute.text": "",
"init.error.winmute.platform-support.title": "",
"init.error.winmute.platform-support.text": "",
"general.error.winapi.text": "",
"general.error.audio-service-shutdown.title": "",
"general.error.audio-service-shutdown.text": "",
"popup.update-available.title": "",
"popup.update-available.text": "",
"popup.update-available-beta.title": "",
"popup.update-available-beta.text": "",
"popup.error.update-check-failed.title": "",
"pupup.error.update-check-failed.text": "",
"popup.remote-session-detected.title": "",
"popup.remote-session-detected.text": "",
"popup.bluetooth-muting-disabled.title": "",
"popup.bluetooth-muting-disabled.text": "",
"popup.wlan-muting-disabled.title": "",
"popup.wlan-muting-disabled.text": "",
"popup.quiet-hours-started.title": "",
"popup.quiet-hours-started.text": "",
"popup.quiet-hours-ended.title": "",
"popup.quiet-hours-ended.text": "",
"popup.workstation-muted.title": "",
"popup.wlan-not-on-mute-list.text": "",
"popup.wlan-is-on-mute-list.text": "",
"popup.muting-workstation-after-delay.title": "",
"popup.muting-workstation-after-delay.text": "",
"popup.volume-restored.title": "",
"popup.volume-restored.text": "",
"popup.muting-workstation.title": "",
"popup.muting-workstation.text": "",
"popup.error.quiet-hours-start.title": "",
"popup.error.quiet-hours-start.text": "",
"popup.error.quiet-hours-stop.title": "",
"popup.error.quiet-hours-stop.text": "",
"traymenu.info": "",
"traymenu.mute-when": "",
"traymenu.mute-on-lock": "",
"traymenu.mute-on-screen-suspend": "",
"traymenu.restore-volume": "",
"traymenu.mute-no-restore": "",
"traymenu.mute-on-shutdown": "",
"traymenu.mute-on-sleep": "",
"traymenu.mute-on-logout": "",
"traymenu.mute-all-devices": "",
"traymenu.settings": "",
"traymenu.exit": "",
"settings.title": "",
"settings.btn-save": "",
"settings.btn-cancel": "",
"settings.btn-add": "",
"settings.btn-edit": "",
"settings.btn-remove": "",
"settings.btn-remove-all": "",
"settings.tab.general": "",
"settings.tab.mute": "",
"settings.tab.quiet-hours": "",
"settings.tab.bluetooth": "",
"settings.tab.wifi": "",
"settings.bluetooth.add-edit.add-title": "",
"settings.bluetooth.add-edit.edit-title": "",
"settings.bluetooth.add-edit.device-name-label": "",
"settings.general.run-on-startup": "",
"settings.general.check-for-updates-on-start": "",
"settings.general.check-for-beta-updates-on-start": "",
"settings.general.updates-handled-externally": "",
"settings.general.enable-logging": "",
"settings.general.btn-open-log-file": "",
"settings.general.select-language-label": "",
"settings.general.help-translating": "",
"settings.bluetooth.add-edit.enter-device-name-placeholder": "",
"settings.bluetooth.description": "",
"settings.bluetooth.enable-muting": "",
"settings.bluetooth.enable-muting-filter": "",
"settings.bluetooth.bluetooth-disabled-info": "",
"settings.mute.general-title": "",
"settings.mute.show-mute-event-notifications": "",
"settings.mute.manage-endpoints-individually": "",
"settings.mute.btn-manage-endpoints": "",
"settings.mute.mute-with-restore.title": "",
"settings.mute.mute-with-restore.when-workstation-is-locked": "",
"settings.mute.mute-with-restore.when-screen-turns-off": "",
"settings.mute.mute-with-restore.restore-volume": "",
"settings.mute.mute-with-restore.restore-volume-delay-label": "",
"settings.mute.mute-without-restore.title": "",
"settings.mute.mute-without-restore.when-computer-shuts-down": "",
"settings.mute.mute-without-restore.when-computer-goes-to-sleep": "",
"settings.mute.mute-without-restore.when-user-logs-out": "",
"settings.mute.mute-without-restore.when-rdp-session-starts": "",
"settings.quiet-hours.intro": "",
"settings.quiet-hours.enable": "",
"settings.quiet-hours.start-time-label": "",
"settings.quiet-hours.end-time-label": "",
"settings.quiet-hours.force-unmute": "",
"settings.quiet-hours.force-unmute-description": "",
"settings.quiet-hours.show-notifications": "",
"settings.quiet-hours.error.invalid-time-range.title": "",
"settings.quiet-hours.error.invalid-time-range.text": "",
"settings.quiet-hours.error.error-while-saving.title": "",
"settings.quiet-hours.error.error-while-saving.text": "",
"settings.wifi.intro": "",
"settings.wifi.enable": "",
"settings.wifi.mute-when-in-list": "",
"settings.wifi.mute-when-not-in-list": "",
"settings.wifi.wifi-disabled-info": "",
"settings.wifi.add-edit.add-title": "",
"settings.wifi.add-edit.edit-title": "",
"settings.wifi.add-edit.ssid-name-label": "",
"settings.wifi.add-edit.enter-device-name-placeholder": "",
"settings.mute.manage-endpoints.title": "",
"settings.mute.manage-endpoints.list-behaviour.title": "",
"settings.mute.manage-endpoints.list-behaviour.mute-only-listed": "",
"settings.mute.manage-endpoints.list-behaviour.mute-all-but-listed": "",
"settings.mute.manage-endpoints.endpoints.title": "",
"settings.mute.manage-endpoints.add-edit.add-title": "",
"settings.mute.manage-endpoints.add-edit.edit-title": "",
"settings.mute.manage-endpoints.add-edit.endpoint-name-placeholder": "",
"settings.mute.manage-endpoints.add-edit.endpoint-name-label": "",
"about.title": "",
"about.general.author-site-label": "",
"about.general.project-site-label": "",
"about.general.support-label": "",
"about.general.description": "",
"about.tab.winmute": "",
"about.tab.license": "",
"about.btn-close": ""
}
================================================
FILE: Translations/lang-ru.json
================================================
{
"meta.lang.name": "Руский (Russian)",
"meta.lang.mode": "ltr",
"init.error.settings.title": "Не удалось инициализировать настройки",
"init.error.settings.text": "Критическая ошибка при инициализации WinMute",
"init.error.already-running.title": "WinMute уже запущен",
"init.error.already-running.text": "Поищите значок приложения WinMute в области уведомлений панели задач Windows.",
"init.error.winmute.title": "Не удалось запустить WinMute.",
"init.error.winmute.text": "В WinMute произошла критическая ошибка при инициализации, и программу нужно закрыть.",
"init.error.winmute.platform-support.title": "Поддерживаются только Windows Vista и более новые версии",
"init.error.winmute.platform-support.text": "Если требуется поддержка Windows XP, загрузите WinMute версии 1.4.2 или ниже.",
"general.error.winapi.text": "{} завершился с ошибкой {}: {}",
"general.error.audio-service-shutdown.title": "Аудиослужба была выключена.",
"general.error.audio-service-shutdown.text": "WinMute не может восстановиться из этого состояния. Попробуйте перезапустить программу.",
"popup.update-available.title": "WinMute {} доступен!",
"popup.update-available.text": "Установленная версия — {}. Щёлкните на это сообщение, чтобы открыть страницу скачивания.",
"popup.update-available-beta.title": "WinMute Beta {} доступен!",
"popup.update-available-beta.text": "Ваша текущая версия — {}. Щёлкните это сообщение, чтобы открыть страницу скачивания бета-версии.",
"popup.error.update-check-failed.title": "Проверка обновлений не удалась.",
"pupup.error.update-check-failed.text": "Не удалось проверить наличие новой версии. Проверьте/включите ведение журнала для получения дополнительных сведений.",
"popup.remote-session-detected.title": "Обнаружен отдалённый сеанс",
"popup.remote-session-detected.text": "Все аудиоустройства отключены",
"popup.bluetooth-muting-disabled.title": "Выключение звука по Bluetooth отключено",
"popup.bluetooth-muting-disabled.text": "Bluetooth недоступен или отключён. Выключение звука по Bluetooth будет отключено на этом компьютере.",
"popup.wlan-muting-disabled.title": "Выключение звука по WLAN отключено",
"popup.wlan-muting-disabled.text": "Сеть WLAN недоступна или отключена. Выключение звука по WLAN будет отключено на этом компьютере.",
"popup.quiet-hours-started.title": "Начался режим тишины",
"popup.quiet-hours-started.text": "Звук компьютера будет выключен.",
"popup.quiet-hours-ended.title": "Завершение режима тишины",
"popup.quiet-hours-ended.text": "Звук компьютера восстановлен.",
"popup.workstation-muted.title": "Звук выключен",
"popup.wlan-not-on-mute-list.text": "Сеть WLAN \"{}\" не находится в списке разрешённых.",
"popup.wlan-is-on-mute-list.text": "Сеть WLAN \"{}\" настроена для AutoMute.",
"popup.muting-workstation-after-delay.title": "Выключение звука компьютера после задержки",
"popup.muting-workstation-after-delay.text": "Выключение звука всех устройств",
"popup.volume-restored.title": "Громкость восстановлена",
"popup.volume-restored.text": "Все устройства восстановлены до предыдущей конфигурации",
"popup.muting-workstation.title": "Выключение звука компьютера",
"popup.muting-workstation.text": "Выключение звука всех устройств",
"popup.error.quiet-hours-start.title": "Начало режима тишины",
"popup.error.quiet-hours-start.text": "Не удалось зарегистрировать начало режима тишины в системе таймера Windows",
"popup.error.quiet-hours-stop.title": "Остановка режима тишины",
"popup.error.quiet-hours-stop.text": "Не удалось зарегистрировать окончание режима тишины в системе таймера Windows",
"traymenu.info": "О программе",
"traymenu.mute-when": "Выключить звук, когда...",
"traymenu.mute-on-lock": "... компьютер заблокирован",
"traymenu.mute-on-screen-suspend": "... экран выключен",
"traymenu.restore-volume": "Восстановить громкость после",
"traymenu.mute-no-restore": "Выключить звук (без восстановления громкости)...",
"traymenu.mute-on-shutdown": "... выключение",
"traymenu.mute-on-sleep": "... спящий режим",
"traymenu.mute-on-logout": "... выход из системы",
"traymenu.mute-all-devices": "Выключить звук на всех устройствах сейчас",
"traymenu.settings": "Настройки...",
"traymenu.exit": "Выйти",
"settings.title": "Настройки",
"settings.btn-save": "Сохранить",
"settings.btn-cancel": "Отмена",
"settings.btn-add": "Добавить",
"settings.btn-edit": "Изменить",
"settings.btn-remove": "Удалить",
"settings.btn-remove-all": "Удалить все",
"settings.tab.general": "Основные",
"settings.tab.mute": "Выключить звук",
"settings.tab.quiet-hours": "Тихие часы",
"settings.tab.bluetooth": "Bluetooth",
"settings.tab.wifi": "WLAN",
"settings.bluetooth.add-edit.add-title": "Добавить устройство Bluetooth",
"settings.bluetooth.add-edit.edit-title": "Изменить устройство Bluetooth",
"settings.bluetooth.add-edit.device-name-label": "Название устройства Bluetooth:",
"settings.general.run-on-startup": "Запускать WinMute при входе этого пользователя в систему",
"settings.general.check-for-updates-on-start": "Проверять наличие новых обновлений при запуске",
"settings.general.check-for-beta-updates-on-start": "Также проверять наличие новых бета-версий",
"settings.general.updates-handled-externally": "Параметры отключены: обновления обрабатываются извне",
"settings.general.enable-logging": "Сохранить журнал в файл",
"settings.general.btn-open-log-file": "Открыть файл журнала...",
"settings.general.select-language-label": "Язык",
"settings.general.help-translating": "Помочь с переводом",
"settings.bluetooth.add-edit.enter-device-name-placeholder": "Введите название устройства Bluetooth",
"settings.bluetooth.description": "«Выключение звука по Bluetooth» позволяет выключить звук, если звуковое устройство Bluetooth отключено, и снова включить его, если устройство повторно подключено к компьютеру. Это поведение можно включить для всех аудиоустройств Bluetooth или только для определённого набора.",
"settings.bluetooth.enable-muting": "Включить выключение звука на основе Bluetooth",
"settings.bluetooth.enable-muting-filter": "Включить только для этих устройств:",
"settings.bluetooth.bluetooth-disabled-info": "Примечание: Bluetooth недоступен на этом устройстве.\nНекоторые параметры отсутствуют.",
"settings.mute.general-title": "Общие",
"settings.mute.show-mute-event-notifications": "Показывать уведомления о событиях отключения звука",
"settings.mute.manage-endpoints-individually": "Управление аудиоустройствами по отдельности",
"settings.mute.btn-manage-endpoints": "Управление устройствами...",
"settings.mute.mute-with-restore.title": "Выключение звука с восстановлением громкости, когда...",
"settings.mute.mute-with-restore.when-workstation-is-locked": "... компьютер заблокирован",
"settings.mute.mute-with-restore.when-screen-turns-off": "... экран выключается",
"settings.mute.mute-with-restore.restore-volume": "Восстановление громкости через",
"settings.mute.mute-with-restore.restore-volume-delay-label": "секундная задержка перед отключением звука.",
"settings.mute.mute-without-restore.title": "Выключение звука без восстановления громкости, когда...",
"settings.mute.mute-without-restore.when-computer-shuts-down": "... компьютер выключается",
"settings.mute.mute-without-restore.when-computer-goes-to-sleep": "... компьютер переходит в спящий режим или гибернации",
"settings.mute.mute-without-restore.when-user-logs-out": "... пользователь выходит из системы",
"settings.mute.mute-without-restore.when-rdp-session-starts": "... WinMute запускается в сеансе RDP",
"settings.quiet-hours.intro": "Во время тихих часов WinMute автоматически выключает звук на аудиоустройствах компьютера и включает их после этого.",
"settings.quiet-hours.enable": "Включить тихие часы",
"settings.quiet-hours.start-time-label": "Время начала:",
"settings.quiet-hours.end-time-label": "Время окончания:",
"settings.quiet-hours.force-unmute": "Принудительное отключение звука",
"settings.quiet-hours.force-unmute-description": "Если включено принудительное выключение звука, WinMute включит звук на аудиоустройствах компьютера по окончании тихих часов и не будет учитывать, были ли они уже выключены до начала тихих часов.",
"settings.quiet-hours.show-notifications": "Показывать уведомления о тихих часах",
"settings.quiet-hours.error.invalid-time-range.title": "Недопустимый временной диапазон",
"settings.quiet-hours.error.invalid-time-range.text": "Начало и остановка не должны совпадать по времени.",
"settings.quiet-hours.error.error-while-saving.title": "Не удалось сохранить настройки тихих часов",
"settings.quiet-hours.error.error-while-saving.text": "Что-то пошло не так при сохранении настроек",
"settings.wifi.intro": "«WLAN Mute» выключает звук на компьютере в зависимости от названия подключённой беспроводной сети.",
"settings.wifi.enable": "Включить выключение звука на основе WLAN",
"settings.wifi.mute-when-in-list": "Выключить звук, если подключённая сеть WLAN есть в списке",
"settings.wifi.mute-when-not-in-list": "Выключить звук, если подключённая сеть WLAN отсутствует в списке",
"settings.wifi.wifi-disabled-info": "Примечание: WLAN недоступна на этом устройстве.\nНекоторые параметры отсутствуют.",
"settings.wifi.add-edit.add-title": "Добавить сеть WiFi",
"settings.wifi.add-edit.edit-title": "Изменить сеть WiFi",
"settings.wifi.add-edit.ssid-name-label": "Название SSID/WiFi:",
"settings.wifi.add-edit.enter-device-name-placeholder": "Введите название SSID/WiFi",
"settings.mute.manage-endpoints.title": "Управление аудиоустройствами",
"settings.mute.manage-endpoints.list-behaviour.title": "Общие",
"settings.mute.manage-endpoints.list-behaviour.mute-only-listed": "Выключить звук только для перечисленных устройств",
"settings.mute.manage-endpoints.list-behaviour.mute-all-but-listed": "Выключить звук для всех, кроме перечисленных устройств",
"settings.mute.manage-endpoints.endpoints.title": "Устройства",
"settings.mute.manage-endpoints.add-edit.add-title": "Добавить устройство",
"settings.mute.manage-endpoints.add-edit.edit-title": "Изменить устройство",
"settings.mute.manage-endpoints.add-edit.endpoint-name-placeholder": "Введите название устройства",
"settings.mute.manage-endpoints.add-edit.endpoint-name-label": "Название устройства:",
"about.title": "О WinMute",
"about.general.author-site-label": "Автор: www.lx-s.de",
"about.general.project-site-label": "Сайт проекта и код",
"about.general.support-label": "Поддержка",
"about.general.description": "WinMute разрабатывается Александром Штайнхёфером (Alexander Steinhoefer) в свободное время. Код, а также новые версии этого инструмента можно найти на GitHub. Участие в виде кода, отчётов об ошибках или предложений очень приветствуется. Спасибо за использование этого маленького инструмента!",
"about.tab.winmute": "WinMute",
"about.tab.license": "Лицензия",
"about.btn-close": "Хорошо"
}
================================================
FILE: Translations/lang-zh_Hans.json
================================================
{
"meta.lang.name": "简体中文[囍]",
"meta.lang.mode": "ltr",
"init.error.settings.title": "未能初始化设置",
"init.error.settings.text": "初始化WinMute时出现严重错误",
"init.error.already-running.title": "WinMute已在运行",
"init.error.already-running.text": "请在Windows任务栏通知区域中查找winmutes应用程序图标.",
"init.error.winmute.title": "无法启动WinMute.",
"init.error.winmute.text": "WinMute在初始化时遇到严重错误,自动关闭.",
"init.error.winmute.platform-support.title": "仅支持Windows Vista及更新版本",
"init.error.winmute.platform-support.text": "如果需要Windows XP支持,请下载WinMute 1.4.2或更低版本.",
"general.error.winapi.text": "{} 失败,出现错误 {}: {}",
"general.error.audio-service-shutdown.title": "音频服务已关闭.",
"general.error.audio-service-shutdown.text": "WinMute无法从这种情况下恢复.\n请尝试重新启动程序.",
"popup.update-available.title": "WinMute {} 可用!",
"popup.update-available.text": "安装的版本为{}.\n点击本消息打开下载页面.",
"popup.update-available-beta.title": "WinMute Beta {} 可用!",
"popup.update-available-beta.text": "您的当前版本是 {}.\n单击本消息打开测试版下载页面.",
"popup.error.update-check-failed.title": "更新检查失败.",
"pupup.error.update-check-failed.text": "无法检查新版本.\n请检查/启用日志记录以了解更多详细信息.",
"popup.remote-session-detected.title": "检测到远程会话",
"popup.remote-session-detected.text": "所有音频设备都已静音",
"popup.bluetooth-muting-disabled.title": "蓝牙静音已禁用",
"popup.bluetooth-muting-disabled.text": "蓝牙不可用或已禁用.\n将在此电脑上禁用蓝牙静音.",
"popup.wlan-muting-disabled.title": "WLAN静音已禁用",
"popup.wlan-muting-disabled.text": "WLAN不可用或已禁用.\n将在此电脑上禁用WLAN静音.",
"popup.quiet-hours-started.title": "静音计划任务开启",
"popup.quiet-hours-started.text": "电脑音频立即静音.",
"popup.quiet-hours-ended.title": "静音计划任务结束",
"popup.quiet-hours-ended.text": "电脑声音已恢复.",
"popup.workstation-muted.title": "静音",
"popup.wlan-not-on-mute-list.text": "WLAN网络 \"{}\" 不在允许的列表中.",
"popup.wlan-is-on-mute-list.text": "WLAN 网格 \"{}\" 配置为“自动静音”.",
"popup.muting-workstation-after-delay.title": "延迟后使电脑静音",
"popup.muting-workstation-after-delay.text": "所有设备都已静音",
"popup.volume-restored.title": "音量恢复",
"popup.volume-restored.text": "所有设备都已恢复到以前的配置",
"popup.muting-workstation.title": "电脑静音",
"popup.muting-workstation.text": "所有设备都已静音",
"popup.error.quiet-hours-start.title": "静音计划任务开启",
"popup.error.quiet-hours-start.text": "无法使用Windows计时器系统注册静音时间启动",
"popup.error.quiet-hours-stop.title": "静音计划任务停止",
"popup.error.quiet-hours-stop.text": "无法使用Windows计时器系统注册静音时间停止",
"traymenu.info": "=关于=",
"traymenu.mute-when": "触发静音条件...",
"traymenu.mute-on-lock": "系统锁定后 静音",
"traymenu.mute-on-screen-suspend": "显示器关闭后 静音",
"traymenu.restore-volume": "自动恢复音量",
"traymenu.mute-no-restore": "静音后(执行)...",
"traymenu.mute-on-shutdown": "=关机=",
"traymenu.mute-on-sleep": "=休眠=",
"traymenu.mute-on-logout": "=注销=",
"traymenu.mute-all-devices": "立即将所有设备静音",
"traymenu.settings": "=设置=",
"traymenu.exit": "=退出=",
"settings.title": "=设置=",
"settings.btn-save": "保存",
"settings.btn-cancel": "取消",
"settings.btn-add": "增加",
"settings.btn-edit": "编辑",
"settings.btn-remove": "清除",
"settings.btn-remove-all": "全清",
"settings.tab.general": "通用",
"settings.tab.mute": "静音前后",
"settings.tab.quiet-hours": "计划任务",
"settings.tab.bluetooth": "蓝牙控制",
"settings.tab.wifi": "WLAN控制",
"settings.bluetooth.add-edit.add-title": "添加蓝牙设备",
"settings.bluetooth.add-edit.edit-title": "编辑蓝牙设备",
"settings.bluetooth.add-edit.device-name-label": "蓝牙设备名称:",
"settings.general.run-on-startup": "开机启动WinMute",
"settings.general.check-for-updates-on-start": "启动时检查新更新",
"settings.general.check-for-beta-updates-on-start": "同时检查新的测试版",
"settings.general.updates-handled-externally": "禁用选项:外部处理更新",
"settings.general.enable-logging": "将日志保存到文件",
"settings.general.btn-open-log-file": "打开日志记录...",
"settings.general.select-language-label": "语言:",
"settings.general.help-translating": "帮助翻译",
"settings.bluetooth.add-edit.enter-device-name-placeholder": "请输入蓝牙设备名称",
"settings.bluetooth.description": "“蓝牙静音”允许在音频类蓝牙设备断开连接时禁用音频,并在设备重新连接到电脑时重新启用音频.\n\n此行为可以为所有蓝牙音频设备启用,也可以仅为特定的一组启用.",
"settings.bluetooth.enable-muting": "开启蓝牙静音功能",
"settings.bluetooth.enable-muting-filter": "仅对以下设备启用:",
"settings.bluetooth.bluetooth-disabled-info": "注意:此设备不支持蓝牙.\n某些选项已被禁用.",
"settings.mute.general-title": "通用",
"settings.mute.show-mute-event-notifications": "显示静音事件通知",
"settings.mute.manage-endpoints-individually": "单独管理音频设备",
"settings.mute.btn-manage-endpoints": "设备管理...",
"settings.mute.mute-with-restore.title": "启动静音条件...",
"settings.mute.mute-with-restore.when-workstation-is-locked": "系统锁定后启动 静音",
"settings.mute.mute-with-restore.when-screen-turns-off": "显示器关闭时启动 静音",
"settings.mute.mute-with-restore.restore-volume": "自动恢复音量",
"settings.mute.mute-with-restore.restore-volume-delay-label": "秒后静音.(\"0\"值为立即静音)",
"settings.mute.mute-without-restore.title": "静音后执行下列操作...",
"settings.mute.mute-without-restore.when-computer-shuts-down": "=关机=",
"settings.mute.mute-without-restore.when-computer-goes-to-sleep": "=休眠=",
"settings.mute.mute-without-restore.when-user-logs-out": "=注销=",
"settings.mute.mute-without-restore.when-rdp-session-starts": "WinMute在远程桌面会话 (RDP) 中启动",
"settings.quiet-hours.intro": "在指定时间内,WinMute自动进入静音,然后自动恢复.",
"settings.quiet-hours.enable": "启用静音计划任务",
"settings.quiet-hours.start-time-label": "开始时间:",
"settings.quiet-hours.end-time-label": "结束时间:",
"settings.quiet-hours.force-unmute": "强制取消静音",
"settings.quiet-hours.force-unmute-description": "如果启动强制取消静音,WinMute将在静单时间结束时取消电脑音频设备的静音,而不考虑它们在静单时间开始前是否已经静音.",
"settings.quiet-hours.show-notifications": "显示静音时间通知",
"settings.quiet-hours.error.invalid-time-range.title": "无效的时间范围",
"settings.quiet-hours.error.invalid-time-range.text": "启动和停止时间不能相同.",
"settings.quiet-hours.error.error-while-saving.title": "无法保存安静时间设置",
"settings.quiet-hours.error.error-while-saving.text": "保存设置时出错",
"settings.wifi.intro": "“WLAN静音”根据连接的无线网络的名称使电脑静音。",
"settings.wifi.enable": "启用基于WLAN的静音",
"settings.wifi.mute-when-in-list": "如果已连接的WLAN在列表中,则静音",
"settings.wifi.mute-when-not-in-list": "如果已连接的WLAN不在列表中,则静音",
"settings.wifi.wifi-disabled-info": "注意:WLAN在此设备上不可用.\n某些选项已被禁用.",
"settings.wifi.add-edit.add-title": "添加WiFi网络",
"settings.wifi.add-edit.edit-title": "编辑WiFi网络",
"settings.wifi.add-edit.ssid-name-label": "SSID/WiFi 名称:",
"settings.wifi.add-edit.enter-device-name-placeholder": "请输入SSID/WiFi名称",
"settings.mute.manage-endpoints.title": "管理音频设备",
"settings.mute.manage-endpoints.list-behaviour.title": "通用",
"settings.mute.manage-endpoints.list-behaviour.mute-only-listed": "仅对列出的设备静音",
"settings.mute.manage-endpoints.list-behaviour.mute-all-but-listed": "将列出的设备以外的所有设备静音",
"settings.mute.manage-endpoints.endpoints.title": "设备",
"settings.mute.manage-endpoints.add-edit.add-title": "添加设备",
"settings.mute.manage-endpoints.add-edit.edit-title": "编辑设备",
"settings.mute.manage-endpoints.add-edit.endpoint-name-placeholder": "请输入设备名称",
"settings.mute.manage-endpoints.add-edit.endpoint-name-label": "设备名称:",
"about.title": "关于WinMute",
"about.general.author-site-label": "官网: www.lx-s.de",
"about.general.project-site-label": "项目GitHub && 代码",
"about.general.support-label": "建议与改进支持",
"about.general.description": "WinMute是由Alexander Steinhoefer在业余时间开发的。该工具的代码和新版本可以在GitHub上找到。非常欢迎以代码、门票或功能请求的形式进行贡献。感谢您使用这个小工具!\n 中文汉化by richzhl-1382232",
"about.tab.winmute": "关于WinMute",
"about.tab.license": "许可证明",
"about.btn-close": "确定",
"log.title": "WinMute日志记录",
"settings.general.btn-open-log-window": "显示日志…"
}
================================================
FILE: WinMute/AboutDlg.cpp
================================================
/*
WinMute
Copyright (c) 2025, Alexander Steinhoefer
-----------------------------------------------------------------------------
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
* Neither the name of the author nor the names of its contributors may
be used to endorse or promote products derived from this software
without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
-----------------------------------------------------------------------------
*/
#include "common.h"
static const std::wstring licenseText = L"\
WinMute\r\n\
Copyright(c) 2025, Alexander Steinhoefer\r\n\
\r\n\
-----------------------------------------------------------------------------\r\n\
Redistribution and use in source and binary forms, with or without\r\n\
modification, are permitted provided that the following conditions are met:\r\n\
\r\n\
* Redistributions of source code must retain the above copyright notice,\r\n\
this list of conditions and the following disclaimer.\r\n\
\r\n\
* Redistributions in binary form must reproduce the above copyright\r\n\
notice, this list of conditions and the following disclaimer in the\r\n\
documentation and /or other materials provided with the distribution.\r\n\
\r\n\
* Neither the name of the author nor the names of its contributors may\r\n\
be used to endorse or promote products derived from this software\r\n\
without specific prior written permission.\r\n\
\r\n\
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r\n\
\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r\n\
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\r\n\
FOR A PARTICULAR PURPOSE ARE DISCLAIMED.IN NO EVENT SHALL THE\r\n\
COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\r\n\
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES(INCLUDING,\r\n\
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\n\
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n\
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r\n\
LIABILITY, OR TORT(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY\r\n\
WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r\n\
POSSIBILITY OF SUCH DAMAGE.\r\n\
";
enum AboutTabsIDs {
ABOUT_TAB_GENERAL = 0,
ABOUT_TAB_LICENSE,
ABOUT_TAB_COUNT
};
struct AboutDlgData {
HWND hTabCtrl = nullptr;
std::array<HWND, ABOUT_TAB_COUNT> hTabs{nullptr};
HWND hActiveTab = nullptr;
HFONT hTitleFont = nullptr;
};
static void InsertTabItem(HWND hTabCtrl, UINT id, const std::wstring& itemName)
{
constexpr int bufSize = 50;
wchar_t buf[bufSize] = { L'\0' };
TC_ITEM tcItem;
ZeroMemory(&tcItem, sizeof(tcItem));
tcItem.mask |= TCIF_TEXT;
StringCchCopyW(buf, bufSize, itemName.c_str());
tcItem.pszText = buf;
tcItem.cchTextMax = bufSize;
TabCtrl_InsertItem(hTabCtrl, id, &tcItem);
}
static void SwitchTab(AboutDlgData* dlgData, HWND hNewTab) noexcept
{
if (dlgData->hActiveTab != nullptr) {
ShowWindow(dlgData->hActiveTab, SW_HIDE);
}
dlgData->hActiveTab = hNewTab;
ShowWindow(dlgData->hActiveTab, SW_SHOW);
}
static void ResizeTabs(HWND hTabCtrl, std::span<HWND> tabs)
{
RECT tabCtrlRect = { 0 };
GetWindowRect(hTabCtrl, &tabCtrlRect);
POINT tabCtrlPos = { 0 };
tabCtrlPos.x = tabCtrlRect.left;
tabCtrlPos.y = tabCtrlRect.top;
ScreenToClient(GetParent(hTabCtrl), &tabCtrlPos);
GetClientRect(hTabCtrl, &tabCtrlRect);
TabCtrl_AdjustRect(hTabCtrl, FALSE, &tabCtrlRect);
tabCtrlRect.left += tabCtrlPos.x;
tabCtrlRect.top += tabCtrlPos.y;
HDWP hdwp = BeginDeferWindowPos(static_cast<int>(tabs.size()));
if (hdwp == nullptr) {
ShowWindowsError(L"BeginDeferWindowPos", GetLastError());
} else {
for (auto hTab : tabs) {
HDWP newHdwp = DeferWindowPos(
hdwp,
hTab,
HWND_TOP,
tabCtrlRect.left,
tabCtrlRect.top,
tabCtrlRect.right - tabCtrlRect.left,
tabCtrlRect.bottom - tabCtrlRect.top,
0);
if (newHdwp == nullptr) {
ShowWindowsError(L"DeferWindowPos", GetLastError());
break;
} else {
hdwp = newHdwp;
}
}
EndDeferWindowPos(hdwp);
}
}
static void TranslateAboutGeneralDlgProc(HWND hDlg)
{
WMi18n &i18n = WMi18n::GetInstance();
const auto hpLink = std::vformat(
std::wstring_view(L"<a href=\"https://www.lx-s.de\">{}</a>"),
std::make_wformat_args(i18n.GetTranslationW("about.general.author-site-label")));
const auto projLink = std::vformat(
L"<a href=\"https://github.com/lx-s/WinMute/\">{}</a>",
std::make_wformat_args(i18n.GetTranslationW("about.general.project-site-label")));
const auto supportLink = std::vformat(
L"<a href=\"https://github.com/lx-s/WinMute/issues/\">{}</a>",
std::make_wformat_args(i18n.GetTranslationW("about.general.support-label")));
SetDlgItemTextW(hDlg, IDC_LINK_HOMEPAGE, hpLink.c_str());
SetDlgItemTextW(hDlg, IDC_LINK_PROJECT, projLink.c_str());
SetDlgItemTextW(hDlg, IDC_LINK_TICKETS, supportLink.c_str());
i18n.SetItemText(hDlg, IDC_ABOUTTEXT, "about.general.description");
}
static INT_PTR CALLBACK About_GeneralDlgProc(HWND hDlg, UINT msg, WPARAM, LPARAM lParam) noexcept
{
switch (msg) {
case WM_INITDIALOG:
if (IsAppThemed()) {
EnableThemeDialogTexture(hDlg, ETDT_ENABLETAB);
}
TranslateAboutGeneralDlgProc(hDlg);
return TRUE;
case WM_NOTIFY: {
const PNMLINK pNmLink = reinterpret_cast<PNMLINK>(lParam);
#pragma warning(push)
#pragma warning(disable : 26454) // Disable arithmetic overflow warning for NM_CLICK and NM_RETURN
if (pNmLink->hdr.code == NM_CLICK ||
pNmLink->hdr.code == NM_RETURN) {
#pragma warning(pop)
const UINT_PTR ctrlId = pNmLink->hdr.idFrom;
const LITEM item = pNmLink->item;
if ((ctrlId == IDC_LINK_HOMEPAGE || ctrlId == IDC_LINK_TICKETS || ctrlId == IDC_LINK_PROJECT)
&& item.iLink == 0) {
LaunchBrowser(hDlg, item.szUrl);
}
}
return TRUE;
}
default:
break;
}
return FALSE;
}
static INT_PTR CALLBACK About_LicenseDlgProc(HWND hDlg, UINT msg, WPARAM, LPARAM) noexcept
{
switch (msg) {
case WM_INITDIALOG:
if (IsAppThemed()) {
EnableThemeDialogTexture(hDlg, ETDT_ENABLETAB);
}
Edit_SetText(GetDlgItem(hDlg, IDC_LICENSETEXT), licenseText.c_str());
return TRUE;
default:
break;
}
return FALSE;
}
static void TranslateAboutDlgProc(HWND hDlg)
{
WMi18n &i18n = WMi18n::GetInstance();
SetWindowText(hDlg, i18n.GetTranslationW("about.title").c_str());
i18n.SetItemText(hDlg, IDOK, "about.btn-close");
}
INT_PTR CALLBACK AboutDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
AboutDlgData* dlgData =
reinterpret_cast<AboutDlgData*>(GetWindowLongPtr(hDlg, GWLP_USERDATA));
switch (msg) {
case WM_INITDIALOG: {
dlgData = new AboutDlgData();
SetWindowLongPtr(hDlg, GWLP_USERDATA, reinterpret_cast<LONG_PTR>(dlgData));
dlgData->hTabCtrl = GetDlgItem(hDlg, IDC_ABOUT_TAB);
WMi18n &i18n = WMi18n::GetInstance();
InsertTabItem(dlgData->hTabCtrl, ABOUT_TAB_GENERAL, i18n.GetTranslationW("about.tab.winmute"));
InsertTabItem(dlgData->hTabCtrl, ABOUT_TAB_LICENSE, i18n.GetTranslationW("about.tab.license"));
TranslateAboutDlgProc(hDlg);
dlgData->hTabs[ABOUT_TAB_GENERAL] = CreateDialog(
nullptr,
MAKEINTRESOURCE(IDD_ABOUT_WINMUTE),
hDlg,
About_GeneralDlgProc);
dlgData->hTabs[ABOUT_TAB_LICENSE] = CreateDialog(
nullptr,
MAKEINTRESOURCE(IDD_ABOUT_LICENSE),
hDlg,
About_LicenseDlgProc);
// Init tab pages
ResizeTabs(dlgData->hTabCtrl, std::span{dlgData->hTabs});
for (auto hTab : dlgData->hTabs) {
ShowWindow(hTab, SW_HIDE);
}
SwitchTab(dlgData, dlgData->hTabs[ABOUT_TAB_GENERAL]);
HWND hTitle = GetDlgItem(hDlg, IDC_ABOUT_TITLE);
std::wstring progVers;
if (GetWinMuteVersion(progVers)) {
std::wstring progName = std::wstring{ L"WinMute " } + progVers;
Static_SetText(hTitle, progName.c_str());
}
// Set title font
LOGFONT font;
font.lfHeight = 32;
font.lfWidth = 0;
font.lfEscapement = 0;
font.lfOrientation = 0;
font.lfWeight = FW_BOLD;
font.lfItalic = false;
font.lfUnderline = false;
font.lfStrikeOut = false;
font.lfEscapement = 0;
font.lfOrientation = 0;
font.lfOutPrecision = OUT_DEFAULT_PRECIS;
font.lfClipPrecision = CLIP_STROKE_PRECIS | CLIP_MASK | CLIP_TT_ALWAYS | CLIP_LH_ANGLES;
font.lfQuality = CLEARTYPE_QUALITY;
font.lfPitchAndFamily = VARIABLE_PITCH | FF_ROMAN;
wcscpy_s(font.lfFaceName, L"Segoe UI");
dlgData->hTitleFont = CreateFontIndirect(&font);
SendMessage(
hTitle,
WM_SETFONT,
reinterpret_cast<WPARAM>(dlgData->hTitleFont),
TRUE);
HICON hIcon = LoadIcon(
GetModuleHandle(nullptr),
MAKEINTRESOURCE(IDI_TRAY_DARK));
SendMessageW(hDlg, WM_SETICON, ICON_BIG, reinterpret_cast<LPARAM>(hIcon));
return TRUE;
}
case WM_NOTIFY: {
const LPNMHDR lpnmhdr = reinterpret_cast<LPNMHDR>(lParam);
#pragma warning(push)
#pragma warning(disable : 26454) // Disable arithmetic overflow for TCN_SELCHANGE
if (lpnmhdr->code == TCN_SELCHANGE && lpnmhdr->hwndFrom == dlgData->hTabCtrl) {
#pragma warning(pop)
const int curSel = TabCtrl_GetCurSel(dlgData->hTabCtrl);
if (curSel >= 0 && curSel < ABOUT_TAB_COUNT) {
SwitchTab(dlgData, dlgData->hTabs[curSel]);
}
}
return 0;
}
case WM_COMMAND:
if (LOWORD(wParam) == IDOK) {
EndDialog(hDlg, 0);
}
return 0;
case WM_DESTROY:
DeleteObject(dlgData->hTitleFont);
delete dlgData;
SetWindowLongPtrW(hDlg, GWLP_USERDATA, 0);
return 0;
case WM_CLOSE:
EndDialog(hDlg, 0);
return TRUE;
default:
break;
}
return FALSE;
}
================================================
FILE: WinMute/BluetoothDetector.cpp
================================================
/*
WinMute
Copyright (c) 2025, Alexander Steinhoefer
-----------------------------------------------------------------------------
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
* Neither the name of the author nor the names of its contributors may
be used to endorse or promote products derived from this software
without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
-----------------------------------------------------------------------------
*/
#include "common.h"
BluetoothDetector::BluetoothDetector() :
hNotifyWnd_(nullptr), hBluetoothNotify_(nullptr),
initialized_(false), useDeviceList_(false)
{
}
BluetoothDetector::~BluetoothDetector()
{
if (initialized_) {
UnloadRadioNotifications();
}
}
void BluetoothDetector::UnloadRadioNotifications() noexcept
{
for (auto hDevNotify : notificationHandles_) {
UnregisterDeviceNotification(hDevNotify);
}
notificationHandles_.clear();
}
bool BluetoothDetector::LoadRadioNotifications()
{
bool success = false;
auto& log = WMLog::GetInstance();
notificationHandles_.clear();
HANDLE btHandle = nullptr;
const BLUETOOTH_FIND_RADIO_PARAMS bfrp = { sizeof(BLUETOOTH_FIND_RADIO_PARAMS) };
HBLUETOOTH_RADIO_FIND hRadiosFind = BluetoothFindFirstRadio(&bfrp, &btHandle);
if (hRadiosFind == nullptr) {
log.LogWinError(L"BluetoothFindFirstRadio", GetLastError());
return false;
}
DEV_BROADCAST_HANDLE dbh = { 0 };
dbh.dbch_devicetype = DBT_DEVTYP_HANDLE;
dbh.dbch_size = sizeof(dbh);
dbh.dbch_eventguid = GUID_BLUETOOTH_RADIO_IN_RANGE;
do {
dbh.dbch_handle = btHandle;
HDEVNOTIFY devNotify = RegisterDeviceNotification(
hNotifyWnd_,
&dbh,
DEVICE_NOTIFY_WINDOW_HANDLE);
CloseHandle(btHandle);
if (devNotify == nullptr) {
log.LogWinError(L"RegisterDeviceNotification", GetLastError());
} else {
notificationHandles_.push_back(devNotify);
}
} while (BluetoothFindNextRadio(hRadiosFind, &btHandle));
const DWORD dwLastError = GetLastError();
if (dwLastError != ERROR_NO_MORE_ITEMS) {
log.LogWinError(L"BluetoothFindNextRadio", GetLastError());
UnloadRadioNotifications();
} else {
success = true;
}
BluetoothFindRadioClose(hRadiosFind);
return success;
}
bool BluetoothDetector::Init(HWND hNotifyWnd)
{
if (!initialized_) {
hNotifyWnd_ = hNotifyWnd;
if (LoadRadioNotifications()) {
initialized_ = true;
}
}
return initialized_;
}
void BluetoothDetector::Unload()
{
UnloadRadioNotifications();
hNotifyWnd_ = nullptr;
initialized_ = false;
}
void BluetoothDetector::SetDeviceList(
const std::vector<std::string>& devices,
bool useDeviceList)
{
deviceNames_ = devices;
useDeviceList_ = useDeviceList;
}
BluetoothDetector::BluetoothStatus BluetoothDetector::GetBluetoothStatus(
const UINT message, const WPARAM wParam, const LPARAM lParam)
{
if (message != WM_DEVICECHANGE || wParam != DBT_CUSTOMEVENT || lParam == 0) {
return BluetoothStatus::Unknown;
}
const DEV_BROADCAST_HDR *header = reinterpret_cast<DEV_BROADCAST_HDR*>(lParam);
if (header->dbch_devicetype != DBT_DEVTYP_HANDLE) {
return BluetoothStatus::Unknown;
}
const DEV_BROADCAST_HANDLE* handle = reinterpret_cast<const DEV_BROADCAST_HANDLE*>(header);
if (!IsEqualGUID(handle->dbch_eventguid, GUID_BLUETOOTH_RADIO_IN_RANGE)) {
return BluetoothStatus::Unknown;
}
const BTH_RADIO_IN_RANGE *inRangeInfo = reinterpret_cast<const BTH_RADIO_IN_RANGE*>(handle->dbch_data);
if (inRangeInfo == nullptr) {
return BluetoothStatus::Unknown;
}
// only react to audio devices and not (e. g.) game controllers
if ((inRangeInfo->deviceInfo.flags & BDIF_COD) &&
GET_COD_MAJOR(inRangeInfo->deviceInfo.classOfDevice) != COD_MAJOR_AUDIO) {
return BluetoothStatus::Unknown;
}
auto& log = WMLog::GetInstance();
if (useDeviceList_) {
auto pos = std::find(begin(deviceNames_), end(deviceNames_), inRangeInfo->deviceInfo.name);
if (pos == end(deviceNames_)) {
log.LogInfo(L"Bluetooth device \"%S\" not in list.", inRangeInfo->deviceInfo.name);
return BluetoothStatus::Unknown;
}
}
if ((inRangeInfo->deviceInfo.flags & BDIF_CONNECTED) && !(inRangeInfo->previousDeviceFlags & BDIF_CONNECTED)) {
log.LogInfo(L"Bluetooth Audio device \"%S\" connected.", inRangeInfo->deviceInfo.name);
return BluetoothStatus::Connected;
} else if (!(inRangeInfo->deviceInfo.flags & BDIF_CONNECTED) && (inRangeInfo->previousDeviceFlags & BDIF_CONNECTED)) {
log.LogInfo(L"Bluetooth Audio device \"%S\" disconnected.", inRangeInfo->deviceInfo.name);
return BluetoothStatus::Disconnected;
}
return BluetoothStatus::Unknown;
}
================================================
FILE: WinMute/BluetoothDetector.h
================================================
/*
WinMute
Copyright (c) 2025, Alexander Steinhoefer
-----------------------------------------------------------------------------
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
* Neither the name of the author nor the names of its contributors may
be used to endorse or promote products derived from this software
without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
-----------------------------------------------------------------------------
*/
#pragma once
#include "common.h"
/* wParam = Connected = 1 | Disconnected = 0. lParam = Pointer to Device Name */
constexpr int WM_BTSTATUSCHANGED = WM_USER + 500;
class BluetoothDetector {
public:
enum class BluetoothStatus { Unknown, Connected, Disconnected };
BluetoothDetector();
~BluetoothDetector();
BluetoothDetector(const WifiDetector&) = delete;
BluetoothDetector(WifiDetector&&) = delete;
BluetoothDetector& operator=(const WifiDetector&) = delete;
BluetoothDetector& operator=(WifiDetector&&) = delete;
void SetDeviceList(const std::vector<std::string>& devices, bool useDeviceList);
bool Init(HWND hNotifyWnd);
void Unload();
BluetoothStatus GetBluetoothStatus(
const UINT message, const WPARAM wParam, const LPARAM lParam);
private:
HWND hNotifyWnd_;
HDEVNOTIFY hBluetoothNotify_;
std::vector<HDEVNOTIFY> notificationHandles_;
bool LoadRadioNotifications();
void UnloadRadioNotifications() noexcept;
bool initialized_;
bool useDeviceList_;
std::vector<std::string> deviceNames_;
};
================================================
FILE: WinMute/LogDialog.cpp
================================================
/*
WinMute
Copyright (c) 2024, Alexander Steinhoefer
-----------------------------------------------------------------------------
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
* Neither the name of the author nor the names of its contributors may
be used to endorse or promote products derived from this software
without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
-----------------------------------------------------------------------------
*/
#include "common.h"
struct LogDlgData {
HWND hLogContent;
};
INT_PTR CALLBACK LogDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
auto *dlgData =
reinterpret_cast<LogDlgData *>(GetWindowLongPtr(hDlg, GWLP_USERDATA));
UNREFERENCED_PARAMETER(wParam);
UNREFERENCED_PARAMETER(lParam);
switch (msg) {
case WM_INITDIALOG:
{
dlgData = new LogDlgData();
SetWindowLongPtr(hDlg, GWLP_USERDATA, reinterpret_cast<LONG_PTR>(dlgData));
WMi18n &i18n = WMi18n::GetInstance();
SetWindowText(hDlg, i18n.GetTranslationW("log.title").c_str());
HICON hIcon = LoadIcon(
GetModuleHandle(nullptr),
MAKEINTRESOURCE(IDI_TRAY_DARK));
SendMessageW(hDlg, WM_SETICON, ICON_BIG, reinterpret_cast<LPARAM>(hIcon));
auto& wmLog = WMLog::GetInstance();
const auto logMessages = wmLog.GetLogMessages();
std::wstring logText;
logText.reserve(logMessages.size() * 30);
for (auto &lm : logMessages) {
logText.append(wmLog.FormatLogMessage(lm, true));
}
dlgData->hLogContent = GetDlgItem(hDlg, IDC_LOG_CONTENT);
Edit_SetText(dlgData->hLogContent, logText.c_str());
wmLog.RegisterForLogUpdates(hDlg);
// Initial sizing
RECT rcClient;
GetClientRect(hDlg, &rcClient);
SetWindowPos(
dlgData->hLogContent,
nullptr,
0,
0,
rcClient.right - rcClient.left,
rcClient.bottom - rcClient.top,
SWP_NOZORDER);
return TRUE;
}
case WM_COMMAND:
return 0;
case WM_SIZE:
{
RECT rcClient;
GetClientRect(hDlg, &rcClient);
SetWindowPos(
dlgData->hLogContent,
nullptr,
0,
0,
rcClient.right - rcClient.left,
rcClient.bottom - rcClient.top,
SWP_NOZORDER);
return 0;
}
case WM_LOG_UPDATED: {
const WMLog &wmLog = WMLog::GetInstance();
auto logMsg = reinterpret_cast<LogMessage*>(lParam);
if (logMsg == nullptr) {
return FALSE;
}
const auto formattedMsg = wmLog.FormatLogMessage(*logMsg, true);
const auto textLen = Edit_GetTextLength(dlgData->hLogContent);
Edit_SetSel(dlgData->hLogContent, textLen, textLen);
Edit_ReplaceSel(dlgData->hLogContent, formattedMsg.c_str());
return TRUE;
}
case WM_DESTROY:
delete dlgData;
SetWindowLongPtrW(hDlg, GWLP_USERDATA, 0);
WMLog::GetInstance().UnregisterForLogUpdates(hDlg);
return 0;
case WM_CLOSE:
//EndDialog(hDlg, 0);
DestroyWindow(hDlg);
return TRUE;
default:
break;
}
return FALSE;
}
================================================
FILE: WinMute/MMNotificationClient.cpp
================================================
/*
WinMute
Copyright (c) 2025, Alexander Steinhoefer
-----------------------------------------------------------------------------
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
* Neither the name of the author nor the names of its contributors may
be used to endorse or promote products derived from this software
without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
-----------------------------------------------------------------------------
*/
#include "common.h"
#include "WinAudio.h"
#include "MMNotificationClient.h"
#include <Functiondiscoverykeys_devpkey.h>
class WinAudio;
MMNotificationClient::MMNotificationClient(WinAudio* notifyParent) :
ref_count_(1), pEnumerator_(nullptr), notifyParent_(notifyParent)
{
}
MMNotificationClient::~MMNotificationClient()
{
SafeRelease(&pEnumerator_);
}
STDMETHODIMP_(ULONG) MMNotificationClient::AddRef()
{
return ++ref_count_;
}
STDMETHODIMP_(ULONG) MMNotificationClient::Release()
{
const ULONG ref = --ref_count_;
if (ref == 0) {
delete this;
}
return ref;
}
STDMETHODIMP_(HRESULT) MMNotificationClient::QueryInterface(
REFIID riid, VOID** ppvInterface)
{
if (IID_IUnknown == riid) {
AddRef();
*ppvInterface = reinterpret_cast<IUnknown*>(this);
} else if (__uuidof(IMMNotificationClient) == riid) {
AddRef();
*ppvInterface = reinterpret_cast<IMMNotificationClient*>(this);
} else {
*ppvInterface = nullptr;
return E_NOINTERFACE;
}
return S_OK;
}
STDMETHODIMP_(HRESULT) MMNotificationClient::OnDefaultDeviceChanged(
EDataFlow, ERole, LPCWSTR)
{
return S_OK;
}
STDMETHODIMP_(HRESULT) MMNotificationClient::OnDeviceAdded(LPCWSTR pwstrDeviceId)
{
if (notifyParent_ && pwstrDeviceId != nullptr) {
const auto deviceName = GetFriendlyDeviceName(pwstrDeviceId);
WMLog::GetInstance().GetInstance().LogInfo(L"Device \"%s\" added", deviceName.c_str());
notifyParent_->ShouldReInit();
}
return S_OK;
}
STDMETHODIMP_(HRESULT) MMNotificationClient::OnDeviceRemoved(LPCWSTR pwstrDeviceId)
{
if (notifyParent_ && pwstrDeviceId != nullptr) {
const auto deviceName = GetFriendlyDeviceName(pwstrDeviceId);
WMLog::GetInstance().GetInstance().LogInfo(L"Device \"%s\" removed", deviceName.c_str());
notifyParent_->ShouldReInit();
}
return S_OK;
}
STDMETHODIMP_(HRESULT) MMNotificationClient::OnDeviceStateChanged(
LPCWSTR pwstrDeviceId, DWORD dwNewState)
{
bool notify = true;
std::wstring what;
if (pwstrDeviceId == nullptr) {
return S_OK;
}
if (dwNewState == DEVICE_STATE_NOTPRESENT) {
what = L"Not present";
} else if (dwNewState == DEVICE_STATE_UNPLUGGED) {
what = L"Unplugged";
} else if (dwNewState == DEVICE_STATE_ACTIVE) {
what = L"Active";
} else {
notify = false;
}
if (notify && notifyParent_) {
// TODO: Check if output device
const auto deviceName = GetFriendlyDeviceName(pwstrDeviceId);
WMLog::GetInstance().GetInstance().LogInfo(
L"Device \"%s\" status changed to %s",
deviceName.c_str(),
what.c_str());
notifyParent_->ShouldReInit();
}
return S_OK;
}
STDMETHODIMP_(HRESULT) MMNotificationClient::OnPropertyValueChanged(
LPCWSTR, const PROPERTYKEY)
{
return S_OK;
}
std::wstring MMNotificationClient:: GetFriendlyDeviceName(LPCWSTR pwstrDeviceId)
{
HRESULT hr = S_OK;
IMMDevice *pDevice = nullptr;
IPropertyStore *pProps = nullptr;
PROPVARIANT varString;
PropVariantInit(&varString);
if (pEnumerator_ == nullptr) {
// Get enumerator for audio endpoint devices.
hr = CoCreateInstance(
__uuidof(MMDeviceEnumerator),
nullptr, CLSCTX_INPROC_SERVER,
__uuidof(IMMDeviceEnumerator),
reinterpret_cast<void **>(&pEnumerator_));
}
if (hr == S_OK) {
hr = pEnumerator_->GetDevice(pwstrDeviceId, &pDevice);
}
if (hr == S_OK) {
hr = pDevice->OpenPropertyStore(STGM_READ, &pProps);
}
if (hr == S_OK){
// Get the endpoint device's friendly-name property.
hr = pProps->GetValue(PKEY_Device_FriendlyName, &varString);
}
std::wstring deviceName = L"Unknown device";
if (hr == S_OK) {
deviceName = varString.pwszVal;
}
PropVariantClear(&varString);
SafeRelease(&pProps);
SafeRelease(&pDevice);
return deviceName;
}
================================================
FILE: WinMute/MMNotificationClient.h
================================================
/*
WinMute
Copyright (c) 2025, Alexander Steinhoefer
-----------------------------------------------------------------------------
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
* Neither the name of the author nor the names of its contributors may
be used to endorse or promote products derived from this software
without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
-----------------------------------------------------------------------------
*/
#pragma once
#include "Common.h"
class WinAudio;
class MMNotificationClient : public IMMNotificationClient {
public:
explicit MMNotificationClient(WinAudio* notifyParent);
~MMNotificationClient();
STDMETHODIMP_(ULONG) AddRef();
STDMETHODIMP_(ULONG) Release();
STDMETHODIMP_(HRESULT) QueryInterface(REFIID riid, VOID** ppvInterface);
STDMETHODIMP_(HRESULT) OnDefaultDeviceChanged(EDataFlow flow, ERole role,
LPCWSTR pwstrDeviceId);
STDMETHODIMP_(HRESULT) OnDeviceAdded(LPCWSTR pwstrDeviceId);
STDMETHODIMP_(HRESULT) OnDeviceRemoved(LPCWSTR pwstrDeviceId);
STDMETHODIMP_(HRESULT) OnDeviceStateChanged(LPCWSTR pwstrDeviceId,
DWORD dwNewState);
STDMETHODIMP_(HRESULT) OnPropertyValueChanged(LPCWSTR pwstrDeviceId,
const PROPERTYKEY key);
private:
std::atomic<LONG> ref_count_;
IMMDeviceEnumerator* pEnumerator_;
WinAudio* notifyParent_;
std::wstring GetFriendlyDeviceName(LPCWSTR pwstrDeviceId);
};
================================================
FILE: WinMute/MuteControl.cpp
================================================
/*
WinMute
Copyright (c) 2025, Alexander Steinhoefer
-----------------------------------------------------------------------------
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
* Neither the name of the author nor the names of its contributors may
be used to endorse or promote products derived from this software
without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
-----------------------------------------------------------------------------
*/
#include "common.h"
extern HINSTANCE hglobInstance;
static const int BLUETOOTH_RECONNECT_UNMUTE_DELAY = 5000; // Milliseconds
static const int MUTE_DELAY_MAGIC_VALUE = 0x198604;
static const wchar_t* MUTECONTROL_CLASS_NAME = L"WinMuteMuteControl";
enum MuteType {
// With restore
MuteTypeWorkstationLock = 0,
MuteTypeRemoteSession,
MuteTypeDisplayStandby,
MuteTypeBluetoothDisconnect,
// Without restore
MuteTypeLogout,
MuteTypeSuspend,
MuteTypeShutdown,
MuteTypeCount // Meta
};
void DelayedMuteTimerProc(HWND hWnd, UINT, UINT_PTR, DWORD)
{
MuteControl *muteCtrl = reinterpret_cast<MuteControl*>(GetWindowLongPtrW(hWnd, GWLP_USERDATA));
if (muteCtrl != nullptr) {
muteCtrl->MuteDelayed(MUTE_DELAY_MAGIC_VALUE);
}
}
static LRESULT CALLBACK MuteControlWndProc(
HWND hWnd,
UINT msg,
WPARAM wParam,
LPARAM lParam)
{
auto wm = reinterpret_cast<MuteControl*>(GetWindowLongPtr(hWnd, GWLP_USERDATA));
switch (msg) {
case WM_NCCREATE:
{
LPCREATESTRUCTW cs = reinterpret_cast<LPCREATESTRUCTW>(lParam);
SetWindowLongPtrW(hWnd, GWLP_USERDATA,
reinterpret_cast<LONG_PTR>(cs->lpCreateParams));
return TRUE;
}
default:
break;
}
return (wm)
? wm->WindowProc(hWnd, msg, wParam, lParam)
: DefWindowProcW(hWnd, msg, wParam, lParam);
}
MuteControl::MuteControl()
{
MuteConfig initMuteConf;
initMuteConf.active = false;
initMuteConf.shouldMute = false;
for (int i = 0; i < MuteTypeCount; ++i) {
muteConfig_.push_back(initMuteConf);
}
}
MuteControl::~MuteControl()
{
UnregisterClassW(MUTECONTROL_CLASS_NAME, hglobInstance);
DestroyWindow(hMuteCtrlWnd_);
}
bool MuteControl::Init(HWND hParent, const TrayIcon *trayIcon)
{
WNDCLASSEXW wndClass{ 0 };
wndClass.cbSize = sizeof(wndClass);
wndClass.lpfnWndProc = MuteControlWndProc;
wndClass.hInstance = hglobInstance;
wndClass.lpszClassName = MUTECONTROL_CLASS_NAME;
if (!RegisterClassExW(&wndClass)) {
WMLog::GetInstance().LogWinError(L"RegisterClassEx");
return false;
}
hMuteCtrlWnd_ = CreateWindowEx(
WS_EX_TOOLWINDOW,
MUTECONTROL_CLASS_NAME,
L"",
0,
0, 0, 0, 0,
nullptr,
nullptr,
hglobInstance,
this);
if (hMuteCtrlWnd_ == nullptr) {
WMLog::GetInstance().LogWinError(L"CreateWindowEx");
UnregisterClassW(MUTECONTROL_CLASS_NAME, hglobInstance);
return false;
}
winAudio_ = std::make_unique<VistaAudio>();
if (!winAudio_->Init(hParent)) {
DestroyWindow(hMuteCtrlWnd_);
UnregisterClassW(MUTECONTROL_CLASS_NAME, hglobInstance);
return false;
}
trayIcon_ = trayIcon;
return true;
}
LRESULT CALLBACK MuteControl::WindowProc(
HWND hWnd,
UINT msg,
WPARAM wParam,
LPARAM lParam)
{
return DefWindowProc(hWnd, msg, wParam, lParam);
}
void MuteControl::SetMute(bool mute)
{
WMLog::GetInstance().LogInfo(L"Manual muting: %s", mute ? L"on" : L"off");
winAudio_->SetMute(mute);
}
void MuteControl::SaveMuteStatus()
{
const bool alreadySaved = std::any_of(
muteConfig_.begin(),
muteConfig_.end(),
[](const MuteConfig &conf) {
return conf.shouldMute && conf.active;
}
);
if (alreadySaved) {
WMLog::GetInstance().LogInfo(L"Muting event already active. Skipping status save");
} else {
WMLog::GetInstance().LogInfo(L"Saving mute status");
winAudio_->SaveMuteStatus();
}
}
void MuteControl::ShowNotification(const std::wstring& title, const std::wstring& text)
{
if (notificationsEnabled_ && trayIcon_ != nullptr) {
trayIcon_->ShowPopup(title, text);
}
}
void MuteControl::SetNotifications(bool enable)
{
notificationsEnabled_ = enable;
}
void MuteControl::MuteDelayed(int magic)
{
if (magic != MUTE_DELAY_MAGIC_VALUE || delayedMuteTimerId_ == 0) {
return;
}
WMLog::GetInstance().LogInfo(L"Muting workstation after delay");
ShowNotification(
WMi18n::GetInstance().GetTranslationW("popup.muting-workstation-after-delay.title"),
WMi18n::GetInstance().GetTranslationW("popup.muting-workstation-after-delay.text"));
winAudio_->SetMute(true);
KillTimer(hMuteCtrlWnd_, delayedMuteTimerId_);
delayedMuteTimerId_ = 0;
}
bool MuteControl::StartDelayedMute()
{
delayedMuteTimerId_ = SetTimer(
hMuteCtrlWnd_,
delayedMuteTimerId_,
muteDelaySeconds_ * 1000,
DelayedMuteTimerProc);
if (delayedMuteTimerId_ == 0) {
WMLog::GetInstance().LogWinError(L"SetTimer", GetLastError());
}
return delayedMuteTimerId_ != 0;
}
void MuteControl::RestoreVolume(bool withDelay)
{
WMLog& log = WMLog::GetInstance();
if (!restoreVolume_) {
log.LogInfo(L"Volume Restore has been disabled");
return;
}
const bool restore = !std::any_of(
muteConfig_.begin(),
muteConfig_.end(),
[](const MuteConfig &conf) {
return conf.shouldMute && conf.active;
}
);
if (!restore) {
log.LogInfo(L"Skipping restore since other mute event is currently active");
} else if (delayedMuteTimerId_ != 0) {
KillTimer(hMuteCtrlWnd_, delayedMuteTimerId_);
delayedMuteTimerId_ = 0;
log.LogInfo(L"Skipping restore, since delayed mute was not triggered yet");
} else {
log.LogInfo(L"Restoring previous mute state");
ShowNotification(
WMi18n::GetInstance().GetTranslationW("popup.volume-restored.title"),
WMi18n::GetInstance().GetTranslationW("popup.volume-restored.text"));
if (withDelay) {
Sleep(BLUETOOTH_RECONNECT_UNMUTE_DELAY);
}
winAudio_->RestoreMuteStatus();
}
}
void MuteControl::SetRestoreVolume(bool enable)
{
restoreVolume_ = enable;
}
void MuteControl::SetMuteDelay(int delaySeconds)
{
muteDelaySeconds_ = delaySeconds;
}
void MuteControl::SetMuteOnWorkstationLock(bool enable)
{
muteConfig_[MuteTypeWorkstationLock].shouldMute = enable;
}
void MuteControl::SetMuteOnLogout(bool enable)
{
muteConfig_[MuteTypeLogout].shouldMute = enable;
}
void MuteControl::SetMuteOnSuspend(bool enable)
{
muteConfig_[MuteTypeSuspend].shouldMute = enable;
}
void MuteControl::SetMuteOnShutdown(bool enable)
{
muteConfig_[MuteTypeShutdown].shouldMute = enable;
}
void MuteControl::SetMuteOnRemoteSession(bool enable)
{
muteConfig_[MuteTypeRemoteSession].shouldMute = enable;
}
void MuteControl::SetMuteOnDisplayStandby(bool enable)
{
muteConfig_[MuteTypeDisplayStandby].shouldMute = enable;
}
void MuteControl::SetMut
gitextract_si3e3_3t/ ├── .editorconfig ├── .gitattributes ├── .github/ │ ├── FUNDING.yml │ └── ISSUE_TEMPLATE/ │ ├── bug_report.md │ └── feature_request.md ├── .gitignore ├── CONTRIBUTING.md ├── CURRENT_VERSION ├── Dist/ │ ├── InnoSetup/ │ │ ├── translations/ │ │ │ ├── info-before.de.txt │ │ │ ├── info-before.en.txt │ │ │ ├── info-before.es.txt │ │ │ ├── info-before.fr.txt │ │ │ ├── info-before.it.txt │ │ │ ├── info-before.ko.txt │ │ │ ├── info-before.lv.txt │ │ │ ├── info-before.nl.txt │ │ │ ├── info-before.ro.txt │ │ │ ├── info-before.ru.txt │ │ │ └── info-before.zh_Hans.txt │ │ ├── winmute-setup-languages.iss │ │ └── winmute-setup.iss │ ├── bin/ │ │ ├── changelog.txt │ │ ├── license.rtf │ │ ├── license.txt │ │ └── update-check.disabled │ ├── chocolatey/ │ │ ├── WinMute.nuspec │ │ ├── howto.txt │ │ └── tools/ │ │ ├── VERIFICATION.txt │ │ ├── chocolateybeforemodify.ps1 │ │ ├── chocolateyinstall.ps1 │ │ └── chocolateyuninstall.ps1 │ ├── winget/ │ │ └── manifests/ │ │ └── l/ │ │ └── LX-Systems/ │ │ └── WinMute/ │ │ ├── 2.5.0.0/ │ │ │ ├── LX-Systems.WinMute.installer.yaml │ │ │ ├── LX-Systems.WinMute.locale.en-US.yaml │ │ │ └── LX-Systems.WinMute.yaml │ │ ├── 2.5.1.0/ │ │ │ ├── LX-Systems.WinMute.installer.yaml │ │ │ ├── LX-Systems.WinMute.locale.en-US.yaml │ │ │ └── LX-Systems.WinMute.yaml │ │ ├── 2.5.2.0/ │ │ │ ├── LX-Systems.WinMute.installer.yaml │ │ │ ├── LX-Systems.WinMute.locale.en-US.yaml │ │ │ └── LX-Systems.WinMute.yaml │ │ └── 2.5.3.0/ │ │ ├── LX-Systems.WinMute.installer.yaml │ │ ├── LX-Systems.WinMute.locale.en-US.yaml │ │ └── LX-Systems.WinMute.yaml │ └── winget.txt ├── LICENSE ├── README.md ├── Translations/ │ ├── lang-de.json │ ├── lang-en.json │ ├── lang-es.json │ ├── lang-fr.json │ ├── lang-it.json │ ├── lang-ko.json │ ├── lang-lv.json │ ├── lang-nl.json │ ├── lang-ro.json │ ├── lang-ru.json │ └── lang-zh_Hans.json ├── WinMute/ │ ├── AboutDlg.cpp │ ├── BluetoothDetector.cpp │ ├── BluetoothDetector.h │ ├── LogDialog.cpp │ ├── MMNotificationClient.cpp │ ├── MMNotificationClient.h │ ├── MuteControl.cpp │ ├── MuteControl.h │ ├── QuietHoursTimer.cpp │ ├── QuietHoursTimer.h │ ├── SettingsDlg.cpp │ ├── Settings_BluetoothDlg.cpp │ ├── Settings_GeneralDlg.cpp │ ├── Settings_ManageEndpointsDlg.cpp │ ├── Settings_MuteDlg.cpp │ ├── Settings_QuietHoursDlg.cpp │ ├── Settings_WifiDlg.cpp │ ├── TrayIcon.cpp │ ├── TrayIcon.h │ ├── UpdateChecker.cpp │ ├── UpdateChecker.h │ ├── Utility.cpp │ ├── Utility.h │ ├── VersionHelper.h │ ├── VistaAudio.cpp │ ├── VistaAudioSessionEvents.cpp │ ├── VistaAudioSessionEvents.h │ ├── WMLog.cpp │ ├── WMLog.h │ ├── WMSettings.cpp │ ├── WMSettings.h │ ├── WMi18n.cpp │ ├── WMi18n.h │ ├── WiFiDetector.h │ ├── WifiDetector.cpp │ ├── WinAudio.h │ ├── WinMain.cpp │ ├── WinMute.cpp │ ├── WinMute.h │ ├── WinMute.rc │ ├── WinMute.vcxproj │ ├── WinMute.vcxproj.filters │ ├── WinMute.vcxproj.user │ ├── common.cpp │ ├── common.h │ ├── libs/ │ │ └── json.hpp │ └── resource.h ├── WinMute.props ├── WinMute.slnx ├── cppcgl-nativerecommended.ruleset └── winmute.cppcheck
SYMBOL INDEX (541 symbols across 36 files)
FILE: WinMute/AboutDlg.cpp
type AboutTabsIDs (line 69) | enum AboutTabsIDs {
type AboutDlgData (line 75) | struct AboutDlgData {
function InsertTabItem (line 82) | static void InsertTabItem(HWND hTabCtrl, UINT id, const std::wstring& it...
function SwitchTab (line 96) | static void SwitchTab(AboutDlgData* dlgData, HWND hNewTab) noexcept
function ResizeTabs (line 105) | static void ResizeTabs(HWND hTabCtrl, std::span<HWND> tabs)
function TranslateAboutGeneralDlgProc (line 144) | static void TranslateAboutGeneralDlgProc(HWND hDlg)
function INT_PTR (line 167) | static INT_PTR CALLBACK About_GeneralDlgProc(HWND hDlg, UINT msg, WPARAM...
function INT_PTR (line 198) | static INT_PTR CALLBACK About_LicenseDlgProc(HWND hDlg, UINT msg, WPARAM...
function TranslateAboutDlgProc (line 213) | static void TranslateAboutDlgProc(HWND hDlg)
function INT_PTR (line 220) | INT_PTR CALLBACK AboutDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM...
FILE: WinMute/BluetoothDetector.h
function class (line 41) | class BluetoothDetector {
FILE: WinMute/LogDialog.cpp
type LogDlgData (line 36) | struct LogDlgData {
function INT_PTR (line 40) | INT_PTR CALLBACK LogDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM l...
FILE: WinMute/MMNotificationClient.cpp
class WinAudio (line 40) | class WinAudio
FILE: WinMute/MMNotificationClient.h
function class (line 40) | class MMNotificationClient : public IMMNotificationClient {
FILE: WinMute/MuteControl.cpp
type MuteType (line 43) | enum MuteType {
function DelayedMuteTimerProc (line 57) | void DelayedMuteTimerProc(HWND hWnd, UINT, UINT_PTR, DWORD)
function LRESULT (line 65) | static LRESULT CALLBACK MuteControlWndProc(
function LRESULT (line 141) | LRESULT CALLBACK MuteControl::WindowProc(
FILE: WinMute/MuteControl.h
function class (line 38) | class MuteControl {
FILE: WinMute/QuietHoursTimer.cpp
function ConvertSystemTimeTo100NS (line 41) | static std::int64_t ConvertSystemTimeTo100NS(const LPSYSTEMTIME sysTime)...
function IsQuietHours (line 51) | static bool IsQuietHours(
function GetDiffMillseconds (line 76) | static int GetDiffMillseconds(const LPSYSTEMTIME t1, const LPSYSTEMTIME t2)
function VOID (line 92) | static VOID CALLBACK QuietHoursTimerProc(HWND hWnd, UINT msg, UINT_PTR i...
FILE: WinMute/QuietHoursTimer.h
function class (line 41) | class QuietHoursTimer {
FILE: WinMute/SettingsDlg.cpp
type SettingsTabsIDs (line 36) | enum SettingsTabsIDs {
type SettingsDlgData (line 45) | struct SettingsDlgData {
method SettingsDlgData (line 52) | explicit SettingsDlgData(WMSettings* settings)
function InsertTabItem (line 67) | static void InsertTabItem(HWND hTabCtrl, UINT id, const wchar_t *itemName)
function SwitchTab (line 81) | static void SwitchTab(SettingsDlgData* dlgData, HWND hNewTab)
function ResizeTabs (line 91) | static void ResizeTabs(HWND hTabCtrl, HWND* hTabs, int tabCount)
function INT_PTR (line 130) | INT_PTR CALLBACK SettingsDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPA...
FILE: WinMute/Settings_BluetoothDlg.cpp
type BtDeviceData (line 38) | struct BtDeviceData {
function GetPairedBtAudioDevices (line 42) | static bool GetPairedBtAudioDevices(std::vector<std::wstring>& devices)
function LoadBluetoothAddDlgTranslation (line 68) | static void LoadBluetoothAddDlgTranslation(HWND hDlg, bool isEdit)
function INT_PTR (line 86) | static INT_PTR CALLBACK Settings_BluetoothAddDlgProc(HWND hDlg, UINT msg...
function ExportBluetoothDeviceList (line 160) | static std::vector<std::wstring> ExportBluetoothDeviceList(HWND hList)
function IsBluetoothAvailable (line 175) | static bool IsBluetoothAvailable() noexcept
function BOOL (line 187) | static BOOL CALLBACK ShowChildWindow(HWND hWnd, LPARAM lParam) noexcept
function LoadBluetoothDlgTranslation (line 193) | static void LoadBluetoothDlgTranslation(HWND hDlg)
function INT_PTR (line 206) | INT_PTR CALLBACK Settings_BluetoothDlgProc(HWND hDlg, UINT msg, WPARAM w...
FILE: WinMute/Settings_GeneralDlg.cpp
type SettingsGeneralData (line 41) | struct SettingsGeneralData {
function FillLanguageList (line 46) | static void FillLanguageList(HWND hLanguageList, const SettingsGeneralDa...
function LoadSettingsGeneralDlgTranslation (line 63) | static void LoadSettingsGeneralDlgTranslation(HWND hDlg)
function INT_PTR (line 82) | INT_PTR CALLBACK Settings_GeneralDlgProc(HWND hDlg, UINT msg, WPARAM wPa...
FILE: WinMute/Settings_ManageEndpointsDlg.cpp
type EndpointData (line 40) | struct EndpointData {
function GetAudioEndpoints (line 49) | static bool GetAudioEndpoints(std::vector<std::wstring>& endpoints)
function LoadManageEndpointsAddDlgTranslation (line 104) | static void LoadManageEndpointsAddDlgTranslation(HWND hDlg, bool isEdit)
function INT_PTR (line 122) | static INT_PTR CALLBACK Settings_EndpointAddDlgProc(HWND hDlg, UINT msg,...
function ExportEndpointNameList (line 195) | static std::vector<std::wstring> ExportEndpointNameList(HWND hList)
function LoadManageEndpointsDlgTranslation (line 210) | static void LoadManageEndpointsDlgTranslation(HWND hDlg)
function INT_PTR (line 228) | INT_PTR CALLBACK Settings_ManageEndpointsDlgProc(HWND hDlg, UINT msg, WP...
FILE: WinMute/Settings_MuteDlg.cpp
function SetCheckButton (line 38) | static void SetCheckButton(HWND hBtn, const WMSettings& settings, Settin...
function SetOption (line 44) | static void SetOption(HWND hBtn, WMSettings& settings, SettingsKey key)
function LoadMuteDlgTranslation (line 50) | static void LoadMuteDlgTranslation(HWND hDlg)
function INT_PTR (line 72) | INT_PTR CALLBACK Settings_MuteDlgProc(HWND hDlg, UINT msg, WPARAM wParam...
FILE: WinMute/Settings_QuietHoursDlg.cpp
function IsValidTimeRange (line 36) | static bool IsValidTimeRange(
function SaveQuietHours (line 49) | static bool SaveQuietHours(
function LoadQuietHoursDlgTranslation (line 98) | static void LoadQuietHoursDlgTranslation(HWND hDlg)
function INT_PTR (line 111) | INT_PTR CALLBACK Settings_QuietHoursDlgProc(HWND hDlg, UINT msg, WPARAM ...
FILE: WinMute/Settings_WifiDlg.cpp
type WiFiData (line 38) | struct WiFiData {
function LoadWifiAddDlgTranslation (line 42) | static void LoadWifiAddDlgTranslation(HWND hDlg, bool isEdit)
function INT_PTR (line 60) | INT_PTR CALLBACK Settings_WifiAddDlgProc(HWND hDlg, UINT msg, WPARAM wPa...
function ExportSsidListItems (line 119) | static std::vector<std::wstring> ExportSsidListItems(HWND hList)
function IsWlanAvailable (line 134) | static bool IsWlanAvailable() noexcept
function BOOL (line 145) | static BOOL CALLBACK ShowChildWindow(HWND hWnd, LPARAM lParam)
function LoadWifiDlgTranslation (line 152) | static void LoadWifiDlgTranslation(HWND hDlg)
function INT_PTR (line 166) | INT_PTR CALLBACK Settings_WifiDlgProc(HWND hDlg, UINT msg, WPARAM wParam...
FILE: WinMute/TrayIcon.h
type TrayIconPopup (line 40) | struct TrayIconPopup {
function class (line 45) | class TrayIcon {
FILE: WinMute/UpdateChecker.cpp
class HInternetHolder (line 42) | class HInternetHolder {
method HInternetHolder (line 44) | HInternetHolder(HINTERNET hInternet)
FILE: WinMute/UpdateChecker.h
function UpdateCheckInterval (line 38) | enum class UpdateCheckInterval : int {
FILE: WinMute/Utility.cpp
type WINDOWPROCESSINFO (line 40) | struct WINDOWPROCESSINFO {
function ShowWindowsError (line 49) | void ShowWindowsError(const wchar_t *functionName, DWORD lastError)
function GetWinMuteVersion (line 87) | bool GetWinMuteVersion(std::wstring &versNumber)
function ConvertStringToWideString (line 117) | std::wstring ConvertStringToWideString(const std::string &ansiString)
function ConvertWideStringToString (line 130) | std::string ConvertWideStringToString(const std::wstring &wideString)
function LaunchBrowser (line 147) | bool LaunchBrowser(HWND hParent, const std::wstring &url)
FILE: WinMute/VersionHelper.h
function IsWindowsVersionOrGreater (line 40) | inline bool IsWindowsVersionOrGreater(
function IsWindowsXPOrGreater (line 63) | inline bool IsWindowsXPOrGreater()
function IsWindowsVistaOrGreater (line 71) | inline bool IsWindowsVistaOrGreater()
FILE: WinMute/VistaAudioSessionEvents.cpp
function ULONG (line 48) | ULONG STDMETHODCALLTYPE VistaAudioSessionEvents::AddRef()
function ULONG (line 53) | ULONG STDMETHODCALLTYPE VistaAudioSessionEvents::Release()
function HRESULT (line 62) | HRESULT STDMETHODCALLTYPE VistaAudioSessionEvents::QueryInterface(
function HRESULT (line 78) | HRESULT STDMETHODCALLTYPE VistaAudioSessionEvents::OnDisplayNameChanged(
function HRESULT (line 84) | HRESULT STDMETHODCALLTYPE VistaAudioSessionEvents::OnIconPathChanged(
function HRESULT (line 90) | HRESULT STDMETHODCALLTYPE VistaAudioSessionEvents::OnSimpleVolumeChanged(
function HRESULT (line 96) | HRESULT STDMETHODCALLTYPE VistaAudioSessionEvents::OnChannelVolumeChanged(
function HRESULT (line 103) | HRESULT STDMETHODCALLTYPE VistaAudioSessionEvents::OnGroupingParamChanged(
function HRESULT (line 109) | HRESULT STDMETHODCALLTYPE VistaAudioSessionEvents::OnStateChanged(
function HRESULT (line 118) | HRESULT STDMETHODCALLTYPE VistaAudioSessionEvents::OnSessionDisconnected(
FILE: WinMute/VistaAudioSessionEvents.h
function class (line 41) | class VistaAudioSessionEvents : public IAudioSessionEvents {
FILE: WinMute/WMLog.cpp
function wchar_t (line 37) | static const wchar_t* LogLevelToString(LogLevel level)
function OpenLogFile (line 51) | static bool OpenLogFile(const std::wstring& filePath, std::wofstream& lo...
function WMLog (line 57) | WMLog& WMLog::GetInstance()
FILE: WinMute/WMLog.h
function LogLevel (line 38) | enum class LogLevel {
FILE: WinMute/WMSettings.cpp
function wchar_t (line 52) | static const wchar_t* KeyToStr(SettingsKey key)
function DWORD (line 135) | static DWORD GetDefaultSetting(SettingsKey key)
function NormalizeStringList (line 189) | static void NormalizeStringList(std::vector<std::basic_string<T>> &items)
function ReadStringFromRegistry (line 198) | static bool ReadStringFromRegistry(HKEY hKey, const wchar_t *subKey, std...
function HKEY (line 344) | HKEY WMSettings::OpenAutostartKey(REGSAM samDesired)
function DWORD (line 414) | DWORD WMSettings::QueryValue(SettingsKey key) const
FILE: WinMute/WMSettings.h
type MuteEndPointMode (line 38) | enum MuteEndPointMode {
function SettingsKey (line 43) | enum class SettingsKey {
FILE: WinMute/WMi18n.cpp
function WMi18n (line 46) | WMi18n& WMi18n::GetInstance()
FILE: WinMute/WMi18n.h
type LanguageModule (line 38) | struct LanguageModule {
function class (line 45) | class WMi18n {
FILE: WinMute/WiFiDetector.h
function class (line 41) | class WifiDetector {
FILE: WinMute/WifiDetector.cpp
function WlanNotificationCallback (line 36) | static void WlanNotificationCallback(
FILE: WinMute/WinAudio.h
function class (line 45) | class WinAudio {
type Endpoint (line 60) | struct Endpoint {
function class (line 74) | class VistaAudio : public WinAudio {
FILE: WinMute/WinMain.cpp
function SetWorkingDirectory (line 38) | static bool SetWorkingDirectory()
function LoadLanguage (line 52) | static void LoadLanguage(WMSettings &settings, WMi18n &i18n)
function InitWindowsComponents (line 75) | static bool InitWindowsComponents()
function wWinMain (line 90) | int WINAPI wWinMain(
FILE: WinMute/WinMute.cpp
function LRESULT (line 49) | static LRESULT CALLBACK WinMuteWndProc(
function IsCurrentSessionRemoteable (line 71) | static bool IsCurrentSessionRemoteable() noexcept
function LRESULT (line 441) | LRESULT WinMute::OnCommand(HWND hWnd, WPARAM wParam, LPARAM)
function LRESULT (line 533) | LRESULT WinMute::OnTrayIcon(HWND hWnd, WPARAM, LPARAM lParam)
function LRESULT (line 549) | LRESULT WinMute::OnUpdatePopup(HWND hWnd, WPARAM, LPARAM lParam)
function LRESULT (line 566) | LRESULT WinMute::OnSettingChange(HWND, WPARAM, LPARAM)
function LRESULT (line 571) | LRESULT WinMute::OnPowerBroadcast(HWND, WPARAM wParam, LPARAM lParam)
function LRESULT (line 591) | LRESULT WinMute::OnQuietHours(HWND, UINT msg, WPARAM, LPARAM)
function LRESULT (line 617) | LRESULT WinMute::OnDeviceChange(HWND, UINT msg, WPARAM wParam, LPARAM lP...
function LRESULT (line 630) | LRESULT WinMute::OnWifiStatusChange(HWND, WPARAM wParam, LPARAM lParam)
function LRESULT (line 661) | LRESULT CALLBACK WinMute::WindowProc(
FILE: WinMute/WinMute.h
function class (line 40) | class WinMute {
FILE: WinMute/libs/json.hpp
function NLOHMANN_JSON_NAMESPACE_BEGIN (line 247) | NLOHMANN_JSON_NAMESPACE_BEGIN
function NLOHMANN_JSON_NAMESPACE_END (line 258) | NLOHMANN_JSON_NAMESPACE_END
type would_call_std_ (line 2814) | struct would_call_std_
type value_t (line 2872) | enum class value_t : std::uint8_t
function NLOHMANN_JSON_NAMESPACE_END (line 2937) | NLOHMANN_JSON_NAMESPACE_END
function NLOHMANN_JSON_NAMESPACE_BEGIN (line 3030) | NLOHMANN_JSON_NAMESPACE_BEGIN
function NLOHMANN_JSON_NAMESPACE_BEGIN (line 3076) | NLOHMANN_JSON_NAMESPACE_BEGIN
function NLOHMANN_JSON_NAMESPACE_BEGIN (line 3267) | NLOHMANN_JSON_NAMESPACE_BEGIN
class json_pointer (line 3416) | class json_pointer
type ordered_map (line 3427) | struct ordered_map
function NLOHMANN_JSON_NAMESPACE_BEGIN (line 3438) | NLOHMANN_JSON_NAMESPACE_BEGIN
function NLOHMANN_JSON_NAMESPACE_BEGIN (line 4230) | NLOHMANN_JSON_NAMESPACE_BEGIN
function NLOHMANN_JSON_NAMESPACE_END (line 4358) | NLOHMANN_JSON_NAMESPACE_END
function NLOHMANN_JSON_NAMESPACE_END (line 4590) | NLOHMANN_JSON_NAMESPACE_END
function NLOHMANN_JSON_NAMESPACE_BEGIN (line 4636) | NLOHMANN_JSON_NAMESPACE_BEGIN
function NLOHMANN_JSON_NAMESPACE_BEGIN (line 4644) | NLOHMANN_JSON_NAMESPACE_BEGIN
function NLOHMANN_JSON_NAMESPACE_BEGIN (line 4659) | NLOHMANN_JSON_NAMESPACE_BEGIN
function NLOHMANN_JSON_NAMESPACE_BEGIN (line 5174) | NLOHMANN_JSON_NAMESPACE_BEGIN
function NLOHMANN_JSON_NAMESPACE_END (line 5356) | NLOHMANN_JSON_NAMESPACE_END
function NLOHMANN_JSON_NAMESPACE_BEGIN (line 5404) | NLOHMANN_JSON_NAMESPACE_BEGIN
type adl_serializer (line 5832) | struct adl_serializer
method from_json (line 5837) | static auto from_json(BasicJsonType && j, TargetType& val) noexcept(
method from_json (line 5847) | static auto from_json(BasicJsonType && j) noexcept(
method to_json (line 5857) | static auto to_json(BasicJsonType& j, TargetType && val) noexcept(
function set_subtype (line 5938) | void set_subtype(subtype_type subtype_) noexcept
function subtype_type (line 5946) | constexpr subtype_type subtype() const noexcept
function has_subtype (line 5953) | constexpr bool has_subtype() const noexcept
function clear_subtype (line 5960) | void clear_subtype() noexcept
function NLOHMANN_JSON_NAMESPACE_BEGIN (line 5999) | NLOHMANN_JSON_NAMESPACE_BEGIN
function NLOHMANN_JSON_NAMESPACE_BEGIN (line 6171) | NLOHMANN_JSON_NAMESPACE_BEGIN
function json_sax_dom_parser (line 6813) | explicit json_sax_dom_parser(BasicJsonType& r, const bool allow_exceptio...
function json_sax_dom_parser (line 6818) | json_sax_dom_parser(const json_sax_dom_parser&) = delete;
function json_sax_dom_parser (line 6819) | json_sax_dom_parser(json_sax_dom_parser&&) = default;
function null (line 6824) | bool null()
function boolean (line 6830) | bool boolean(bool val)
function number_integer (line 6836) | bool number_integer(number_integer_t val)
function number_unsigned (line 6842) | bool number_unsigned(number_unsigned_t val)
function number_float (line 6848) | bool number_float(number_float_t val, const string_t& /*unused*/)
function string (line 6854) | bool string(string_t& val)
function binary (line 6860) | bool binary(binary_t& val)
function start_object (line 6866) | bool start_object(std::size_t len)
function key (line 6878) | bool key(string_t& val)
function end_object (line 6888) | bool end_object()
function start_array (line 6898) | bool start_array(std::size_t len)
function end_array (line 6910) | bool end_array()
function parse_error (line 6921) | bool parse_error(std::size_t /*unused*/, const std::string& /*unused*/,
function is_errored (line 6933) | constexpr bool is_errored() const
class json_sax_dom_callback_parser (line 6982) | class json_sax_dom_callback_parser
method json_sax_dom_callback_parser (line 6993) | json_sax_dom_callback_parser(BasicJsonType& r,
method json_sax_dom_callback_parser (line 7002) | json_sax_dom_callback_parser(const json_sax_dom_callback_parser&) = de...
method json_sax_dom_callback_parser (line 7003) | json_sax_dom_callback_parser(json_sax_dom_callback_parser&&) = default;
method json_sax_dom_callback_parser (line 7004) | json_sax_dom_callback_parser& operator=(const json_sax_dom_callback_pa...
method json_sax_dom_callback_parser (line 7005) | json_sax_dom_callback_parser& operator=(json_sax_dom_callback_parser&&...
method null (line 7008) | bool null()
method boolean (line 7014) | bool boolean(bool val)
method number_integer (line 7020) | bool number_integer(number_integer_t val)
method number_unsigned (line 7026) | bool number_unsigned(number_unsigned_t val)
method number_float (line 7032) | bool number_float(number_float_t val, const string_t& /*unused*/)
method string (line 7038) | bool string(string_t& val)
method binary (line 7044) | bool binary(binary_t& val)
method start_object (line 7050) | bool start_object(std::size_t len)
method key (line 7068) | bool key(string_t& val)
method end_object (line 7085) | bool end_object()
method start_array (line 7121) | bool start_array(std::size_t len)
method end_array (line 7138) | bool end_array()
method parse_error (line 7171) | bool parse_error(std::size_t /*unused*/, const std::string& /*unused*/,
method is_errored (line 7183) | constexpr bool is_errored() const
method handle_value (line 7205) | std::pair<bool, BasicJsonType*> handle_value(Value&& v, const bool ski...
class json_sax_acceptor (line 7289) | class json_sax_acceptor
method null (line 7298) | bool null()
method boolean (line 7303) | bool boolean(bool /*unused*/)
method number_integer (line 7308) | bool number_integer(number_integer_t /*unused*/)
method number_unsigned (line 7313) | bool number_unsigned(number_unsigned_t /*unused*/)
method number_float (line 7318) | bool number_float(number_float_t /*unused*/, const string_t& /*unused*/)
method string (line 7323) | bool string(string_t& /*unused*/)
method binary (line 7328) | bool binary(binary_t& /*unused*/)
method start_object (line 7333) | bool start_object(std::size_t /*unused*/ = static_cast<std::size_t>(-1))
method key (line 7338) | bool key(string_t& /*unused*/)
method end_object (line 7343) | bool end_object()
method start_array (line 7348) | bool start_array(std::size_t /*unused*/ = static_cast<std::size_t>(-1))
method end_array (line 7353) | bool end_array()
method parse_error (line 7358) | bool parse_error(std::size_t /*unused*/, const std::string& /*unused*/...
function NLOHMANN_JSON_NAMESPACE_BEGIN (line 7397) | NLOHMANN_JSON_NAMESPACE_BEGIN
function reset (line 8693) | void reset() noexcept
function char_int_type (line 8710) | char_int_type get()
function unget (line 8747) | void unget()
function add (line 8774) | void add(char_int_type c)
function number_unsigned_t (line 8791) | constexpr number_unsigned_t get_number_unsigned() const noexcept
function number_float_t (line 8797) | constexpr number_float_t get_number_float() const noexcept
function string_t (line 8803) | string_t& get_string()
function position_t (line 8813) | constexpr position_t get_position() const noexcept
function get_token_string (line 8821) | std::string get_token_string() const
function JSON_HEDLEY_RETURNS_NON_NULL (line 8845) | JSON_HEDLEY_RETURNS_NON_NULL
function skip_bom (line 8859) | bool skip_bom()
function skip_whitespace (line 8873) | void skip_whitespace()
function token_type (line 8882) | token_type scan()
function NLOHMANN_JSON_NAMESPACE_BEGIN (line 9031) | NLOHMANN_JSON_NAMESPACE_BEGIN
function NLOHMANN_JSON_NAMESPACE_END (line 9171) | NLOHMANN_JSON_NAMESPACE_END
function NLOHMANN_JSON_NAMESPACE_BEGIN (line 12196) | NLOHMANN_JSON_NAMESPACE_BEGIN
function NLOHMANN_JSON_NAMESPACE_BEGIN (line 12720) | NLOHMANN_JSON_NAMESPACE_BEGIN
function NLOHMANN_JSON_NAMESPACE_END (line 12836) | NLOHMANN_JSON_NAMESPACE_END
function NLOHMANN_JSON_NAMESPACE_BEGIN (line 12891) | NLOHMANN_JSON_NAMESPACE_BEGIN
function pointer (line 13193) | pointer operator->() const
function iter_impl (line 13235) | iter_impl operator++(int)& // NOLINT(cert-dcl21-cpp)
function iter_impl (line 13246) | iter_impl& operator++()
function iter_impl (line 13286) | iter_impl operator--(int)& // NOLINT(cert-dcl21-cpp)
function iter_impl (line 13297) | iter_impl& operator--()
function iter_impl (line 13445) | iter_impl& operator+=(difference_type i)
function iter_impl (line 13482) | iter_impl& operator-=(difference_type i)
function iter_impl (line 13491) | iter_impl operator+(difference_type i) const
function friend (line 13502) | friend iter_impl operator+(difference_type i, const iter_impl& it)
function iter_impl (line 13513) | iter_impl operator-(difference_type i) const
function difference_type (line 13524) | difference_type operator-(const iter_impl& other) const
function reference (line 13553) | reference operator[](difference_type n) const
function reference (line 13607) | reference value() const
function NLOHMANN_JSON_NAMESPACE_BEGIN (line 13642) | NLOHMANN_JSON_NAMESPACE_BEGIN
function NLOHMANN_JSON_NAMESPACE_BEGIN (line 13775) | NLOHMANN_JSON_NAMESPACE_BEGIN
function NLOHMANN_JSON_NAMESPACE_BEGIN (line 13836) | NLOHMANN_JSON_NAMESPACE_BEGIN
function NLOHMANN_BASIC_JSON_TPL_DECLARATION (line 13856) | NLOHMANN_BASIC_JSON_TPL_DECLARATION
function json_pointer (line 13868) | explicit json_pointer(const string_t& s = "")
function string_t (line 13874) | string_t to_string() const
function friend (line 13895) | friend std::ostream& operator<<(std::ostream& o, const json_pointer& ptr)
function json_pointer (line 13904) | json_pointer& operator/=(const json_pointer& ptr)
function json_pointer (line 13914) | json_pointer& operator/=(string_t token)
function json_pointer (line 13922) | json_pointer& operator/=(std::size_t array_idx)
function friend (line 13929) | friend json_pointer operator/(const json_pointer& lhs,
function friend (line 13937) | friend json_pointer operator/(const json_pointer& lhs, string_t token) /...
function friend (line 13944) | friend json_pointer operator/(const json_pointer& lhs, std::size_t array...
function json_pointer (line 13951) | json_pointer parent_pointer() const
function pop_back (line 13965) | void pop_back()
function string_t (line 13977) | const string_t& back() const
function push_back (line 13989) | void push_back(const string_t& token)
function push_back (line 13996) | void push_back(string_t&& token)
function empty (line 14003) | bool empty() const noexcept
function BasicJsonType (line 14080) | BasicJsonType& get_and_create(BasicJsonType& j) const
function BasicJsonType (line 14160) | BasicJsonType& get_unchecked(BasicJsonType* ptr) const
function BasicJsonType (line 14228) | BasicJsonType& get_checked(BasicJsonType* ptr) const
function BasicJsonType (line 14286) | const BasicJsonType& get_unchecked(const BasicJsonType* ptr) const
function BasicJsonType (line 14335) | const BasicJsonType& get_checked(const BasicJsonType* ptr) const
function contains (line 14384) | bool contains(const BasicJsonType* ptr) const
function split (line 14472) | static std::vector<string_t> split(const string_t& reference_string)
function BasicJsonType (line 14612) | static BasicJsonType
function convert (line 14641) | json_pointer<string_t> convert() const&
function convert (line 14648) | json_pointer<string_t> convert()&&
function NLOHMANN_JSON_NAMESPACE_BEGIN (line 14815) | NLOHMANN_JSON_NAMESPACE_BEGIN
function NLOHMANN_JSON_NAMESPACE_BEGIN (line 14940) | NLOHMANN_JSON_NAMESPACE_BEGIN
function NLOHMANN_JSON_NAMESPACE_END (line 15062) | NLOHMANN_JSON_NAMESPACE_END
function NLOHMANN_JSON_NAMESPACE_BEGIN (line 16929) | NLOHMANN_JSON_NAMESPACE_BEGIN
function NLOHMANN_JSON_NAMESPACE_END (line 18026) | NLOHMANN_JSON_NAMESPACE_END
function hex_bytes (line 18686) | static std::string hex_bytes(std::uint8_t byte)
function is_negative_number (line 18697) | bool is_negative_number(NumberType x)
function is_negative_number (line 18703) | bool is_negative_number(NumberType /*unused*/)
function dump_integer (line 18723) | void dump_integer(NumberType x)
function dump_float (line 18808) | void dump_float(number_float_t x)
function dump_float (line 18829) | void dump_float(number_float_t x, std::true_type /*is_ieee_single_or_dou...
function dump_float (line 18837) | void dump_float(number_float_t x, std::false_type /*is_ieee_single_or_do...
function decode (line 18909) | static std::uint8_t decode(std::uint8_t& state, std::uint32_t& codep, co...
function number_unsigned_t (line 18949) | number_unsigned_t remove_sign(number_unsigned_t x)
function number_unsigned_t (line 18964) | inline number_unsigned_t remove_sign(number_integer_t x) noexcept
function ordered_map (line 19051) | ordered_map() noexcept(noexcept(Container())) : Container{} {}
function ordered_map (line 19052) | explicit ordered_map(const Allocator& alloc) noexcept(noexcept(Container...
function ordered_map (line 19054) | ordered_map(It first, It last, const Allocator& alloc = Allocator())
function ordered_map (line 19056) | ordered_map(std::initializer_list<value_type> init, const Allocator& all...
function emplace (line 19059) | std::pair<iterator, bool> emplace(const key_type& key, T&& t)
function emplace (line 19074) | std::pair<iterator, bool> emplace(KeyType && key, T && t)
function T (line 19087) | T& operator[](const key_type& key)
function T (line 19094) | T & operator[](KeyType && key)
function T (line 19099) | const T& operator[](const key_type& key) const
function T (line 19106) | const T & operator[](KeyType && key) const
function T (line 19111) | T& at(const key_type& key)
function T (line 19126) | T & at(KeyType && key) // NOLINT(cppcoreguidelines-missing-std-forward)
function T (line 19139) | const T& at(const key_type& key) const
function T (line 19154) | const T & at(KeyType && key) const // NOLINT(cppcoreguidelines-missing-s...
function size_type (line 19167) | size_type erase(const key_type& key)
function size_type (line 19188) | size_type erase(KeyType && key) // NOLINT(cppcoreguidelines-missing-std-...
function iterator (line 19207) | iterator erase(iterator pos)
function iterator (line 19212) | iterator erase(iterator first, iterator last)
function size_type (line 19265) | size_type count(const key_type& key) const
function size_type (line 19279) | size_type count(KeyType && key) const // NOLINT(cppcoreguidelines-missin...
function iterator (line 19291) | iterator find(const key_type& key)
function iterator (line 19305) | iterator find(KeyType && key) // NOLINT(cppcoreguidelines-missing-std-fo...
function const_iterator (line 19317) | const_iterator find(const key_type& key) const
function insert (line 19329) | std::pair<iterator, bool> insert( value_type&& value )
function insert (line 19334) | std::pair<iterator, bool> insert( const value_type& value )
function insert (line 19352) | void insert(InputIt first, InputIt last)
function NLOHMANN_JSON_NAMESPACE_BEGIN (line 19379) | NLOHMANN_JSON_NAMESPACE_BEGIN
function set_parents (line 20006) | void set_parents()
function iterator (line 20043) | iterator set_parents(iterator it, typename iterator::difference_type cou...
function reference (line 20056) | reference set_parent(reference j, std::size_t old_capacity = static_cast...
function basic_json (line 20118) | basic_json(const value_t v)
function basic_json (line 20126) | basic_json(std::nullptr_t = nullptr) noexcept // NOLINT(bugprone-excepti...
function basic_json (line 20138) | basic_json(CompatibleType && val) noexcept(noexcept( // NOLINT(bugprone-...
function basic_json (line 20152) | basic_json(const BasicJsonType& val)
function basic_json (line 20205) | basic_json(initializer_list_t init,
function JSON_HEDLEY_WARN_UNUSED_RESULT (line 20263) | JSON_HEDLEY_WARN_UNUSED_RESULT
function JSON_HEDLEY_WARN_UNUSED_RESULT (line 20274) | JSON_HEDLEY_WARN_UNUSED_RESULT
function JSON_HEDLEY_WARN_UNUSED_RESULT (line 20285) | JSON_HEDLEY_WARN_UNUSED_RESULT
function JSON_HEDLEY_WARN_UNUSED_RESULT (line 20296) | JSON_HEDLEY_WARN_UNUSED_RESULT
function JSON_HEDLEY_WARN_UNUSED_RESULT (line 20307) | JSON_HEDLEY_WARN_UNUSED_RESULT
function JSON_HEDLEY_WARN_UNUSED_RESULT (line 20315) | JSON_HEDLEY_WARN_UNUSED_RESULT
function basic_json (line 20323) | basic_json(size_type cnt, const basic_json& val):
function basic_json (line 20335) | basic_json(InputIT first, InputIT last)
function basic_json (line 20444) | basic_json(const JsonRef& ref) : basic_json(ref.moved_or_copied()) {}
function basic_json (line 20448) | basic_json(const basic_json& other)
function basic_json (line 20517) | basic_json(basic_json&& other) noexcept
function basic_json (line 20534) | basic_json& operator=(basic_json other) noexcept (
function value_t (line 20597) | constexpr value_t type() const noexcept
function is_primitive (line 20604) | constexpr bool is_primitive() const noexcept
function is_structured (line 20611) | constexpr bool is_structured() const noexcept
function is_null (line 20618) | constexpr bool is_null() const noexcept
function is_boolean (line 20625) | constexpr bool is_boolean() const noexcept
function is_number (line 20632) | constexpr bool is_number() const noexcept
function is_number_integer (line 20639) | constexpr bool is_number_integer() const noexcept
function is_number_unsigned (line 20646) | constexpr bool is_number_unsigned() const noexcept
function is_number_float (line 20653) | constexpr bool is_number_float() const noexcept
function is_object (line 20660) | constexpr bool is_object() const noexcept
function is_array (line 20667) | constexpr bool is_array() const noexcept
function is_string (line 20674) | constexpr bool is_string() const noexcept
function is_binary (line 20681) | constexpr bool is_binary() const noexcept
function is_discarded (line 20688) | constexpr bool is_discarded() const noexcept
function object_t (line 20719) | object_t* get_impl_ptr(object_t* /*unused*/) noexcept
function object_t (line 20725) | constexpr const object_t* get_impl_ptr(const object_t* /*unused*/) const...
function array_t (line 20731) | array_t* get_impl_ptr(array_t* /*unused*/) noexcept
function array_t (line 20737) | constexpr const array_t* get_impl_ptr(const array_t* /*unused*/) const n...
function string_t (line 20743) | string_t* get_impl_ptr(string_t* /*unused*/) noexcept
function string_t (line 20749) | constexpr const string_t* get_impl_ptr(const string_t* /*unused*/) const...
function boolean_t (line 20755) | boolean_t* get_impl_ptr(boolean_t* /*unused*/) noexcept
function boolean_t (line 20761) | constexpr const boolean_t* get_impl_ptr(const boolean_t* /*unused*/) con...
function number_integer_t (line 20767) | number_integer_t* get_impl_ptr(number_integer_t* /*unused*/) noexcept
function number_integer_t (line 20773) | constexpr const number_integer_t* get_impl_ptr(const number_integer_t* /...
function number_unsigned_t (line 20779) | number_unsigned_t* get_impl_ptr(number_unsigned_t* /*unused*/) noexcept
function number_unsigned_t (line 20785) | constexpr const number_unsigned_t* get_impl_ptr(const number_unsigned_t*...
function number_float_t (line 20791) | number_float_t* get_impl_ptr(number_float_t* /*unused*/) noexcept
function number_float_t (line 20797) | constexpr const number_float_t* get_impl_ptr(const number_float_t* /*unu...
function binary_t (line 20803) | binary_t* get_impl_ptr(binary_t* /*unused*/) noexcept
function binary_t (line 20809) | constexpr const binary_t* get_impl_ptr(const binary_t* /*unused*/) const...
function ReferenceType (line 20826) | static ReferenceType get_ref_impl(ThisType& obj)
function get_ptr (line 20859) | constexpr auto get_ptr() const noexcept -> decltype(std::declval<const b...
function ValueType (line 20951) | ValueType get_impl(detail::priority_tag<1> /*unused*/) const noexcept(no...
function BasicJsonType (line 20976) | BasicJsonType get_impl(detail::priority_tag<2> /*unused*/) const
function basic_json (line 20999) | basic_json get_impl(detail::priority_tag<3> /*unused*/) const
function get_impl (line 21012) | constexpr auto get_impl(detail::priority_tag<4> /*unused*/) const noexcept
function get (line 21088) | auto get() noexcept -> decltype(std::declval<basic_json_t&>().template g...
function ValueType (line 21101) | ValueType & get_to(ValueType& v) const noexcept(noexcept(
function ValueType (line 21114) | ValueType & get_to(ValueType& v) const
function Array (line 21125) | Array get_to(T (&v)[N]) const // NOLINT(cppcoreguidelines-avoid-c-arrays...
function ReferenceType (line 21137) | ReferenceType get_ref()
function ReferenceType (line 21148) | ReferenceType get_ref() const
function binary_t (line 21207) | binary_t& get_binary()
function binary_t (line 21219) | const binary_t& get_binary() const
function reference (line 21241) | reference at(size_type idx)
function const_reference (line 21264) | const_reference at(size_type idx) const
function reference (line 21287) | reference at(const typename object_t::key_type& key)
function reference (line 21307) | reference at(KeyType && key)
function const_reference (line 21325) | const_reference at(const typename object_t::key_type& key) const
function const_reference (line 21345) | const_reference at(KeyType && key) const
function reference (line 21363) | reference operator[](size_type idx)
function const_reference (line 21409) | const_reference operator[](size_type idx) const
function reference (line 21422) | reference operator[](typename object_t::key_type key)
function const_reference (line 21444) | const_reference operator[](const typename object_t::key_type& key) const
function reference (line 21460) | reference operator[](T* key)
function const_reference (line 21466) | const_reference operator[](T* key) const
function reference (line 21475) | reference operator[](KeyType && key)
function const_reference (line 21499) | const_reference operator[](KeyType && key) const
class ValueType (line 21525) | class ValueType
function ReturnType (line 21554) | ReturnType value(const typename object_t::key_type& key, ValueType && de...
function ValueType (line 21580) | ValueType value(KeyType && key, const ValueType& default_value) const
function ReturnType (line 21607) | ReturnType value(KeyType && key, ValueType && default_value) const
function ValueType (line 21630) | ValueType value(const json_pointer& ptr, const ValueType& default_value)...
function ReturnType (line 21655) | ReturnType value(const json_pointer& ptr, ValueType && default_value) const
function ValueType (line 21679) | ValueType value(const ::nlohmann::json_pointer<BasicJsonType>& ptr, cons...
function ReturnType (line 21690) | ReturnType value(const ::nlohmann::json_pointer<BasicJsonType>& ptr, Val...
function reference (line 21697) | reference front()
function const_reference (line 21704) | const_reference front() const
function reference (line 21711) | reference back()
function const_reference (line 21720) | const_reference back() const
function IteratorType (line 21732) | IteratorType erase(IteratorType pos)
function IteratorType (line 21802) | IteratorType erase(IteratorType first, IteratorType last)
function erase_internal (line 21870) | private:
function size_type (line 21886) | size_type erase_internal(KeyType && key)
function size_type (line 21918) | size_type erase(KeyType && key)
function erase (line 21925) | void erase(const size_type idx)
function iterator (line 21954) | iterator find(const typename object_t::key_type& key)
function const_iterator (line 21968) | const_iterator find(const typename object_t::key_type& key) const
function iterator (line 21984) | iterator find(KeyType && key)
function const_iterator (line 22000) | const_iterator find(KeyType && key) const
function size_type (line 22014) | size_type count(const typename object_t::key_type& key) const
function size_type (line 22024) | size_type count(KeyType && key) const
function contains (line 22032) | bool contains(const typename object_t::key_type& key) const
function contains (line 22041) | bool contains(KeyType && key) const
function contains (line 22048) | bool contains(const json_pointer& ptr) const
function contains (line 22055) | bool contains(const typename ::nlohmann::json_pointer<BasicJsonType>& pt...
function iterator (line 22071) | iterator begin() noexcept
function const_iterator (line 22080) | const_iterator begin() const noexcept
function const_iterator (line 22087) | const_iterator cbegin() const noexcept
function iterator (line 22096) | iterator end() noexcept
function const_iterator (line 22105) | const_iterator end() const noexcept
function const_iterator (line 22112) | const_iterator cend() const noexcept
function reverse_iterator (line 22121) | reverse_iterator rbegin() noexcept
function const_reverse_iterator (line 22128) | const_reverse_iterator rbegin() const noexcept
function reverse_iterator (line 22135) | reverse_iterator rend() noexcept
function const_reverse_iterator (line 22142) | const_reverse_iterator rend() const noexcept
function const_reverse_iterator (line 22149) | const_reverse_iterator crbegin() const noexcept
function const_reverse_iterator (line 22156) | const_reverse_iterator crend() const noexcept
function iterator_wrapper (line 22168) | static iteration_proxy<iterator> iterator_wrapper(reference ref) noexcept
function iterator_wrapper (line 22179) | static iteration_proxy<const_iterator> iterator_wrapper(const_reference ...
function items (line 22186) | iteration_proxy<iterator> items() noexcept
function items (line 22193) | iteration_proxy<const_iterator> items() const noexcept
function empty (line 22209) | bool empty() const noexcept
function size_type (line 22248) | size_type size() const noexcept
function size_type (line 22287) | size_type max_size() const noexcept
function clear (line 22330) | void clear() noexcept
function push_back (line 22391) | void push_back(basic_json&& val)
function reference (line 22416) | reference operator+=(basic_json&& val)
function push_back (line 22424) | void push_back(const basic_json& val)
function reference (line 22448) | reference operator+=(const basic_json& val)
function push_back (line 22456) | void push_back(const typename object_t::value_type& val)
function reference (line 22479) | reference operator+=(const typename object_t::value_type& val)
function push_back (line 22487) | void push_back(initializer_list_t init)
function reference (line 22503) | reference operator+=(initializer_list_t init)
function reference (line 22512) | reference emplace_back(Args&& ... args)
function emplace (line 22537) | std::pair<iterator, bool> emplace(Args&& ... args)
function iterator (line 22569) | iterator insert_iterator(const_iterator pos, Args&& ... args)
function iterator (line 22588) | iterator insert(const_iterator pos, const basic_json& val)
function iterator (line 22608) | iterator insert(const_iterator pos, basic_json&& val)
function iterator (line 22615) | iterator insert(const_iterator pos, size_type cnt, const basic_json& val)
function iterator (line 22635) | iterator insert(const_iterator pos, const_iterator first, const_iterator...
function iterator (line 22666) | iterator insert(const_iterator pos, initializer_list_t ilist)
function insert (line 22686) | void insert(const_iterator first, const_iterator last)
function update (line 22711) | void update(const_reference j, bool merge_objects = false)
function update (line 22718) | void update(const_iterator first, const_iterator last, bool merge_object...
function swap (line 22765) | void swap(reference other) noexcept (
function friend (line 22782) | friend void swap(reference left, reference right) noexcept (
function swap (line 22794) | void swap(array_t& other) // NOLINT(bugprone-exception-escape,cppcoregui...
function swap (line 22810) | void swap(object_t& other) // NOLINT(bugprone-exception-escape,cppcoregu...
function swap (line 22826) | void swap(string_t& other) // NOLINT(bugprone-exception-escape,cppcoregu...
function swap (line 22842) | void swap(binary_t& other) // NOLINT(bugprone-exception-escape,cppcoregu...
function swap (line 22858) | void swap(typename binary_t::container_type& other) // NOLINT(bugprone-e...
function else (line 22947) | else if(compares_unordered(lhs, rhs))\
function compares_unordered (line 22976) | bool compares_unordered(const_reference rhs, bool inverse = false) const...
function friend (line 23089) | friend bool operator==(const_reference lhs, const_reference rhs) noexcept
function friend (line 23121) | friend bool operator!=(const_reference lhs, const_reference rhs) noexcept
function friend (line 23178) | friend bool operator<=(const_reference lhs, const_reference rhs) noexcept
function friend (line 23207) | friend bool operator>(const_reference lhs, const_reference rhs) noexcept
function friend (line 23237) | friend bool operator>=(const_reference lhs, const_reference rhs) noexcept
function friend (line 23278) | friend std::ostream& operator<<(std::ostream& o, const basic_json& j)
function JSON_HEDLEY_WARN_UNUSED_RESULT (line 23317) | JSON_HEDLEY_WARN_UNUSED_RESULT
function JSON_HEDLEY_WARN_UNUSED_RESULT (line 23331) | JSON_HEDLEY_WARN_UNUSED_RESULT
function basic_json (line 23345) | static basic_json parse(detail::span_input_adapter&& i,
function accept (line 23358) | static bool accept(InputType&& i,
function accept (line 23367) | static bool accept(IteratorType first, IteratorType last,
function accept (line 23375) | static bool accept(detail::span_input_adapter&& i,
function sax_parse (line 23385) | static bool sax_parse(InputType&& i, SAX* sax,
function sax_parse (line 23400) | static bool sax_parse(IteratorType first, IteratorType last, SAX* sax,
function sax_parse (line 23419) | static bool sax_parse(detail::span_input_adapter&& i, SAX* sax,
function JSON_HEDLEY_RETURNS_NON_NULL (line 23460) | JSON_HEDLEY_RETURNS_NON_NULL
type data (line 23492) | struct data
method data (line 23500) | data(const value_t v)
method data (line 23505) | data(size_type cnt, const basic_json& val)
method data (line 23511) | data() noexcept = default;
method data (line 23512) | data(data&&) noexcept = default;
method data (line 23513) | data(const data&) noexcept = delete;
method data (line 23514) | data& operator=(data&&) noexcept = delete;
method data (line 23515) | data& operator=(const data&) noexcept = delete;
function to_cbor (line 23549) | static void to_cbor(const basic_json& j, detail::output_adapter<std::uin...
function to_cbor (line 23556) | static void to_cbor(const basic_json& j, detail::output_adapter<char> o)
function to_msgpack (line 23563) | static std::vector<std::uint8_t> to_msgpack(const basic_json& j)
function to_msgpack (line 23572) | static void to_msgpack(const basic_json& j, detail::output_adapter<std::...
function to_msgpack (line 23579) | static void to_msgpack(const basic_json& j, detail::output_adapter<char> o)
function to_ubjson (line 23586) | static std::vector<std::uint8_t> to_ubjson(const basic_json& j,
function to_ubjson (line 23597) | static void to_ubjson(const basic_json& j, detail::output_adapter<std::u...
function to_ubjson (line 23605) | static void to_ubjson(const basic_json& j, detail::output_adapter<char> o,
function to_bjdata (line 23613) | static std::vector<std::uint8_t> to_bjdata(const basic_json& j,
function to_bjdata (line 23624) | static void to_bjdata(const basic_json& j, detail::output_adapter<std::u...
function to_bjdata (line 23632) | static void to_bjdata(const basic_json& j, detail::output_adapter<char> o,
function to_bson (line 23640) | static std::vector<std::uint8_t> to_bson(const basic_json& j)
function to_bson (line 23649) | static void to_bson(const basic_json& j, detail::output_adapter<std::uin...
function to_bson (line 23656) | static void to_bson(const basic_json& j, detail::output_adapter<char> o)
function JSON_HEDLEY_WARN_UNUSED_RESULT (line 23664) | JSON_HEDLEY_WARN_UNUSED_RESULT
function JSON_HEDLEY_WARN_UNUSED_RESULT (line 23680) | JSON_HEDLEY_WARN_UNUSED_RESULT
function basic_json (line 23696) | static basic_json from_cbor(const T* ptr, std::size_t len,
function basic_json (line 23706) | static basic_json from_cbor(detail::span_input_adapter&& i,
function JSON_HEDLEY_WARN_UNUSED_RESULT (line 23722) | JSON_HEDLEY_WARN_UNUSED_RESULT
function JSON_HEDLEY_WARN_UNUSED_RESULT (line 23737) | JSON_HEDLEY_WARN_UNUSED_RESULT
function basic_json (line 23752) | static basic_json from_msgpack(const T* ptr, std::size_t len,
function basic_json (line 23761) | static basic_json from_msgpack(detail::span_input_adapter&& i,
function JSON_HEDLEY_WARN_UNUSED_RESULT (line 23776) | JSON_HEDLEY_WARN_UNUSED_RESULT
function JSON_HEDLEY_WARN_UNUSED_RESULT (line 23791) | JSON_HEDLEY_WARN_UNUSED_RESULT
function basic_json (line 23806) | static basic_json from_ubjson(const T* ptr, std::size_t len,
function basic_json (line 23815) | static basic_json from_ubjson(detail::span_input_adapter&& i,
function JSON_HEDLEY_WARN_UNUSED_RESULT (line 23830) | JSON_HEDLEY_WARN_UNUSED_RESULT
function JSON_HEDLEY_WARN_UNUSED_RESULT (line 23845) | JSON_HEDLEY_WARN_UNUSED_RESULT
function JSON_HEDLEY_WARN_UNUSED_RESULT (line 23860) | JSON_HEDLEY_WARN_UNUSED_RESULT
function JSON_HEDLEY_WARN_UNUSED_RESULT (line 23875) | JSON_HEDLEY_WARN_UNUSED_RESULT
function basic_json (line 23890) | static basic_json from_bson(const T* ptr, std::size_t len,
function basic_json (line 23899) | static basic_json from_bson(detail::span_input_adapter&& i,
function reference (line 23921) | reference operator[](const json_pointer& ptr)
function reference (line 23928) | reference operator[](const ::nlohmann::json_pointer<BasicJsonType>& ptr)
function const_reference (line 23935) | const_reference operator[](const json_pointer& ptr) const
function const_reference (line 23942) | const_reference operator[](const ::nlohmann::json_pointer<BasicJsonType>...
function reference (line 23949) | reference at(const json_pointer& ptr)
function reference (line 23956) | reference at(const ::nlohmann::json_pointer<BasicJsonType>& ptr)
function const_reference (line 23963) | const_reference at(const json_pointer& ptr) const
function const_reference (line 23970) | const_reference at(const ::nlohmann::json_pointer<BasicJsonType>& ptr) c...
function basic_json (line 23977) | basic_json flatten() const
function basic_json (line 23986) | basic_json unflatten() const
function patch_inplace (line 24002) | void patch_inplace(const basic_json& json_patch)
function basic_json (line 24273) | basic_json patch(const basic_json& json_patch) const
function JSON_HEDLEY_WARN_UNUSED_RESULT (line 24282) | JSON_HEDLEY_WARN_UNUSED_RESULT
function merge_patch (line 24425) | void merge_patch(const basic_json& apply_patch)
function NLOHMANN_BASIC_JSON_TPL_DECLARATION (line 24456) | NLOHMANN_BASIC_JSON_TPL_DECLARATION
function NLOHMANN_JSON_NAMESPACE_END (line 24493) | NLOHMANN_JSON_NAMESPACE_END
Condensed preview — 108 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,505K chars).
[
{
"path": ".editorconfig",
"chars": 272,
"preview": "[*.{c,c++,cc,cpp,cxx,h,h++,hh,hpp,hxx,inl,ipp,tlh,tli}]\nvc_generate_documentation_comments = doxygen_triple_slash\nend_of"
},
{
"path": ".gitattributes",
"chars": 715,
"preview": "# Set the default behavior, in case people don't have core.autolf set.\n* text=auto eol=lf\n\n# *.gitignore text eol=lf\n# *"
},
{
"path": ".github/FUNDING.yml",
"chars": 59,
"preview": "github: lx-s\ncustom: [\"https://paypal.me/AlexSteinhoefer\"]\n"
},
{
"path": ".github/ISSUE_TEMPLATE/bug_report.md",
"chars": 632,
"preview": "---\nname: Bug report\nabout: Create a report to help us improve\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\n**Describe the b"
},
{
"path": ".github/ISSUE_TEMPLATE/feature_request.md",
"chars": 595,
"preview": "---\nname: Feature request\nabout: Suggest an idea for this project\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\n**Is your fea"
},
{
"path": ".gitignore",
"chars": 284,
"preview": "# Compilation temporaries and binaries\nRelease/\nDebug/\n*.ipdb\n*.iobj\n*.ipdb\n*.aps\n*.opensdf\n*.sdf\n*.suo\n*.exp\n*.pdb\n*.li"
},
{
"path": "CONTRIBUTING.md",
"chars": 1720,
"preview": "# How To Contribute\n\n## New Features\n\nIf you have the next great idea for this little tool, you are welcome to open an\ni"
},
{
"path": "CURRENT_VERSION",
"chars": 268,
"preview": "{\n \"version\": 1,\n \"stable\": {\n \"version\": \"2.5.4.0\",\n \"downloadUrl\": \"https://github.com/lx-s/WinMute/rele"
},
{
"path": "Dist/InnoSetup/translations/info-before.de.txt",
"chars": 262,
"preview": "WinMute benötigt eine installierte Microsoft Visual C++ Laufzeitumgebung.\n\nDiese kann hier unter den folgenden Links h"
},
{
"path": "Dist/InnoSetup/translations/info-before.en.txt",
"chars": 294,
"preview": "Please make sure that the latest Microsoft Visual C++ runtime is installed on your system. \nTo run WinMute only the x64"
},
{
"path": "Dist/InnoSetup/translations/info-before.es.txt",
"chars": 319,
"preview": "Por favor, asegúrese de que la última versión de Microsoft Visual C++ está instalada en su sistema. \nPara ejecutar WinM"
},
{
"path": "Dist/InnoSetup/translations/info-before.fr.txt",
"chars": 332,
"preview": "Assurez-vous que la dernière version du runtime Microsoft Visual C++ est installée sur votre système.\nPour exécuter WinM"
},
{
"path": "Dist/InnoSetup/translations/info-before.it.txt",
"chars": 293,
"preview": "Assicurati che nel sistema sia installata lasione più recente di Microsoft Visual C++. \nPer eseguire WinMute sono neces"
},
{
"path": "Dist/InnoSetup/translations/info-before.ko.txt",
"chars": 230,
"preview": "시스템에 최신 Microsoft Visual C++ 런타임이 설치되어 있는지 확인해 주세요.\nWinMute를 실행하기 위해서는 x64 런타임 파일만 필요합니다.\n\n여기에서 다운로드할 수 있습니다: \n\n* https:"
},
{
"path": "Dist/InnoSetup/translations/info-before.lv.txt",
"chars": 250,
"preview": "Lūdzu, pārliecinieties, ka jūsu sistēmā ir uzstādīta jaunākā Microsoft Visual C++ x64 izpilde.\n\nJūs variet to lejupielā"
},
{
"path": "Dist/InnoSetup/translations/info-before.nl.txt",
"chars": 249,
"preview": "WinMute vereist een geïnstalleerde Microsoft Visual C++-runtimeomgeving.\n\nDeze kan hier via de volgende links worden ge"
},
{
"path": "Dist/InnoSetup/translations/info-before.ro.txt",
"chars": 316,
"preview": "Vă rugăm să vă asigurați că cel mai recent Microsoft Visual C++ runtime este instalat pe sistemul dvs. \n\nPentru a rula W"
},
{
"path": "Dist/InnoSetup/translations/info-before.ru.txt",
"chars": 229,
"preview": "WinMute требует установленной среды выполнения Microsoft Visual C++.\n\nЕе можно скачать по следующим ссылкам:\n\n* https:/"
},
{
"path": "Dist/InnoSetup/translations/info-before.zh_Hans.txt",
"chars": 187,
"preview": "请确保您的系统上安装了最新的Microsoft Visual C++。\n运行WinMute,需要x64支持。\n\n您可以在此处下载: \n\n* https://docs.microsoft.com/cpp/windows/latest-sup"
},
{
"path": "Dist/InnoSetup/winmute-setup-languages.iss",
"chars": 2271,
"preview": "[CustomMessages]\r\nde.StartpAppLogon=WinMute mit Windows starten\r\nen.StartpAppLogon=Start WinMute when you log on\r\nes.Sta"
},
{
"path": "Dist/InnoSetup/winmute-setup.iss",
"chars": 4187,
"preview": "#include \".\\winmute-setup-languages.iss\"\r\n\r\n#define MyAppName \"WinMute\"\r\n#define MyAppExeName \"..\\b"
},
{
"path": "Dist/bin/changelog.txt",
"chars": 6913,
"preview": "Version 2.5.4 (2025-11-12)\n * Fixed: \"Save\" Button not enabling, when adding a new WiFi SSID\n\nVersion 2.5.3 (2025-10-24)"
},
{
"path": "Dist/bin/license.rtf",
"chars": 7689,
"preview": "{\\rtf1\\ansi\\deff3\\adeflang1025\n{\\fonttbl{\\f0\\froman\\fprq2\\fcharset0 Times New Roman;}{\\f1\\froman\\fprq2\\fcharset2 Symbol;"
},
{
"path": "Dist/bin/license.txt",
"chars": 1594,
"preview": " WinMute\n Copyright (C) 2025 Alexander Steinhoefer\n\n----------------------------------------------------------"
},
{
"path": "Dist/bin/update-check.disabled",
"chars": 147,
"preview": "This file should be used, when WinMute is installed via a package manager.\n\nIf this file is present, WinMute does not di"
},
{
"path": "Dist/chocolatey/WinMute.nuspec",
"chars": 1832,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!-- Do not remove this test for UTF-8: if “Ω” doesn’t appear as greek uppercase "
},
{
"path": "Dist/chocolatey/howto.txt",
"chars": 190,
"preview": "choco pack\nchoco push <file> --source https://push.chocolatey.org/\n\n\nGet API-Key from: https://push.chocolatey.org/accou"
},
{
"path": "Dist/chocolatey/tools/VERIFICATION.txt",
"chars": 1294,
"preview": "VERIFICATION\n\nPowershell> Get-ChildItem | Get-FileHash -Algorithm SHA256 | Format-List\n--------------------------------"
},
{
"path": "Dist/chocolatey/tools/chocolateybeforemodify.ps1",
"chars": 27,
"preview": "Stop-Process -Name WinMute"
},
{
"path": "Dist/chocolatey/tools/chocolateyinstall.ps1",
"chars": 1,
"preview": ""
},
{
"path": "Dist/chocolatey/tools/chocolateyuninstall.ps1",
"chars": 183,
"preview": "Stop-Process -Name WinMute\nRemove-Item \"HKCU:\\SOFTWARE\\lx-systems\\WinMute\"\nRemove-ItemProperty -Path \"HKCU:\\SOFTWARE\\Mi"
},
{
"path": "Dist/winget/manifests/l/LX-Systems/WinMute/2.5.0.0/LX-Systems.WinMute.installer.yaml",
"chars": 637,
"preview": "# Created using wingetcreate 1.6.1.0\n# yaml-language-server: $schema=https://aka.ms/winget-manifest.installer.1.6.0.sche"
},
{
"path": "Dist/winget/manifests/l/LX-Systems/WinMute/2.5.0.0/LX-Systems.WinMute.locale.en-US.yaml",
"chars": 956,
"preview": "# Created using wingetcreate 1.6.1.0\n# yaml-language-server: $schema=https://aka.ms/winget-manifest.defaultLocale.1.6.0."
},
{
"path": "Dist/winget/manifests/l/LX-Systems/WinMute/2.5.0.0/LX-Systems.WinMute.yaml",
"chars": 254,
"preview": "# Created using wingetcreate 1.6.1.0\n# yaml-language-server: $schema=https://aka.ms/winget-manifest.version.1.6.0.schema"
},
{
"path": "Dist/winget/manifests/l/LX-Systems/WinMute/2.5.1.0/LX-Systems.WinMute.installer.yaml",
"chars": 611,
"preview": "# Created using wingetcreate 1.6.1.0\n# yaml-language-server: $schema=https://aka.ms/winget-manifest.installer.1.6.0.sche"
},
{
"path": "Dist/winget/manifests/l/LX-Systems/WinMute/2.5.1.0/LX-Systems.WinMute.locale.en-US.yaml",
"chars": 620,
"preview": "# Created using wingetcreate 1.6.1.0\n# yaml-language-server: $schema=https://aka.ms/winget-manifest.defaultLocale.1.6.0."
},
{
"path": "Dist/winget/manifests/l/LX-Systems/WinMute/2.5.1.0/LX-Systems.WinMute.yaml",
"chars": 255,
"preview": "# Created using wingetcreate 1.6.1.0\n# yaml-language-server: $schema=https://aka.ms/winget-manifest.version.1.6.0.schema"
},
{
"path": "Dist/winget/manifests/l/LX-Systems/WinMute/2.5.2.0/LX-Systems.WinMute.installer.yaml",
"chars": 635,
"preview": "# Created using wingetcreate 1.9.2.0\n# yaml-language-server: $schema=https://aka.ms/winget-manifest.installer.1.9.0.sche"
},
{
"path": "Dist/winget/manifests/l/LX-Systems/WinMute/2.5.2.0/LX-Systems.WinMute.locale.en-US.yaml",
"chars": 747,
"preview": "# Created using wingetcreate 1.9.2.0\n# yaml-language-server: $schema=https://aka.ms/winget-manifest.defaultLocale.1.9.0."
},
{
"path": "Dist/winget/manifests/l/LX-Systems/WinMute/2.5.2.0/LX-Systems.WinMute.yaml",
"chars": 255,
"preview": "# Created using wingetcreate 1.9.2.0\n# yaml-language-server: $schema=https://aka.ms/winget-manifest.version.1.9.0.schema"
},
{
"path": "Dist/winget/manifests/l/LX-Systems/WinMute/2.5.3.0/LX-Systems.WinMute.installer.yaml",
"chars": 638,
"preview": "# Created using wingetcreate 1.10.3.0\n# yaml-language-server: $schema=https://aka.ms/winget-manifest.installer.1.10.0.sc"
},
{
"path": "Dist/winget/manifests/l/LX-Systems/WinMute/2.5.3.0/LX-Systems.WinMute.locale.en-US.yaml",
"chars": 750,
"preview": "# Created using wingetcreate 1.10.3.0\n# yaml-language-server: $schema=https://aka.ms/winget-manifest.defaultLocale.1.10."
},
{
"path": "Dist/winget/manifests/l/LX-Systems/WinMute/2.5.3.0/LX-Systems.WinMute.yaml",
"chars": 258,
"preview": "# Created using wingetcreate 1.10.3.0\n# yaml-language-server: $schema=https://aka.ms/winget-manifest.version.1.10.0.sche"
},
{
"path": "Dist/winget.txt",
"chars": 244,
"preview": "# Update\nwingetcreate update --submit --urls \"https://github.com/lx-s/WinMute/releases/download/<vers>/WinMute-<vers>-Se"
},
{
"path": "LICENSE",
"chars": 1497,
"preview": "Copyright (C) 2025, Alexander Steinhoefer\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with "
},
{
"path": "README.md",
"chars": 2912,
"preview": "# WinMute\n<!-- badges --> \n<div align=\"right\">\n <a href=\"https://translate.codeberg.org/engage/winmute/\">\n <img src="
},
{
"path": "Translations/lang-de.json",
"chars": 11494,
"preview": "{\n \"meta.lang.name\": \"Deutsch (German)\",\n \"meta.lang.mode\": \"ltr\",\n \"init.error.settings.title\": \"Fehler beim I"
},
{
"path": "Translations/lang-en.json",
"chars": 10237,
"preview": "{\n \"meta.lang.name\": \"English\",\n \"meta.lang.mode\": \"ltr\",\n \"init.error.settings.title\": \"Failed to initialize setting"
},
{
"path": "Translations/lang-es.json",
"chars": 11668,
"preview": "{\n \"meta.lang.name\": \"Español (Spanish)\",\n \"meta.lang.mode\": \"ltr\",\n \"init.error.settings.title\": \"No se pudo inicial"
},
{
"path": "Translations/lang-fr.json",
"chars": 11601,
"preview": "{\n \"meta.lang.name\": \"French (Français)\",\n \"meta.lang.mode\": \"ltr\",\n \"init.error.settings.title\": \"Échec de l'initial"
},
{
"path": "Translations/lang-it.json",
"chars": 11735,
"preview": "{\n \"meta.lang.name\": \"Italiano (Italian)\",\n \"meta.lang.mode\": \"ltr\",\n \"init.error.settings.title\": \"Impossibile inizi"
},
{
"path": "Translations/lang-ko.json",
"chars": 8466,
"preview": "{\n \"meta.lang.name\": \"한글 (Korean)\",\n \"meta.lang.mode\": \"ltr\",\n \"init.error.settings.title\": \"설정을 초기화하지 못했습니다\",\n \"ini"
},
{
"path": "Translations/lang-lv.json",
"chars": 6142,
"preview": "{\n \"meta.lang.name\": \"Latviešu (Latvian)\",\n \"meta.lang.mode\": \"ltr\",\n \"init.error.settings.title\": \"\",\n \"init.error."
},
{
"path": "Translations/lang-nl.json",
"chars": 8241,
"preview": "{\n \"meta.lang.name\": \"Nederlands (Dutch)\",\n \"meta.lang.mode\": \"ltr\",\n \"init.error.settings.title\": \"De instellingen k"
},
{
"path": "Translations/lang-ro.json",
"chars": 6100,
"preview": "{\n \"meta.lang.name\": \"Română (Romanian)\",\n \"meta.lang.mode\": \"ltr\",\n \"init.error.settings.title\": \"\",\n \"init"
},
{
"path": "Translations/lang-ru.json",
"chars": 11016,
"preview": "{\n \"meta.lang.name\": \"Руский (Russian)\",\n \"meta.lang.mode\": \"ltr\",\n \"init.error.settings.title\": \"Не удалось инициали"
},
{
"path": "Translations/lang-zh_Hans.json",
"chars": 7737,
"preview": "{\n \"meta.lang.name\": \"简体中文[囍]\",\n \"meta.lang.mode\": \"ltr\",\n \"init.error.settings.title\": \"未能初始化设置\",\n \"init.error.sett"
},
{
"path": "WinMute/AboutDlg.cpp",
"chars": 11448,
"preview": "/*\n WinMute\n Copyright (c) 2025, Alexander Steinhoefer\n\n------------------------------------------------------"
},
{
"path": "WinMute/BluetoothDetector.cpp",
"chars": 6045,
"preview": "/*\n WinMute\n Copyright (c) 2025, Alexander Steinhoefer\n\n------------------------------------------------------"
},
{
"path": "WinMute/BluetoothDetector.h",
"chars": 2750,
"preview": "/*\n WinMute\n Copyright (c) 2025, Alexander Steinhoefer\n\n------------------------------------------------------"
},
{
"path": "WinMute/LogDialog.cpp",
"chars": 4344,
"preview": "/*\n WinMute\n Copyright (c) 2024, Alexander Steinhoefer\n\n------------------------------------------------------"
},
{
"path": "WinMute/MMNotificationClient.cpp",
"chars": 5597,
"preview": "/*\n WinMute\n Copyright (c) 2025, Alexander Steinhoefer\n\n------------------------------------------------------"
},
{
"path": "WinMute/MMNotificationClient.h",
"chars": 2645,
"preview": "/*\n WinMute\n Copyright (c) 2025, Alexander Steinhoefer\n\n------------------------------------------------------"
},
{
"path": "WinMute/MuteControl.cpp",
"chars": 12393,
"preview": "/*\n WinMute\n Copyright (c) 2025, Alexander Steinhoefer\n\n------------------------------------------------------"
},
{
"path": "WinMute/MuteControl.h",
"chars": 4078,
"preview": "/*\n WinMute\n Copyright (c) 2025, Alexander Steinhoefer\n\n------------------------------------------------------"
},
{
"path": "WinMute/QuietHoursTimer.cpp",
"chars": 8147,
"preview": "/*\n WinMute\n Copyright (c) 2025, Alexander Steinhoefer\n\n------------------------------------------------------"
},
{
"path": "WinMute/QuietHoursTimer.h",
"chars": 2368,
"preview": "/*\n WinMute\n Copyright (c) 2025, Alexander Steinhoefer\n\n------------------------------------------------------"
},
{
"path": "WinMute/SettingsDlg.cpp",
"chars": 8749,
"preview": "/*\n WinMute\n Copyright (c) 2025, Alexander Steinhoefer\n\n------------------------------------------------------"
},
{
"path": "WinMute/Settings_BluetoothDlg.cpp",
"chars": 15155,
"preview": "/*\n WinMute\n Copyright (c) 2025, Alexander Steinhoefer\n\n------------------------------------------------------"
},
{
"path": "WinMute/Settings_GeneralDlg.cpp",
"chars": 11146,
"preview": "/*\n WinMute\n Copyright (c) 2025, Alexander Steinhoefer\n\n------------------------------------------------------"
},
{
"path": "WinMute/Settings_ManageEndpointsDlg.cpp",
"chars": 14917,
"preview": "/*\n WinMute\n Copyright (c) 2025, Alexander Steinhoefer\n\n------------------------------------------------------"
},
{
"path": "WinMute/Settings_MuteDlg.cpp",
"chars": 8416,
"preview": "/*\n WinMute\n Copyright (c) 2025, Alexander Steinhoefer\n\n------------------------------------------------------"
},
{
"path": "WinMute/Settings_QuietHoursDlg.cpp",
"chars": 8463,
"preview": "/*\n WinMute\n Copyright (c) 2025, Alexander Steinhoefer\n\n------------------------------------------------------"
},
{
"path": "WinMute/Settings_WifiDlg.cpp",
"chars": 13582,
"preview": "/*\n WinMute\n Copyright (c) 2025, Alexander Steinhoefer\n\n------------------------------------------------------"
},
{
"path": "WinMute/TrayIcon.cpp",
"chars": 5374,
"preview": "/*\n WinMute\n Copyright (c) 2025, Alexander Steinhoefer\n\n------------------------------------------------------"
},
{
"path": "WinMute/TrayIcon.h",
"chars": 2757,
"preview": "/*\n WinMute\n Copyright (c) 2025, Alexander Steinhoefer\n\n------------------------------------------------------"
},
{
"path": "WinMute/UpdateChecker.cpp",
"chars": 10965,
"preview": "/*\n WinMute\n Copyright (c) 2025, Alexander Steinhoefer\n\n------------------------------------------------------"
},
{
"path": "WinMute/UpdateChecker.h",
"chars": 2923,
"preview": "/*\n WinMute\n Copyright (c) 2025, Alexander Steinhoefer\n\n------------------------------------------------------"
},
{
"path": "WinMute/Utility.cpp",
"chars": 5976,
"preview": "/*\n WinMute\n Copyright (c) 2025, Alexander Steinhoefer\n\n------------------------------------------------------"
},
{
"path": "WinMute/Utility.h",
"chars": 2460,
"preview": "/*\n WinMute\n Copyright (c) 2025, Alexander Steinhoefer\n\n------------------------------------------------------"
},
{
"path": "WinMute/VersionHelper.h",
"chars": 2854,
"preview": "/*\n WinMute\n Copyright (c) 2021, Alexander Steinhoefer\n\n------------------------------------------------------"
},
{
"path": "WinMute/VistaAudio.cpp",
"chars": 10172,
"preview": "/*\n WinMute\n Copyright (c) 2025, Alexander Steinhoefer\n\n------------------------------------------------------"
},
{
"path": "WinMute/VistaAudioSessionEvents.cpp",
"chars": 4717,
"preview": "/*\n WinMute\n Copyright (c) 2025, Alexander Steinhoefer\n\n------------------------------------------------------"
},
{
"path": "WinMute/VistaAudioSessionEvents.h",
"chars": 3189,
"preview": "/*\n WinMute\n Copyright (c) 2025, Alexander Steinhoefer\n\n------------------------------------------------------"
},
{
"path": "WinMute/WMLog.cpp",
"chars": 6877,
"preview": "/*\n WinMute\n Copyright (c) 2025, Alexander Steinhoefer\n\n------------------------------------------------------"
},
{
"path": "WinMute/WMLog.h",
"chars": 3026,
"preview": "/*\n WinMute\n Copyright (c) 2025, Alexander Steinhoefer\n\n------------------------------------------------------"
},
{
"path": "WinMute/WMSettings.cpp",
"chars": 21947,
"preview": "/*\n WinMute\n Copyright (c) 2025, Alexander Steinhoefer\n\n------------------------------------------------------"
},
{
"path": "WinMute/WMSettings.h",
"chars": 3652,
"preview": "/*\n WinMute\n Copyright (c) 2025, Alexander Steinhoefer\n\n------------------------------------------------------"
},
{
"path": "WinMute/WMi18n.cpp",
"chars": 8018,
"preview": "/*\n WinMute\n Copyright (c) 2025, Alexander Steinhoefer\n\n------------------------------------------------------"
},
{
"path": "WinMute/WMi18n.h",
"chars": 2906,
"preview": "/*\n WinMute\n Copyright (c) 2025, Alexander Steinhoefer\n\n------------------------------------------------------"
},
{
"path": "WinMute/WiFiDetector.h",
"chars": 2689,
"preview": "/*\n WinMute\n Copyright (c) 2025, Alexander Steinhoefer\n\n------------------------------------------------------"
},
{
"path": "WinMute/WifiDetector.cpp",
"chars": 6396,
"preview": "/*\n WinMute\n Copyright (c) 2025, Alexander Steinhoefer\n\n------------------------------------------------------"
},
{
"path": "WinMute/WinAudio.h",
"chars": 3902,
"preview": "/*\n WinMute\n Copyright (c) 2025, Alexander Steinhoefer\n\n------------------------------------------------------"
},
{
"path": "WinMute/WinMain.cpp",
"chars": 5398,
"preview": "/*\n WinMute\n Copyright (c) 2025, Alexander Steinhoefer\n\n------------------------------------------------------"
},
{
"path": "WinMute/WinMute.cpp",
"chars": 25396,
"preview": "/*\n WinMute\n Copyright (c) 2025, Alexander Steinhoefer\n\n------------------------------------------------------"
},
{
"path": "WinMute/WinMute.h",
"chars": 3554,
"preview": "/*\n WinMute\n Copyright (c) 2025, Alexander Steinhoefer\n\n------------------------------------------------------"
},
{
"path": "WinMute/WinMute.rc",
"chars": 18463,
"preview": "// Microsoft Visual C++ generated resource script.\n//\n#include \"resource.h\"\n\n#define APSTUDIO_READONLY_SYMBOLS\n/////////"
},
{
"path": "WinMute/WinMute.vcxproj",
"chars": 35091,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/ms"
},
{
"path": "WinMute/WinMute.vcxproj.filters",
"chars": 10041,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbui"
},
{
"path": "WinMute/WinMute.vcxproj.user",
"chars": 1075,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"Current\" xmlns=\"http://schemas.microsoft.com/developer/ms"
},
{
"path": "WinMute/common.cpp",
"chars": 1701,
"preview": "/* WinMute\n Copyright (c) 2025, Alexander Steinhoefer\n\n-------------------------------------------------------"
},
{
"path": "WinMute/common.h",
"chars": 4513,
"preview": "/*\n WinMute\n Copyright (c) 2025, Alexander Steinhoefer\n\n------------------------------------------------------"
},
{
"path": "WinMute/libs/json.hpp",
"chars": 920047,
"preview": "// __ _____ _____ _____\n// __| | __| | | | JSON for Modern C++\n// | | |__ | | | | | | version 3.11"
},
{
"path": "WinMute/resource.h",
"chars": 7679,
"preview": "//{{NO_DEPENDENCIES}}\r\n// Microsoft Visual C++ generated include file.\r\n// Used by WinMute.rc\r\n//\r\n#define IDI_APP "
},
{
"path": "WinMute.props",
"chars": 870,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuil"
},
{
"path": "WinMute.slnx",
"chars": 205,
"preview": "<Solution>\n <Configurations>\n <Platform Name=\"x64\" />\n <Platform Name=\"x86\" />\n </Configurations>\n <Project Pat"
},
{
"path": "cppcgl-nativerecommended.ruleset",
"chars": 1453,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RuleSet Name=\"cppcgl-nativerecommended\" ToolsVersion=\"17.0\">\n <Include Path=\"c"
},
{
"path": "winmute.cppcheck",
"chars": 573,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"1\">\n <builddir>winmute-cppcheck-build-dir</builddir>\n <pl"
}
]
About this extraction
This page contains the full source code of the lx-s/WinMute GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 108 files (1.4 MB), approximately 362.1k tokens, and a symbol index with 541 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.