2010-12-08 9 views
2

私はpyHookでマウスのダブルクリックを取得しようとしていますが、代わりにシングルクリックの2つのペアのエントリを取得しています。 WM_LBUTTONDOWN(0x201)およびWM_LBUTTONUP(0x202)。私はWM_LBUTTONDBLCLK(0x203)を期待しています。私はここで何を見逃していますか?私はこのヒントを見つけたマウスを取得するpyHookでダブルクリック

import pythoncom, pyHook 

def OnMouseEvent(event):   
    print event.Message, event.Position 
    return True 

hm = pyHook.HookManager() 
hm.MouseAll = OnMouseEvent 
hm.HookMouse() 
pythoncom.PumpMessages() 

this post MrZebraでは言う:

編集「送信されるように、この(0x203)の場合は、お使いのウィンドウクラスはCS_DBLCLKSクラススタイルで作成する必要があります」This pageは、doubleclickingがこれらの4つのmsgs: WM_LBUTTONDOWN、WM_LBUTTONUP、WM_LBUTTONDBLCLK、およびWM_LBUTTONUPを生成することを示しますが、実際には最初の2つを2回取得します。

私はWin7x64

REEDITでPython 2.7とpyHook 1.5.1を使用しています:解答C++/C#のキーボード/マウスが代替案をフックとして、私は考えるでしょう。一方、2回クリック間の時間を評価するダブルクリックイベントを決定する関数を構築するのが一般的なプラクティスかどうかはわかりません。

+0

'hm = pyHook.HookManager()'ステートメントの後に 'hm.SubscribeMouseAllButtonsDbl(OnMouseEvent)'を追加してみてください。 – martineau

+0

私は変更を加えましたが、ダブルクリックは表示されません。私は多くのアドバイスをお寄せください。 –

答えて

1

あなたは2 WM_LBUTTONDOWNWM_LBUTTONUPなしWM_LBUTTONDBLCLKを得ている理由は、理由MrZebraが言うことである:ターゲットウィンドウクラスのスタイルはCS_DBLCLKSスタイルが含まれていません。ターゲットウィンドウクラスのソースコードを変更することができない限り、Windowsは常にダブルクリックを2回の別々のクリックに分割するため、WM_LBUTTONDBLCLKを受け取ることはありません。

これを解決する唯一の方法は、クリック間の時間を測定することです。クリック数が十分に速い場合は、WM_LBUTTONDBLCLKを受け取ったかのように行動します。 Windowsのダブルクリック時間については、thisを参照してください。ダブルクリックが50ミリ秒か何かを仮定してはいけません。

+0

ありがとうMr. Sigvardsson –

+0

大歓迎です! –

関連する問題