|
Windowfrogを愛用させていただいている者です。 この頃ほんの少しながらプログラムをかじり始め、 Windowfrogの便利なマウスジェスチャ機能を自作ツールの中でも実現出来たらと思ったのですが、 以下の点で悩んでおります。
?@マウスフックプロシージャ内のcase WM_MOUSEWHEELにて、 GetAsyncKeyState(VK_LBUTTON)で左クリックされているかどうかを確認してPostMessage()するも、 自作ツールが反応するより先に、元から表示されているウインドウでスクロールが行われてしまいます。
?A上記の点については目を瞑ってそのまま処理を続行するも、左クリックや右クリックを離したことを検出する方法が分かりません。
宜しければ、以下の二点について答えていただければと思います。
掲示板で相応しくない話題であれば、メールで答えていただければと思います。
|
No.175 2010/08/07(Sat) 21:39:24
|
☆ Re: マウスジェスチャについて。 / NoName |
|
|
|
>mouse_eventで合成したメッセージもフックプロシージャに届くので、場合によってはそれも考慮して処理 について、以下のようなグローバル変数を使用した簡単な切り替えを試してみました。 void Thread(void){ if(WaitForSingleObject(hEvent,500)==WAIT_TIMEOUT){ bClick=TRUE; mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0); mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0); bClick=FALSE; ResetEvent(hEvent); } ExitThread(0); } //フックプロシージャ内 if(wParam==WM_LBUTTONDOWN){ hThread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)Thread,0,0,NULL); CloseHandle(hThread); hThread=NULL; bLeftButtonDown=TRUE; if(bClick)return CallNextHookEx(g_hMouseHook,nCode,wParam,lParam); else return TRUE; }
すると、クリックが効いたかと思いきや、 500ms毎にクリック操作が繰り返されてしまうようです。
これはスレッドの作成が失敗しているからなのでしょうか。
|
No.190 2010/08/10(Tue) 22:53:35
|
|