#define STRLBUTTON TEXT("マウス左ボタンが押されました from mainProc")
#define STRRBUTTON TEXT("マウス右ボタンが押されました from my_HookProc")
#define STRCOMMAND TEXT("ボタンが押されました")
HWND hButton1;
LRESULT CALLBACK my_HookProc(int nCode, WPARAM wParam, LPARAM lParam)
{
CWPRETSTRUCT *pcwpRetStruct = (CWPRETSTRUCT *)lParam;
HDC hDC;
if(nCode==HC_ACTION)
{
hDC = GetDC(pcwpRetStruct->hwnd);
switch(pcwpRetStruct->message)
{
case WM_COMMAND:
TextOut(hDC, 10, 10, STRCOMMAND, strlen(STRCOMMAND));
break;
case WM_RBUTTONDOWN:
TextOut(hDC, 10, 10, STRRBUTTON, strlen(STRRBUTTON));
break;
}
ReleaseDC(pcwpRetStruct->hwnd, hDC);
}
return CallNextHookEx(NULL, nCode, wParam, lParam);
}
LRESULT CALLBACK mainProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
static HHOOK hHook;
HDC hDC;
switch(uMsg)
{
case WM_DESTROY:
UnhookWindowsHookEx(hHook);
PostQuitMessage(0);
return 0;
case WM_CREATE:
hHook = SetWindowsHookEx(WH_CALLWNDPROCRET, my_HookProc, NULL, GetCurrentThreadId() );
if(!hHook)
MessageBox(NULL, "hooking failed", NULL, MB_OK);
hButton1 = CreateWindow(
"BUTTON", "hButton1",
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
10, 40, 100, 20,
hWnd, NULL,
((LPCREATESTRUCT)lParam)->hInstance, NULL
);
return 0;
case WM_LBUTTONDOWN:
hDC = GetDC(hWnd);
TextOut(hDC, 10, 10, STRLBUTTON, strlen(STRLBUTTON));
ReleaseDC(hWnd, hDC);
return 0;
}
return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
No.1ベストアンサー
- 回答日時:
WH_CALLWNDPROCRETはSendMessageで送られたメッセージのみを対象とし、WM_xBUTTONDOWNはPostMessageで送られるからです。
WH_GETMESSAGEならばWM_xBUTTONDOWNをフックすることができます。そういうことだったんですか。
WH_CALLWNDPROCRETは、普通にどんなメッセージでもフックできるものだと思っていました。
だからWM_xBUTTONDOWNも当然サポートしているものだと・・。
CallWndRetProcのnCodeの値がHC_ACTIONかそうでないかに関係なくWM_xBUTTONDOWNを処理しようとすると、できてしまったので、ただ単に、フックプロシージャの働きの違いは、nCodeがメッセージを対象とするか否かの違いでしかないようですね。
(と、いまのところ思っている)
答えてもらえないんじゃないかと思っていましたが、お答えいただきありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ボタンのアイコン表示
-
エディットボックスの背景の色...
-
Win32のファイルダイアログのサ...
-
Enterキーを押されたら次の処理...
-
信頼区間の1.96や1.65ってどこ...
-
プログラムでの数字につく”f”の...
-
C言語での引数の省略方法
-
2÷3などの余りについて
-
マイナスからプラスへ転じた時...
-
C言語を実行すると-infが出てき...
-
C言語でクロマキー合成をする方法
-
DWORDの実際の型は何でしょうか
-
「指定されたキャストは有効で...
-
プログラミング初心者です。 Py...
-
「Aに対するBの割合」と「Aに対...
-
ある商品のロス率を5%見込み、...
-
Aの値からBの値を除するとは??
-
double型の値をchar配列に変換...
-
C++のfor文について
-
CStringのFindで文字列検索を行...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
音量調節
-
C言語win32api、エディットボッ...
-
ウィンドウハンドルがメッセー...
-
エラー Run-Time Check Failur...
-
ダイアログプログラムでEnterキ...
-
Win32APIでウィンドウを中央に...
-
エディットコントロール入力時...
-
LoadImageを使用し、タイトルバ...
-
MessageBoxについて
-
オーバーレイみたいな処理がしたい
-
ボタンのアイコン表示
-
仮想リストの指定行の色(バー...
-
コンソールアプリケーションの...
-
COMPORTマルチスレッドで例外発生
-
C#のswitch文を簡略化したいの...
-
WM_CREATE について
-
エディットボックスの背景の色...
-
Win32のファイルダイアログのサ...
-
WinAPIでの画像高速切り替え表...
-
ウィンドウのサイズ変更について
おすすめ情報