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