- PR -

JNIでSetWindowsHookExがかからない?

1
投稿者投稿内容
yupipi
会議室デビュー日: 2003/03/28
投稿数: 1
投稿日時: 2005-11-14 16:08
JavaからCで記述したSetWindowsHookExを呼び出しています。
具体的には
void SetHooks() {
SetWindowsHookEx(WH_CALLWNDPROC, hookProc, DLLのハンドル, 0);
}
という感じで、hookProcもSetHooksもDLLにあります。
WH_CALLWNDPROCのほかにもWH_GETMESSAGEなどもかけています。
hookProcでWM_PAINTであれば処理する、といったプログラムです。

ところが、
void test() {
// SetHooksをJNIで呼び出す
// JFrameを作成してsetVisible(true)する
}
と実行すると、このJFrameに対してだけhookProcが呼び出されます。
JFrameの上でマウスを動かしたりキー入力すると、フックできます。
他のアプリではhookProcが呼び出されません(printfによると)。
SetWindowsHookExの第4引数が0の場合、すべてのウィンドウに
(例えば同時にメモ帳が起動していればそのメモ帳に対しても)
フックがかかるという認識なのですが、間違っているでしょうか?
同様の状態になった方はいらっしゃるんでしょうか。

ご経験のある方、ヒントでも構いませんので
ご意見お待ちしています。

環境は
OS: WindowsXP
JDK: 1.5.0_05
Cコンパイラ: Borland C++ Compiler
です。よろしくお願いします。
mio
ぬし
会議室デビュー日: 2005/08/25
投稿数: 734
お住まい・勤務地: 神奈川県
投稿日時: 2005-11-14 16:31
「DLLのハンドル」の部分がアプリケーションのハンドルになっていると、
その該当するアプリケーションしかフックしてくれないようですね。
「DLLのハンドル」はhInstanceでしょうか?
1

スキルアップ/キャリアアップ(JOB@IT)