(開発環境)
WindowsXP Pro SP2
VS2005 SP1
MFCベース
SDI、FormView
マウスがアプリケーションのウィンドー外にある場合も動いているか
監視する方法を教えて頂けないでしょうか。
CxxxViewクラスのOnMouseMoveだと、ウィンドーが見える状態でマウスが
ウィンドー内にある動きしか監視できません。
最小化していても、他のアプリに隠れている時も、要するに画面上で
動いているかどうかを常に監視する方法ですが・・・
よろしくお願いします。
マウスフックですネ!
http://www.kumei.ne.jp/c_lang/sdk2/sdk_162.htm
マウスキャプチャと言うのもあります。
http://www.kumei.ne.jp/c_lang/sdk2/sdk_101.htm
以上。参考まで
オショウさん、有難う御座います。
「猫でも」さんは敷居が高くて内容があまり理解できませんでした。
SetWindowsHookExを調べて以下の様に作成したのですが
うまくマウス動作を検知してくれません。
(CxxxView)
HHOOK hHook; // フック識別用のハンドル
LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam)
{
// マウスメッセージでなければ、次のフックプロシージャを呼ぶ
if(nCode != HC_ACTION)
return CallNextHookEx(hHook, nCode, wParam, lParam);
else
{
AfxMessageBox("123");
return 1;
}
}
void CxxxView::OnInitialUpdate()
{
hHook = SetWindowsHookEx(WH_MOUSE, (HOOKPROC)MouseProc, NULL, 0);
}
void CxxxView::~CxxxView()
{
UnhookWindowsHookEx(hHook);
}
よろしくお願いします。
ええ〜と・・・
そのコードのモジュールは、単体のDLLになってますか?
元アプリが、そのDLLをLoadLibraryして、フックを開始させ
必要が無くなったらアンフックして、FreeLibraryする。
この手順を守らないと、いろいろな問題が出たり、正常に機
能しません。
システム側の機能をフックするので、PC再起動なんてこと
にもなりますから。
以上。
横槍失礼します。
マウスの移動監視ということですが、マウスフックなんて使わなくても、
単にタイマーで定期的にGetCursorPosして前回との差分を取るだけでも十分ということも多いと思います。
これだとタイマーの周期以下の動きは追跡できませんが、実装は簡単になります。
>うまくマウス動作を検知してくれません。
どういう風に?
返事が遅れて申し訳ありませんでした。
DLLにてシステムフックを使用して監視できました。
みなさん、有難うございました。