Release v0.6.56: LAN mouse and keyboard sharing

This commit is contained in:
agrynco committed 2026-11-06 16:39:04 +02:00
1 parent 4fbeb56421
commit 82292c8a7e
10 files changed
+61 -55

No files matched your search

+1 -1
View File
@@ -1,5 +1,5 @@
cmake_minimum_required(VERSION 3.24)
project(KSwitcher VERSION 0.6.55 LANGUAGES CXX RC)
project(KSwitcher VERSION 0.6.56 LANGUAGES CXX RC)
if(NOT WIN32)
message(FATAL_ERROR "KSwitcher uses native Windows APIs")
endif()
+3 -5
View File
@@ -1,17 +1,15 @@
# LAN mouse and keyboard preview
# LAN mouse and keyboard — v0.6.56 (experimental)
KSwitcher discovers other enabled KSwitcher instances, pairs them with the same
code on both computers, and shares mouse and keyboard through a screen edge.
The module runs inside the resident process. This preview supports **one active
The module runs inside the resident process. This experimental feature supports **one active
pair of computers**, with the neighbour on the left, right, above or below.
Several trusted pairs may be saved, but only the selected neighbour is active.
Clipboard and file transfer are not implemented yet.
## Set up two computers
1. Extract this preview into a separate writable folder on each Windows PC.
Exit the regular KSwitcher before starting this copy; only one resident runs
per Windows session. Each copy keeps its own data beside the executable.
1. Update both PCs to v0.6.56 or newer using Update in the tray menu. Preserve local data; do not copy pairing identities between PCs.
2. Open Settings → Tools → KSwitcher computers and enable discovery on both PCs.
Only running LAN-enabled KSwitcher instances appear, not generic network devices.
3. Match the computer name and instance-ID prefix displayed on the other PC.
+3 -3
View File
@@ -10,16 +10,16 @@ The original [Typlo](https://github.com/bitcodepro/Typlo) project and its data r
[Donate via Monobank](https://send.monobank.ua/jar/88h2TddKfS) · Thank you for supporting KSwitcher.
## Development preview: KSwitcher computers
## KSwitcher computers — v0.6.56 (experimental)
The development build includes opt-in LAN discovery, same-code pairing and
KSwitcher includes opt-in LAN discovery, same-code pairing and
mouse/keyboard sharing for one active pair. Place the neighbour left, right,
above or below; moving through that outer screen edge transfers both mouse and
keyboard. Ctrl+Alt+Esc returns control in an emergency. See
[LAN-PREVIEW.md](LAN-PREVIEW.md) for setup, encryption and validation limits.
Clipboard and file sharing are still pending.
**Українською.** У dev-збірці є пошук KSwitcher у мережі, спарювання однаковим
**Українською.** У v0.6.56 є пошук KSwitcher у мережі, спарювання однаковим
кодом і передача миші та клавіатури для однієї активної пари ПК. Укажіть, де
стоїть сусідній ПК: ліворуч, праворуч, зверху або знизу. Курсор і клавіатура
перемикаються разом через відповідний край екрана. Ctrl+Alt+Esc аварійно повертає
Binary file not shown.
+7 -5
View File
@@ -1,14 +1,16 @@
# Latest Windows release
## v0.6.55 — 2026-11-06
## v0.6.56 — 2026-11-06
## Changes
- Fix long snippets failing in ChatGPT and Codex desktop editors when only part of the trigger was selected. Selection now uses paced key events in these applications.
- Recover a partial snippet selection only when the copied text matches a suffix of the trigger in a recognized keyboard layout. Verify the complete trigger before replacing it; preserve surrounding text and restore the clipboard. Far Manager keeps its dedicated selection path.
- Existing cross-layout trigger recognition and binding one snippet to multiple applications remain supported. Clarify these behaviors in the bilingual snippet guide; no new syntax or settings are required.
- Experimental, opt-in LAN mouse and keyboard sharing inside the existing resident process; no extra service.
- Discover running KSwitcher instances and pair them using the same generated code on both PCs. Trust is DPAPI-protected locally, outside settings sync/export.
- Arrange the active neighbour left, right, above or below. Select opposite sides on both PCs; mouse and keyboard transfer together through that screen edge.
- Authenticated AES-256-GCM input channel; Ctrl+Alt+Esc emergency return, disconnect recovery and held-key release.
- One active pair. Clipboard/files and remote secure desktops are not supported. Stop MWB before using input sharing. Disabled by default.
## Validation
Passed targeted native partial-selection recovery, including the ChatGPT process selection policy, 776 settings/chat-profile checks, 568 input checks, 332 native checks, 126 sync checks, dictionary equivalence (140,939 words), wheel, StayHere, Utilities, screenshot UI/save/registration, 54 updater checks and updater progress checks. The reporter confirmed successful expansion in the actual chat, including typing in another layout. The broader snippet suite encountered foreground loss in its buffered Enter scenario; that run is not counted as passing. Release package, version, checksum, updater and published Wiki verification are performed as part of publication.
124 input/channel, 41 pairing/configuration/network and 813 settings/chat-profile checks passed before release preparation. Full release regression passed: 124 LAN input, 34 LAN pairing (41 with network lifecycle), 813 chat/settings, 568 input, 332 native, 126 sync, dictionary equivalence (140,939 words), wheel, StayHere, Utilities, screenshot UI/save/registration, 54 updater checks and updater progress. Physical two-PC validation is pending: network tests use loopback and input-state tests simulate desktops. LAN sharing remains experimental; follow LAN-PREVIEW.md on both PCs.
## Upgrade and compatibility
Choose **Update** in the tray menu. Legacy v0.3.0–v0.4.1 clients first receive the v0.4.2 compatibility bridge, then the current full release. v0.2.3 and earlier require manual installation.
+1 -1
View File
@@ -1 +1 @@
42ffb2ea131983134897bf8a4e74a56ec2716cdc411930e417739fa35c95e6b2 KSwitcher-win-x64.zip
7ddf8545bcd1694e760503e712b6b34f396311446596bca348b3cc27ee838abe KSwitcher-win-x64.zip
+40 -35
View File
@@ -1,81 +1,86 @@
{
"schema": 1,
"version": "0.6.55",
"version": "0.6.56",
"files": [
{
"sha256": "30f7942d26f049a6abac6a36778696cc285888d31ad42a5ed2b53097aeda72d5",
"path": "KSwitcher.exe",
"size": 1850368
"sha256": "02f709062f32047f2befc4de67efe5e033c48a8155bb0230bf012496fe20db9b",
"size": 1974784,
"path": "KSwitcher.exe"
},
{
"sha256": "1cf6d8f1b5b8a4299edaf8a28cbaede9264b667edbe095c1e5156eedf0ef2089",
"path": "KSwitcher.Config.exe",
"size": 1718784
"sha256": "9b3ec79ae158ee51e61249f01e46a20917db9c25c6a8f58c52d927f8a6c3ee9c",
"size": 1887232,
"path": "KSwitcher.Config.exe"
},
{
"sha256": "daa58f6800b21a6f50f5e0ceb32505ede0637e05aad57c383d8845ccec2420f1",
"path": "KSwitcher.Screenshot.exe",
"size": 2903040
"sha256": "21a5422be5e97c7f758d46481fe2c9481d2c09b231cc7fe90b6e7a0793f32b9d",
"size": 3046912,
"path": "KSwitcher.Screenshot.exe"
},
{
"sha256": "d3c81140cce01c26bf6cbf52aa40e0825e1fa35b9a91d1387170a65d2597082c",
"path": "LICENSE",
"size": 4401
"size": 4401,
"path": "LICENSE"
},
{
"sha256": "61e08da79c44061654015ce6b0c4061c23ee1dd18237fbf09e9bfda3c0ea2831",
"path": "json-LICENSE.txt",
"size": 1096
"size": 1096,
"path": "json-LICENSE.txt"
},
{
"sha256": "3c9947f562fae119b058c7a1230874bf3430145d8ac8d7bfc5fa89ae708f6a89",
"path": "README.md",
"size": 78153
"sha256": "6b7b8a912c10c04c8bdddce90572a6a8addcb6c76d478fe8455c2685fc3384d8",
"size": 79329,
"path": "README.md"
},
{
"sha256": "a8ec24f5a6cc9145324a52b73525418d1f8bd0eb3b4cf75fc93b57dcc7918603",
"size": 6773,
"path": "LAN-PREVIEW.md"
},
{
"sha256": "d0c022b27b9fbc2ff7b6b8bec723cc1adc4eef517202f9ff77eed5d8bea3acb9",
"path": "dictionaries/en.txt",
"size": 732485
"size": 732485,
"path": "dictionaries/en.txt"
},
{
"sha256": "0bdfb0201d1803634f268cdff0993b8349d2c70e956a06dbb667c8dd65254ec5",
"path": "dictionaries/LICENSE-CC-BY-SA-4.0.txt",
"size": 20566
"size": 20566,
"path": "dictionaries/LICENSE-CC-BY-SA-4.0.txt"
},
{
"sha256": "3017bf44d3be9d9dfab21bd6778aa52b7947e61acf9ce2bc86b41d6e949ac311",
"path": "dictionaries/README.md",
"size": 2265
"size": 2265,
"path": "dictionaries/README.md"
},
{
"sha256": "80e6b6a27815973535f7facb636c597eb845dfee45cfabfc4e9b3341b9332849",
"path": "dictionaries/ru.txt",
"size": 1109134
"size": 1109134,
"path": "dictionaries/ru.txt"
},
{
"sha256": "98e5b3fe7304e37705c9e5ff48b0b399ccb16e806736d21f09921b99e5f2a408",
"path": "dictionaries/sources.json",
"size": 1280
"size": 1280,
"path": "dictionaries/sources.json"
},
{
"sha256": "d30e990d6ec2983c04f3644a3c61c6c668e8c542323f5931916fdd55b916eebf",
"path": "dictionaries/uk.txt",
"size": 940799
"size": 940799,
"path": "dictionaries/uk.txt"
},
{
"sha256": "a34b5161a8315af037e1ec71d816bfc688f7c364141d4ee2347cf0515ef0c82a",
"path": "tools/README.txt",
"size": 993
"size": 993,
"path": "tools/README.txt"
},
{
"sha256": "6ef5cf64708d62b7fc63c3c793cc99188a513433ff4774cae01dc014f6664376",
"path": "tools/StayHere.exe",
"size": 134656
"size": 134656,
"path": "tools/StayHere.exe"
},
{
"sha256": "ba214e2aca7405e698b3ab21ceb1f41ce088edd996b3e30e4a9d58ff496f9413",
"path": "tools/StayHere-README.md",
"size": 2796
"size": 2796,
"path": "tools/StayHere-README.md"
}
]
}
+2 -1
View File
@@ -9,13 +9,14 @@ Copy-Item -LiteralPath (Join-Path $root 'build\release\KSwitcher.Screenshot.exe'
Copy-Item -LiteralPath (Join-Path $root 'LICENSE') -Destination $destination
Copy-Item -LiteralPath (Join-Path $root 'vendor\json-LICENSE.txt') -Destination $destination
Copy-Item -LiteralPath (Join-Path $root 'README.md') -Destination $destination
Copy-Item -LiteralPath (Join-Path $root 'LAN-PREVIEW.md') -Destination $destination
Copy-Item -LiteralPath (Join-Path $root 'dictionaries') -Destination $destination -Recurse -Force
New-Item -ItemType Directory -Force (Join-Path $destination 'tools') | Out-Null
Copy-Item -LiteralPath (Join-Path $root 'resources\portable-tools-README.txt') -Destination (Join-Path $destination 'tools\README.txt') -Force
Copy-Item -LiteralPath (Join-Path $root 'build\release\tools\StayHere.exe') -Destination (Join-Path $destination 'tools\StayHere.exe') -Force
Copy-Item -LiteralPath (Join-Path $root 'utilities\StayHere\README.md') -Destination (Join-Path $destination 'tools\StayHere-README.md') -Force
# Enumerate the distributable files explicitly; do not include a user's data directory.
$files = @('KSwitcher.exe','KSwitcher.Config.exe','KSwitcher.Screenshot.exe','LICENSE','json-LICENSE.txt','README.md','dictionaries','tools\README.txt','tools\StayHere.exe','tools\StayHere-README.md') | ForEach-Object { Join-Path $destination $_ }
$files = @('KSwitcher.exe','KSwitcher.Config.exe','KSwitcher.Screenshot.exe','LICENSE','json-LICENSE.txt','README.md','LAN-PREVIEW.md','dictionaries','tools\README.txt','tools\StayHere.exe','tools\StayHere-README.md') | ForEach-Object { Join-Path $destination $_ }
$entries = foreach ($path in $files) {
foreach ($file in @(Get-ChildItem -LiteralPath $path -File -Recurse)) {
@{path=$file.FullName.Substring($destination.Length+1).Replace('\','/'); size=$file.Length; sha256=(Get-FileHash -LiteralPath $file.FullName -Algorithm SHA256).Hash.ToLowerInvariant()}
+3 -3
View File
@@ -9,8 +9,8 @@ IDC_SCREENSHOT_PENCIL CURSOR "icons/lucide/pencil.cur"
1 RT_MANIFEST "app.manifest"
201 RCDATA "update.ps1"
1 VERSIONINFO
FILEVERSION 0,6,55,0
PRODUCTVERSION 0,6,55,0
FILEVERSION 0,6,56,0
PRODUCTVERSION 0,6,56,0
FILEOS VOS_NT_WINDOWS32
FILETYPE VFT_APP
BEGIN
@@ -20,7 +20,7 @@ BEGIN
BEGIN
VALUE "FileDescription", "KSwitcher — native keyboard and clipboard utility"
VALUE "ProductName", "KSwitcher"
VALUE "FileVersion", "0.6.55"
VALUE "FileVersion", "0.6.56"
END
END
BLOCK "VarFileInfo"
+1 -1
View File
@@ -2,7 +2,7 @@
#include "platform.h"
namespace ks
{
inline constexpr wchar_t AppVersion[] = L"0.6.55";
inline constexpr wchar_t AppVersion[] = L"0.6.56";
inline constexpr UINT UpdateMessage = WM_APP + 7;
inline constexpr UINT UpdateCheckIntervalMs = 6 * 60 * 60 * 1000;
inline constexpr UINT UpdateNotificationRetryMs = 5 * 60 * 1000;