1.3.2 (正確にはr897)をビルド
Synergyの開発は止まっているものだと思っていたが、
svnリポジトリの方では1.3.2があったり、日本語キー関係のパッチも当たっていたりと着々と進んでいるようでした。
とりあえず現状最終のr897にいろいろパッチを当ててビルドしてみました。
- 無変換,変換、半角/全角,ひらがな・カタカナキーに対応
- 英語キーボードでAlt+~で漢字変換のON/OFFが出来ないのを修正
- ALT をつかんだままになる問題に対処
- ローレベルフックの処理をスルーしているので副作用としてショートカットキーが使えないかも?(未確認)
- 日本語リソースはまだ当ててません
Vistaでも動きました(一応インストーラーもシールドアイコン付に)- Vistaではサービスで動かないようです。
こちらにおきました-> SynergyInstaller.exe
↑ページが削除されてしまったので置きなおしました。
具体的な変更箇所
Index: lib/synergy/KeyTypes.h =================================================================== --- lib/synergy/KeyTypes.h (リビジョン 897) +++ lib/synergy/KeyTypes.h (変更後) @@ -104,9 +104,10 @@ static const KeyID kKeySysReq = 0xEF15; static const KeyID kKeyEscape = 0xEF1B; +static const KeyID kKeyMuhenkan = 0xEF22; /* Cancel Conversion */ static const KeyID kKeyHenkan = 0xEF23; /* Start/Stop Conversion */ static const KeyID kKeyHangulKana = 0xEF26; /* Hangul, Kana */ static const KeyID kKeyHiraganaKatakana = 0xEF27; /* Hiragana/Katakana toggle */ static const KeyID kKeyZenkaku = 0xEF2A; /* Zenkaku/Hankaku */ -static const KeyID kKeyHanjaKanzi = 0xEF2A; /* Hanja, Kanzi */ +static const KeyID kKeyHanjaKanzi = 0x0060; /* Hanja, Kanzi */ static const KeyID kKeyDelete = 0xEFFF; /* Delete, rubout */ Index: lib/platform/CSynergyHook.cpp =================================================================== --- lib/platform/CSynergyHook.cpp (リビジョン 897) +++ lib/platform/CSynergyHook.cpp (変更後) @@ -202,4 +202,6 @@ doKeyboardHookHandler(WPARAM wParam, LPARAM lParam) { + if( g_mode != kHOOK_RELAY_EVENTS ) + return false; // check for special events indicating if we should start or stop // passing events through and not report them to the server. this @@ -652,26 +654,28 @@ keyboardLLHook(int code, WPARAM wParam, LPARAM lParam) { - if (code >= 0) { - // decode the message - KBDLLHOOKSTRUCT* info = reinterpret_cast<KBDLLHOOKSTRUCT*>(lParam); - WPARAM wParam = info->vkCode; - LPARAM lParam = 1; // repeat code - lParam |= (info->scanCode << 16); // scan code - if (info->flags & LLKHF_EXTENDED) { - lParam |= (1lu << 24); // extended key - } - if (info->flags & LLKHF_ALTDOWN) { - lParam |= (1lu << 29); // context code - } - if (info->flags & LLKHF_UP) { - lParam |= (1lu << 31); // transition - } - // FIXME -- bit 30 should be set if key was already down but - // we don't know that info. as a result we'll never generate - // key repeat events. - - // handle the message - if (keyboardHookHandler(wParam, lParam)) { - return 1; + if( g_mode == kHOOK_RELAY_EVENTS ) { + if (code >= 0) { + // decode the message + KBDLLHOOKSTRUCT* info = reinterpret_cast<KBDLLHOOKSTRUCT*>(lParam); + WPARAM wParam = info->vkCode; + LPARAM lParam = 1; // repeat code + lParam |= (info->scanCode << 16); // scan code + if (info->flags & LLKHF_EXTENDED) { + lParam |= (1lu << 24); // extended key + } + if (info->flags & LLKHF_ALTDOWN) { + lParam |= (1lu << 29); // context code + } + if (info->flags & LLKHF_UP) { + lParam |= (1lu << 31); // transition + } + // FIXME -- bit 30 should be set if key was already down but + // we don't know that info. as a result we'll never generate + // key repeat events. + + // handle the message + if (keyboardHookHandler(wParam, lParam)) { + return 1; + } } } Index: lib/platform/CMSWindowsKeyState.cpp =================================================================== --- lib/platform/CMSWindowsKeyState.cpp (リビジョン 897) +++ lib/platform/CMSWindowsKeyState.cpp (変更後) @@ -65,5 +65,5 @@ /* 0x01b */ { kKeyEscape }, // VK_ESCAPE /* 0x01c */ { kKeyHenkan }, // VK_CONVERT - /* 0x01d */ { kKeyNone }, // VK_NONCONVERT + /* 0x01d */ { kKeyMuhenkan }, // VK_NONCONVERT /* 0x01e */ { kKeyNone }, // VK_ACCEPT /* 0x01f */ { kKeyNone }, // VK_MODECHANGE @@ -1151,4 +1151,9 @@ // found in table switch (m_buttonToVK[i]) { + case VK_KANJI: + case VK_OEM_AUTO: + case VK_OEM_ENLW: + item.m_id = kKeyZenkaku; + break; case VK_TAB: // add kKeyLeftTab, too