UltraVNC 日本語版 の不具合を2点 修正

Ultra VNC を日本語化してみました【BM】

2点ほど使っていて不具合を見つけたのでクライアントのみ修正しました。
バージョンは v0.61a です

1.カスタムキーボード送信で AltGR を選んだ場合ちゃんと機能してない不具合修正。

オリジナル機能ですが、うまく動作していなかったので修正しました ・ω・ しょぼーん

2.KeyMapjap.cppのバグ

    struct {
        BYTE bKana, bShift;
        int ret;
        unsigned char buf;
    } table[] = {
        { 0x00, 0x00, 1, '0' },
        { 0x80, 0x00, 1, 0xdc /* wa */ },
        { 0x80, 0x80, 1, 0xa6 /* wo */ },
        { 0x00, 0x80, 0, 0 }
    };

修正前

    struct {
        BYTE bKana, bShift;
        int ret;
        unsigned char buf;
    } table[] = {
        { 0x00, 0x00, 1, '0' },
        { 0x01, 0x00, 1, 0xdc /* wa */ },
        { 0x01, 0x80, 1, 0xa6 /* wo */ },
        { 0x00, 0x80, 0, 0 }
    };

修正後

どういうことかというと、 ToAscii 関数の第3パラメータで VK_KANA と VK_SHIFT の状態を確認しているのですが、

0x80 の場合、上位ビットがセットされている場合、キーは下がって(押されて)いることを
0x01 の場合、下位ビットがセットされている場合、キーはオンに切り替えられていることを表します。

ところが、 かなキーの場合ロックされるので、押下状態をチェックするキーではなくCAPSと同じでロック状態を確認するキーなので 0x80ではなく、0x01でチェックしないと押していることを判断できません。

トレースしたら、 is_japanese_keyboard が常に false だからおかしいなと思ったら、そういうことでした・ω・

おまけ

仕事で使ってるパソコンでVK_RMENUが押せないからおかしいなとおもったら、osk.exe (ソフトキーボード)の右ALTを押しても、VK_LMENUが返ってくることが判明w

     keybd_event(VK_RMENU, 0, KEYEVENTF_EXTENDEDKEY , 0);
     Sleep(500);
     keybd_event(VK_RMENU, 0, KEYEVENTF_EXTENDEDKEY |KEYEVENTF_KEYUP, 0);

を試したら、ちゃんと入力できるんだがどうなってるんだろう ・ω・;

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です