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


RURU  2009-06-20 21:08:07  No: 70396  IP: [192.*.*.*]

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

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-20 21:23:38  No: 70397  IP: [192.*.*.*]

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

編集 削除
RURU  2009-06-20 21:56:12  No: 70398  IP: [192.*.*.*]

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

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

編集 削除
aetos  2009-06-22 01:32:46  No: 70399  IP: [192.*.*.*]

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

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

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

編集 削除