Windows版RealVNCを改造して日本語キーボードに対応させる
Windows版のVNCViewerを使ってLinuxやFreeBSDを遠隔操作すると、
「半角/全角」キーが利かないので、SCIMを起動させるのが面倒くさい。(Ctrl+スペースで出来るが)
RealVNCのソースを改造して、日本語キーボードに対応させる事にする。
環境:Windows XP + Visual Studio 2005 + VNC 4.1.2
以下手順
ソースを用意
RealVNCの公式サイトのダウンロードページから、Windows用のソースをダウンロードする。
ソースを修正
★Visual Studio 2005ではエラーになる箇所を直す
ダウンロードしたソースを展開したら、「win\rfb_win32\SocketManager.cxx」の41行目のstaticの次にvoidを書き加える。
static void requestAddressChangeEvents(network::SocketListener* sock_) { DWORD dummy = 0; if (WSAIoctl(sock_->getFd(), SIO_ADDRESS_LIST_CHANGE, 0, 0, 0, 0, &dummy, 0, 0) == SOCKET_ERROR) { DWORD err = WSAGetLastError(); if (err != WSAEWOULDBLOCK) vlog.error("Unable to track address changes", err); } }
「win\rfb_win32\CPointer.cxx」の57行目のinlineの次に、intを書き加える。
inline int abs(int x) {return x>0 ? x : 0;}
★キーマップを加える
「win\rfb_win32\keymap.h」の一番下(Japanese stuff - almost certainly wrong... とある所)を下記の通りにする。
// Japanese stuff - almost certainly wrong... { XK_Kanji, VK_KANJI, 0 }, { XK_Kana_Shift, VK_KANA, 0 }, { XK_Zenkaku_Hankaku, VK_OEM_AUTO, 0 }, { XK_Zenkaku_Hankaku, VK_OEM_ENLW, 0 }, { XK_Henkan, VK_CONVERT, 0 }, { XK_Muhenkan, VK_NONCONVERT, 0 }, { XK_Hiragana_Katakana,VK_OEM_COPY, 0 }, { XK_Romaji ,VK_OEM_BACKTAB, 0 },
★VNCViewerの起動中はIMEを無効化する
「win\vncviewer\DesktopWindow.cxx」の2箇所に手を加える。
imm.hをインクルードさせる。
#include#include #include #include #include #include #include #include #include #include #include #include
WM_CREATEを処理する所で、ImmAssociateContext()関数を挿入する。
if (msg == WM_CREATE) { ImmAssociateContext(wnd, 0); SetWindowLong(wnd, GWL_USERDATA, (long)((CREATESTRUCT*)lParam)->lpCreateParams); } else if (msg == WM_DESTROY)
Visual Studio 2005の起動
「win\vnc.dsw」をVisual Studio 2005で開く。
すると、旧形式のVisual C++プロジェクトを変換するか聞いてくるので、「すべてはい(A)」で答える。