マウスをシステムフックし、デスクトップをクリックされたか常時判定するようにしたいのですが
デスクトップをクリック時のメッセージが送れらて来ません
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等のメッセージが通知されると思っていますが
これは勘違いでしょうか?
どうかよろしくお願いします。
GetDesktopWindow が返すハンドルと、目に見えているリストビューのウィンドウハンドルは一致しません。
Spy++ で見るとわかりますが、デスクトップの子孫ウィンドウになっています。
aetosさん
レス有難うございます
GetDesktopWindowでは駄目なのですか;
この辺りはまた別に調べてみます
また、もう一つ質問があります。
デスクトップをクリックしてもWM_LBUTTONDOWNといったメッセージが渡されません
if( pmh->hwnd == GetDesktopWindow( ) )
を外すして、別にファイルに出力するコードを混ぜてみましたが
うまくフックされていないのか、デスクトップをクリックしても何も反応がありません
フック指定には、WH_MOUSEを指定しています。
HookProc がまったく呼ばれている形跡がないのでしょうか?
それとも、目的は果たせていないにせよ、何度か呼ばれてはいるのでしょうか?
また、デスクトップではなく、自アプリのウィンドウに対してはどうですか?
あと、使っている OS は何でしょうか?