Release v0.6.56: LAN mouse and keyboard sharing
This commit is contained in:
1 parent
4fbeb56421
commit
82292c8a7e
10 files changed
+61
-55
No files matched your search
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
cmake_minimum_required(VERSION 3.24)
|
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)
|
if(NOT WIN32)
|
||||||
message(FATAL_ERROR "KSwitcher uses native Windows APIs")
|
message(FATAL_ERROR "KSwitcher uses native Windows APIs")
|
||||||
endif()
|
endif()
|
||||||
|
|||||||
+3
-5
@@ -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
|
KSwitcher discovers other enabled KSwitcher instances, pairs them with the same
|
||||||
code on both computers, and shares mouse and keyboard through a screen edge.
|
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.
|
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.
|
Several trusted pairs may be saved, but only the selected neighbour is active.
|
||||||
Clipboard and file transfer are not implemented yet.
|
Clipboard and file transfer are not implemented yet.
|
||||||
|
|
||||||
## Set up two computers
|
## Set up two computers
|
||||||
|
|
||||||
1. Extract this preview into a separate writable folder on each Windows PC.
|
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.
|
||||||
Exit the regular KSwitcher before starting this copy; only one resident runs
|
|
||||||
per Windows session. Each copy keeps its own data beside the executable.
|
|
||||||
2. Open Settings → Tools → KSwitcher computers and enable discovery on both PCs.
|
2. Open Settings → Tools → KSwitcher computers and enable discovery on both PCs.
|
||||||
Only running LAN-enabled KSwitcher instances appear, not generic network devices.
|
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. Match the computer name and instance-ID prefix displayed on the other PC.
|
||||||
|
|||||||
@@ -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.
|
[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,
|
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
|
above or below; moving through that outer screen edge transfers both mouse and
|
||||||
keyboard. Ctrl+Alt+Esc returns control in an emergency. See
|
keyboard. Ctrl+Alt+Esc returns control in an emergency. See
|
||||||
[LAN-PREVIEW.md](LAN-PREVIEW.md) for setup, encryption and validation limits.
|
[LAN-PREVIEW.md](LAN-PREVIEW.md) for setup, encryption and validation limits.
|
||||||
Clipboard and file sharing are still pending.
|
Clipboard and file sharing are still pending.
|
||||||
|
|
||||||
**Українською.** У dev-збірці є пошук KSwitcher у мережі, спарювання однаковим
|
**Українською.** У v0.6.56 є пошук KSwitcher у мережі, спарювання однаковим
|
||||||
кодом і передача миші та клавіатури для однієї активної пари ПК. Укажіть, де
|
кодом і передача миші та клавіатури для однієї активної пари ПК. Укажіть, де
|
||||||
стоїть сусідній ПК: ліворуч, праворуч, зверху або знизу. Курсор і клавіатура
|
стоїть сусідній ПК: ліворуч, праворуч, зверху або знизу. Курсор і клавіатура
|
||||||
перемикаються разом через відповідний край екрана. Ctrl+Alt+Esc аварійно повертає
|
перемикаються разом через відповідний край екрана. Ctrl+Alt+Esc аварійно повертає
|
||||||
|
|||||||
Binary file not shown.
+7
-5
@@ -1,14 +1,16 @@
|
|||||||
# Latest Windows release
|
# Latest Windows release
|
||||||
|
|
||||||
## v0.6.55 — 2026-11-06
|
## v0.6.56 — 2026-11-06
|
||||||
|
|
||||||
## Changes
|
## 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.
|
- Experimental, opt-in LAN mouse and keyboard sharing inside the existing resident process; no extra service.
|
||||||
- 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.
|
- Discover running KSwitcher instances and pair them using the same generated code on both PCs. Trust is DPAPI-protected locally, outside settings sync/export.
|
||||||
- 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.
|
- 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
|
## 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
|
## 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.
|
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 @@
|
|||||||
42ffb2ea131983134897bf8a4e74a56ec2716cdc411930e417739fa35c95e6b2 KSwitcher-win-x64.zip
|
7ddf8545bcd1694e760503e712b6b34f396311446596bca348b3cc27ee838abe KSwitcher-win-x64.zip
|
||||||
+40
-35
@@ -1,81 +1,86 @@
|
|||||||
{
|
{
|
||||||
"schema": 1,
|
"schema": 1,
|
||||||
"version": "0.6.55",
|
"version": "0.6.56",
|
||||||
"files": [
|
"files": [
|
||||||
{
|
{
|
||||||
"sha256": "30f7942d26f049a6abac6a36778696cc285888d31ad42a5ed2b53097aeda72d5",
|
"sha256": "02f709062f32047f2befc4de67efe5e033c48a8155bb0230bf012496fe20db9b",
|
||||||
"path": "KSwitcher.exe",
|
"size": 1974784,
|
||||||
"size": 1850368
|
"path": "KSwitcher.exe"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"sha256": "1cf6d8f1b5b8a4299edaf8a28cbaede9264b667edbe095c1e5156eedf0ef2089",
|
"sha256": "9b3ec79ae158ee51e61249f01e46a20917db9c25c6a8f58c52d927f8a6c3ee9c",
|
||||||
"path": "KSwitcher.Config.exe",
|
"size": 1887232,
|
||||||
"size": 1718784
|
"path": "KSwitcher.Config.exe"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"sha256": "daa58f6800b21a6f50f5e0ceb32505ede0637e05aad57c383d8845ccec2420f1",
|
"sha256": "21a5422be5e97c7f758d46481fe2c9481d2c09b231cc7fe90b6e7a0793f32b9d",
|
||||||
"path": "KSwitcher.Screenshot.exe",
|
"size": 3046912,
|
||||||
"size": 2903040
|
"path": "KSwitcher.Screenshot.exe"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"sha256": "d3c81140cce01c26bf6cbf52aa40e0825e1fa35b9a91d1387170a65d2597082c",
|
"sha256": "d3c81140cce01c26bf6cbf52aa40e0825e1fa35b9a91d1387170a65d2597082c",
|
||||||
"path": "LICENSE",
|
"size": 4401,
|
||||||
"size": 4401
|
"path": "LICENSE"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"sha256": "61e08da79c44061654015ce6b0c4061c23ee1dd18237fbf09e9bfda3c0ea2831",
|
"sha256": "61e08da79c44061654015ce6b0c4061c23ee1dd18237fbf09e9bfda3c0ea2831",
|
||||||
"path": "json-LICENSE.txt",
|
"size": 1096,
|
||||||
"size": 1096
|
"path": "json-LICENSE.txt"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"sha256": "3c9947f562fae119b058c7a1230874bf3430145d8ac8d7bfc5fa89ae708f6a89",
|
"sha256": "6b7b8a912c10c04c8bdddce90572a6a8addcb6c76d478fe8455c2685fc3384d8",
|
||||||
"path": "README.md",
|
"size": 79329,
|
||||||
"size": 78153
|
"path": "README.md"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"sha256": "a8ec24f5a6cc9145324a52b73525418d1f8bd0eb3b4cf75fc93b57dcc7918603",
|
||||||
|
"size": 6773,
|
||||||
|
"path": "LAN-PREVIEW.md"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"sha256": "d0c022b27b9fbc2ff7b6b8bec723cc1adc4eef517202f9ff77eed5d8bea3acb9",
|
"sha256": "d0c022b27b9fbc2ff7b6b8bec723cc1adc4eef517202f9ff77eed5d8bea3acb9",
|
||||||
"path": "dictionaries/en.txt",
|
"size": 732485,
|
||||||
"size": 732485
|
"path": "dictionaries/en.txt"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"sha256": "0bdfb0201d1803634f268cdff0993b8349d2c70e956a06dbb667c8dd65254ec5",
|
"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",
|
"sha256": "3017bf44d3be9d9dfab21bd6778aa52b7947e61acf9ce2bc86b41d6e949ac311",
|
||||||
"path": "dictionaries/README.md",
|
"size": 2265,
|
||||||
"size": 2265
|
"path": "dictionaries/README.md"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"sha256": "80e6b6a27815973535f7facb636c597eb845dfee45cfabfc4e9b3341b9332849",
|
"sha256": "80e6b6a27815973535f7facb636c597eb845dfee45cfabfc4e9b3341b9332849",
|
||||||
"path": "dictionaries/ru.txt",
|
"size": 1109134,
|
||||||
"size": 1109134
|
"path": "dictionaries/ru.txt"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"sha256": "98e5b3fe7304e37705c9e5ff48b0b399ccb16e806736d21f09921b99e5f2a408",
|
"sha256": "98e5b3fe7304e37705c9e5ff48b0b399ccb16e806736d21f09921b99e5f2a408",
|
||||||
"path": "dictionaries/sources.json",
|
"size": 1280,
|
||||||
"size": 1280
|
"path": "dictionaries/sources.json"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"sha256": "d30e990d6ec2983c04f3644a3c61c6c668e8c542323f5931916fdd55b916eebf",
|
"sha256": "d30e990d6ec2983c04f3644a3c61c6c668e8c542323f5931916fdd55b916eebf",
|
||||||
"path": "dictionaries/uk.txt",
|
"size": 940799,
|
||||||
"size": 940799
|
"path": "dictionaries/uk.txt"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"sha256": "a34b5161a8315af037e1ec71d816bfc688f7c364141d4ee2347cf0515ef0c82a",
|
"sha256": "a34b5161a8315af037e1ec71d816bfc688f7c364141d4ee2347cf0515ef0c82a",
|
||||||
"path": "tools/README.txt",
|
"size": 993,
|
||||||
"size": 993
|
"path": "tools/README.txt"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"sha256": "6ef5cf64708d62b7fc63c3c793cc99188a513433ff4774cae01dc014f6664376",
|
"sha256": "6ef5cf64708d62b7fc63c3c793cc99188a513433ff4774cae01dc014f6664376",
|
||||||
"path": "tools/StayHere.exe",
|
"size": 134656,
|
||||||
"size": 134656
|
"path": "tools/StayHere.exe"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"sha256": "ba214e2aca7405e698b3ab21ceb1f41ce088edd996b3e30e4a9d58ff496f9413",
|
"sha256": "ba214e2aca7405e698b3ab21ceb1f41ce088edd996b3e30e4a9d58ff496f9413",
|
||||||
"path": "tools/StayHere-README.md",
|
"size": 2796,
|
||||||
"size": 2796
|
"path": "tools/StayHere-README.md"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
+2
-1
@@ -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 'LICENSE') -Destination $destination
|
||||||
Copy-Item -LiteralPath (Join-Path $root 'vendor\json-LICENSE.txt') -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 '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
|
Copy-Item -LiteralPath (Join-Path $root 'dictionaries') -Destination $destination -Recurse -Force
|
||||||
New-Item -ItemType Directory -Force (Join-Path $destination 'tools') | Out-Null
|
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 '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 '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
|
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.
|
# 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) {
|
$entries = foreach ($path in $files) {
|
||||||
foreach ($file in @(Get-ChildItem -LiteralPath $path -File -Recurse)) {
|
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()}
|
@{path=$file.FullName.Substring($destination.Length+1).Replace('\','/'); size=$file.Length; sha256=(Get-FileHash -LiteralPath $file.FullName -Algorithm SHA256).Hash.ToLowerInvariant()}
|
||||||
|
|||||||
+3
-3
@@ -9,8 +9,8 @@ IDC_SCREENSHOT_PENCIL CURSOR "icons/lucide/pencil.cur"
|
|||||||
1 RT_MANIFEST "app.manifest"
|
1 RT_MANIFEST "app.manifest"
|
||||||
201 RCDATA "update.ps1"
|
201 RCDATA "update.ps1"
|
||||||
1 VERSIONINFO
|
1 VERSIONINFO
|
||||||
FILEVERSION 0,6,55,0
|
FILEVERSION 0,6,56,0
|
||||||
PRODUCTVERSION 0,6,55,0
|
PRODUCTVERSION 0,6,56,0
|
||||||
FILEOS VOS_NT_WINDOWS32
|
FILEOS VOS_NT_WINDOWS32
|
||||||
FILETYPE VFT_APP
|
FILETYPE VFT_APP
|
||||||
BEGIN
|
BEGIN
|
||||||
@@ -20,7 +20,7 @@ BEGIN
|
|||||||
BEGIN
|
BEGIN
|
||||||
VALUE "FileDescription", "KSwitcher — native keyboard and clipboard utility"
|
VALUE "FileDescription", "KSwitcher — native keyboard and clipboard utility"
|
||||||
VALUE "ProductName", "KSwitcher"
|
VALUE "ProductName", "KSwitcher"
|
||||||
VALUE "FileVersion", "0.6.55"
|
VALUE "FileVersion", "0.6.56"
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
BLOCK "VarFileInfo"
|
BLOCK "VarFileInfo"
|
||||||
|
|||||||
+1
-1
@@ -2,7 +2,7 @@
|
|||||||
#include "platform.h"
|
#include "platform.h"
|
||||||
namespace ks
|
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 UpdateMessage = WM_APP + 7;
|
||||||
inline constexpr UINT UpdateCheckIntervalMs = 6 * 60 * 60 * 1000;
|
inline constexpr UINT UpdateCheckIntervalMs = 6 * 60 * 60 * 1000;
|
||||||
inline constexpr UINT UpdateNotificationRetryMs = 5 * 60 * 1000;
|
inline constexpr UINT UpdateNotificationRetryMs = 5 * 60 * 1000;
|
||||||
|
|||||||
Reference in new issue
Block a user