入力コンテキストが取得できない – プログラミング – Home

入力コンテキストが取得できない
 
通知
すべてクリア

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


quoll
 quoll
(@quoll)
ゲスト
結合: 17年前
投稿: 8
Topic starter  

こんにちは。前に似たような書き込みをしたのですが、そのときは別の方法で問題を回避
できたのですが、どうしてもこの問題を解決したのでもう一度書き込ませていただきます。

環境は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
 FUKU
(@FUKU)
ゲスト
結合: 17年前
投稿: 73
 

なんか変ですね...そもそもWH_KEYBOARDコールバックのシグネチャは

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

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


返信引用
quoll
 quoll
(@quoll)
ゲスト
結合: 17年前
投稿: 8
Topic starter  

FUKUさん返信ありがとうございます。

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました