Open-source Windows tray utility for keyboard layout switching and text transformation, inspired by Punto Switcher and implemented as a small native Win32 app in plain C.
The app converts text by key-position mapping, not dictionary translation.
Cwitcher — це невелика Win32-утиліта для Windows, яка живе в треї та допомагає:
- перетворювати виділений текст між розкладками
- перетворювати останнє набране слово
- перемикати активну розкладку в тому ж порядку, що й Windows
Це не словниковий переклад. Програма працює через мапінг символів по клавішах.
- Завантажте останній portable-пакет зі сторінки Releases.
- Розпакуйте zip-архів.
- Запустіть
Cwitcher.exe. - Програма стартує в системному треї.
- Двічі натисніть лівою кнопкою по іконці в треї, щоб відкрити налаштування, або натисніть правою кнопкою для меню.
Portable-збірка є самодостатньою: runtime-іконки інтерфейсу вбудовані в Cwitcher.exe, тому поруч не потрібна окрема папка resources.
- Гаряча клавіша за замовчуванням:
Pause/Break - За замовчуванням одна й та сама клавіша призначена для:
- перетворення виділеного тексту
- перетворення останнього слова
- Якщо обидві дії використовують одну гарячу клавішу, програма пробує:
- перетворити останнє слово, якщо трекер слова ще валідний
- якщо слово було скинуте або не підходить, перетворити виділений текст
- Звук перемикання за замовчуванням вимкнений
- Debug log за замовчуванням вимкнений
- Налаштування зберігаються в
%APPDATA%\Cwitcher\settings.ini
- прихована Win32-програма з іконкою в треї без головного вікна
- перетворення виділеного тексту по гарячій клавіші
- швидке перетворення останнього набраного слова по гарячій клавіші
- безпечніше перетворення виділеного тексту з full-format snapshot буфера обміну
- перемикання розкладки за поточним порядком мов введення Windows
- резервний внутрішній цикл, якщо системний порядок визначити не вдалося
- live-apply вікно налаштувань без
Save/Cancel - налаштовувані гарячі клавіші для:
- перетворення виділеного тексту
- перетворення останнього слова
- опційний звук перемикання
- опційний debug log
- опційний автозапуск разом із Windows
- інтерфейс англійською та українською
- версія, посилання на GitHub і placeholder-кнопка для Microsoft Store в налаштуваннях
Зараз таблиці мапінгу позицій клавіш реалізовані для 37 розкладок:
en,en-gbru,uk,be,kk,bg,sr,mk,ky,tg,uzde,fr,es,it,pl,nl,pt,pt-br,trcs,sk,sl,hu,ro,hr,sv,fi,no,da,iselar,he,faka
Щоб перевірити таблиці мапінгу без встановлення десятків мов у Windows, у Debug-збірці є режим self-test:
.\bin\Debug\Cwitcher.exe --self-testПісля запуску створюється звіт:
bin\Debug\layout-selftest-report.txt
Self-test перевіряє:
- цілісність таблиць розкладок
- наявність порожніх токенів
- дублікати токенів усередині розкладки
- round-trip перетворення між парами розкладок
Частина попереджень для окремих мов очікувана: деякі реальні розкладки мають неоднозначні або повторювані символи.
- Перетворення тексту виконується через мапінг клавіш, а не словниковий переклад.
- У перетворенні беруть участь лише ті розкладки, які:
- підтримуються в коді
- і водночас встановлені у вашій системі Windows
- Порядок циклу береться зі списку мов введення Windows. Якщо його не вдається використати, програма переходить на внутрішній резервний цикл.
- Для однакової гарячої клавіші першим виконується сценарій останнього слова. Сценарій виділеного тексту використовується як fallback, коли слово було скинуте або контекст введення змінився.
- Сценарій виділеного тексту тимчасово використовує буфер обміну, але намагається зберегти всі підтримувані формати та не відновлювати старий snapshot, якщо clipboard уже змінила інша програма.
- Debug log не записує сам текст користувача, лише технічні події, довжини рядків і коди розкладок.
- Деякі програми та ігри працюють із введенням нестандартно, тому поведінка може відрізнятися залежно від цільового застосунку.
- Для частини екзотичніших або правосторонніх розкладок практичне перетворення сильно залежить від того, як конкретний застосунок обробляє Unicode-ввід і clipboard.
Відкрити проєкт у Visual Studio:
Cwitcher.slnCwitcher.vcxproj
Або зібрати через PowerShell:
powershell -ExecutionPolicy Bypass -File .\build.ps1- Debug:
bin\Debug\Cwitcher.exe - Release:
bin\Release\Cwitcher.exe
src\main.c— старт застосунку та глобальний станsrc\ui.c— трей-інтерфейс і вікно налаштуваньsrc\input.c— keyboard/mouse hook, маршрутизація hotkey, трекінг останнього словаsrc\transform.c— визначення розкладок, перетворення, clipboard-сценарій, self-testsrc\settings.c— налаштування, логування, звук, автозапуск, форматування hotkeysrc\layout_data.inc— таблиці розкладок, нормалізовані для C-кодуsrc\app.h— спільні оголошення
- Як долучитися: CONTRIBUTING.md
- Політика безпеки: SECURITY.md
- Історія змін: CHANGELOG.md
- Ліцензія: LICENSE
Cwitcher is a small Win32 tray utility for Windows that can:
- convert selected text between keyboard layouts
- convert the last typed word
- switch the active layout using the same effective order as Windows
This is not dictionary translation. The app works through key-position mapping.
- Download the latest portable package from Releases.
- Extract the zip archive.
- Run
Cwitcher.exe. - The app starts in the system tray.
- Double-click the tray icon to open settings, or right-click it to open the tray menu.
The portable build is self-contained: runtime UI icons are embedded into Cwitcher.exe, so no adjacent resources folder is required.
- Default hotkey:
Pause/Break - By default, the same hotkey is assigned to both:
- selected text conversion
- last word conversion
- If both actions use the same hotkey, the app tries:
- last word conversion when the word tracker is still valid
- selected text conversion as fallback when the word was reset or the input context changed
- Switch sound is disabled by default
- Debug logging is disabled by default
- Settings are stored in
%APPDATA%\Cwitcher\settings.ini
- hidden Win32 application with tray icon and no main window
- selected-text conversion by hotkey
- fast last typed word conversion by hotkey
- safer selected-text conversion with full-format clipboard snapshots
- layout switching by the current Windows input-language order
- fallback internal cycle if the system order cannot be resolved
- live-apply settings window without
Save/Cancel - configurable hotkeys for:
- selected text conversion
- last word conversion
- optional switch sound
- optional debug log
- optional start with Windows
- English and Ukrainian UI
- version label, GitHub link, and Microsoft Store placeholder button in settings
The current key-position mapping set covers 37 layouts:
en,en-gbru,uk,be,kk,bg,sr,mk,ky,tg,uzde,fr,es,it,pl,nl,pt,pt-br,trcs,sk,sl,hu,ro,hr,sv,fi,no,da,iselar,he,faka
To validate the mapping tables without installing a large set of Windows layouts, the Debug build includes a self-test mode:
.\bin\Debug\Cwitcher.exe --self-testIt writes a report to:
bin\Debug\layout-selftest-report.txt
The self-test checks:
- mapping-table integrity
- empty tokens
- duplicate tokens inside a layout
- round-trip conversion across layout pairs
Some warnings are expected for certain real-world layouts because a few keyboards contain repeated or ambiguous visible symbols.
- Text conversion is based on key-position mapping, not dictionary translation.
- Only layouts that are both:
- implemented in code
- and installed in Windows can participate in actual text conversion.
- The layout cycle follows the Windows input-language order when possible. If that order cannot be used, the app falls back to an internal cycle.
- When both actions share the same hotkey, last-word conversion is tried first. Selected-text conversion is used as fallback when the tracked word is invalid or the input context changed.
- Selected-text conversion temporarily uses the clipboard, but it tries to preserve all supported clipboard formats and avoids restoring an old snapshot if another app has already changed the clipboard.
- Debug logs do not store the user's actual text; they only contain technical events, string lengths, and layout codes.
- Some applications and games expose text input in non-standard ways, so behavior may still vary by target app.
- For some more exotic or right-to-left layouts, real-world behavior also depends on how the target application handles Unicode input and clipboard operations.
Open the project in Visual Studio:
Cwitcher.slnCwitcher.vcxproj
Or build from PowerShell:
powershell -ExecutionPolicy Bypass -File .\build.ps1- Debug:
bin\Debug\Cwitcher.exe - Release:
bin\Release\Cwitcher.exe
src\main.c— app bootstrap and global statesrc\ui.c— tray UI and settings windowsrc\input.c— keyboard and mouse hooks, hotkey routing, last-word trackingsrc\transform.c— layout detection, conversion, clipboard flow, self-testsrc\settings.c— settings, logging, sound, autostart, hotkey formattingsrc\layout_data.inc— layout tables normalized for C codesrc\app.h— shared declarations
- Contribution guide: CONTRIBUTING.md
- Security policy: SECURITY.md
- Changelog: CHANGELOG.md
- License: LICENSE