入力コンテキストが取得できない

[戻る]
quoll 2007/12/18(火) 15:48:10
こんにちは。前に似たような書き込みをしたのですが、そのときは別の方法で問題を回避
できたのですが、どうしてもこの問題を解決したのでもう一度書き込ませていただきます。

環境はWinXP、VC++(MFCなし)です。

グローバルフックでWH_KEYBOADを拾っています。フックプロシージャのソースの一部を載
せます。

#pragma data_seg("MYDATA")
HWND input_hWnd = NULL;  //入力されたアプリのウィンドウハンドル
#pragma data_seg()

LRESULT CALLBACK GetMsgProc(int nCode, WPARAM wParam, LPARAM lParam){
  if(nCode < 0)
    return (CallNextHookEx(hHook, nCode, wParam, lParam));

    if(nCode == HC_ACTION){
    MSG* pMsg = (MSG*)lParam;
            
    //文字が入力された時
    if (pMsg->message == WM_IME_COMPOSITION) {
       input_hWnd = pMsg->hwnd;
   (略)
    }
  }
}

上のように文字が入力されたウィンドウのウィンドウハンドルを保存しています。
そして同じDLL内のある関数にて
HIMC hImc=ImmGetContext(input_hWnd);
として入力コンテキストを取得しようとしているのですが入力コンテキストの取得がうま
く行きません。

入力コンテキストを取得する直前のウィンドウハンドルの値とSpy++でみたウィンドウハ
ンドルの値が一致しているのは確認しています。

またフックプロシージャ内では入力コンテキストの取得はうまくいっています。


どなたかご教示お願いします。

FUKU 2007/12/18(火) 19:26:22
なんか変ですね...そもそもWH_KEYBOARDコールバックのシグネチャは

LRESULT CALLBACK KeyboardProc(
  int code,       // フックコード
  WPARAM wParam,  // 仮想キーコード
  LPARAM lParam   // キーストローク情報
);
なんですけど。

上記のコードですと「キーストローク情報の値を MSG* にキャスト」
してるように見えるのですが

quoll 2007/12/18(火) 23:16:11
FUKUさん返信ありがとうございます。

WH_KEYBOADではなくてWH_GETMESSAGEでした(^^;;

古いスレッドには追加発言できません。