1.3.1 ALTが押されたままになる問題の対応 (サーバではローレベルフックをスルーするように)
早速ソース公開頂きありがとうございます。 >Takenoriさん http://www.kaede-software.com/2008/01/synergy_1.html
暇を見て私も試してみようかと思います。
とりあえずその該当部分の変更箇所をメモ・・
--- synergy-1.3.1/lib/platform/CSynergyHook.cpp Wed Mar 08 20:07:18 2006 +++ synergy_src_20080204/lib/platform/CSynergyHook.cpp Sun Jan 20 19:11:38 2008 @@ -187,6 +187,10 @@ bool 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 // is used to allow the server to synthesize events locally but @@ -638,27 +642,29 @@ 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 ) { + // 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; + } } }
とりあえずVistaに対応させたい・・・