マウスのシステムフックについて


RURU  2009-06-21 06:08:07  No: 70396

マウスをシステムフックし、デスクトップをクリックされたか常時判定するようにしたいのですが
デスクトップをクリック時のメッセージが送れらて来ません

DLL_EXPORT LRESULT CALLBACK HookProc( int nCode, WPARAM wp, LPARAM lp )
{
    MOUSEHOOKSTRUCT *pmh;

    pmh = (MOUSEHOOKSTRUCT *)lp;

    if( nCode >= 0 )
    {
        if( wp == WM_LBUTTONDOWN )
        {
            if( pmh->hwnd == GetDesktopWindow( ) )
            {
                /* デスクトップがクリックされた */
            }
        }
    }

    return CallNextHookEx(hHook, nCode, wp, lp);
}

上記コードで行っておりますが、何か問題はありますでしょうか?
システムフックなので、デスクトップをクリックした際
WM_LBUTTONDOWN等のメッセージが通知されると思っていますが
これは勘違いでしょうか?

どうかよろしくお願いします。


aetos  2009-06-21 06:23:38  No: 70397

GetDesktopWindow が返すハンドルと、目に見えているリストビューのウィンドウハンドルは一致しません。
Spy++ で見るとわかりますが、デスクトップの子孫ウィンドウになっています。


RURU  2009-06-21 06:56:12  No: 70398

aetosさん
レス有難うございます
GetDesktopWindowでは駄目なのですか;
この辺りはまた別に調べてみます

また、もう一つ質問があります。
デスクトップをクリックしてもWM_LBUTTONDOWNといったメッセージが渡されません
if( pmh->hwnd == GetDesktopWindow( ) )
を外すして、別にファイルに出力するコードを混ぜてみましたが
うまくフックされていないのか、デスクトップをクリックしても何も反応がありません
フック指定には、WH_MOUSEを指定しています。


aetos  2009-06-22 10:32:46  No: 70399

HookProc がまったく呼ばれている形跡がないのでしょうか?
それとも、目的は果たせていないにせよ、何度か呼ばれてはいるのでしょうか?

また、デスクトップではなく、自アプリのウィンドウに対してはどうですか?

あと、使っている OS は何でしょうか?


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加