
VC++6.0でグローバルフック用のDLLを作っていて、どうしてもわからないので質問させていただきます。
フックの内容は、ウィンドウが最前面にあるかどうか常に監視したいので、状態が変わるメッセージをフックしています。
フック対象はとあるゲームなんですが、テストのためにメモ帳を対象にテストをしました。
まず、spy++でウィンドウの状態を変化させたときに送られてくるメッセージを調べた結果。
WM_ACTIVATEが送られてくるので、これをフックしてみたのですが、spy++だとバックグラウンドに行った時、フォアグラウンドに行った時、最小化したとき、最小化から復帰したときにWM_ACTIVATEが送られてくるんですが、いざフックしてみると最小化するときと最小化から復帰したときにしかフックが作動しません。
spy++ではWM_SETFOCUSも送られてくるようだったので、そちらも試してみたのですが、まったく反応がありません。
逆に、spy++では検知してくれないWM_SHOWWINDOWではバックグラウンドに行った時、フォアグラウンドに行った時、最小化したとき、最小化から復帰したとき、すべてに反応してくれました。
このWM_SHOWWINDOWをフックしたときのようになれば問題無いのですが、フック対象をメモ帳からとあるゲームにしたときに、バックグラウンドに行った時と最小化したときは反応してくれたものの、フォアグラウンドに行った時と最小化から復帰したときは反応してくれません。
それと、WM_SHOWWINDOWのメッセージをフックした時のwparamの値なんですが、ネットで調べてみると
表示されようとしているとき 1
非表示されようとしているとき 0
となっているはずなのですが、自分のをみてみると常に647で固定されています。
どなたか解決策をご教授お願いします。
LRESULT CALLBACK WndProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if (nCode < 0) {
return CallNextHookEx(hHook, nCode, wParam, lParam);
} else if (nCode == HC_ACTION) {
MSG *lmsg;
lmsg = (MSG *)lParam;
switch (lmsg->message){
case WM_SHOWWINDOW:
MessageBox(NULL,"showwindow","info",MB_OK | MB_TOPMOST);
return CallNextHookEx(hHook, nCode, wParam, lParam);
break;
}
}
return CallNextHookEx(hHook, nCode, wParam, lParam);
}
A 回答 (1件)
- 最新から表示
- 回答順に表示

No.1
- 回答日時:
自己解決しました。
参考URL(googleのキャッシュですが、非常にわかりやすかったので)
http://209.85.175.104/search?q=cache:6_zT7FKQ0F0 …
MSG *lmsg;
lmsg = (MSG *)lParam;
switch (lmsg->message){
この部分が間違っていて、
CWPSTRUCT* lp = (CWPSTRUCT*)lParam;
switch (lp->message){
とすることで全て解決できました。
この質問の回答を考えてくださった方には非常にご迷惑おかけしました。
本当に申し訳ございませんでした。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
メッセージハンドラ
-
msgboxの表示位置
-
vbaから他のアプリを終了
-
SendMessage で ESC など
-
VBAでコントロールのハンドルを...
-
メッセージボックスの選択ボタ...
-
グローバルフック(SetWindowsH...
-
他のウィンドウのボタンを自動...
-
エクセルで作った新しいウイン...
-
グラフの交点の求め方(Excel)
-
「アイテムは収集されました」...
-
エクセルのコントロールツール...
-
コントロールの書式設定で、“コ...
-
[VB.net] DataGridViewの列ヘッ...
-
VBAのフォント変更(エクセルか...
-
エクセルで1行目から3行目が消...
-
DateTimePickerでに年月までし...
-
勝手にウィンドウが開いて止ま...
-
コンボボックス内の文字サイズ変更
-
リソースファイルとは・・・
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
vbaから他のアプリを終了
-
SetWindowText関数について
-
他のウィンドウのボタンを自動...
-
メッセージボックスの選択ボタ...
-
msgboxの表示位置
-
VBAでコントロールのハンドルを...
-
メッセージハンドラ
-
点滅で知らせる方法
-
ウインドウが閉じたことを知る方法
-
SendMessage で ESC など
-
キーボード・フックのアプリを...
-
VB.netでFindWindowExやると・...
-
WM_NCLBUTTONUPについて
-
WINAPI 他のウインドウを重ね...
-
システム例外のメッセージを変...
-
VBでRegisterWindowMessage関数...
-
デスクトップ上のアイコンの位...
-
チェックボックスのキーダウン...
-
VBでRegisterWindowMessage関数...
-
C# の MDI
おすすめ情報