マウスがどのウィンドウにあるかに関係なく、マウスクリックを検出するにはどうすればよいでしょうか?
できれば Python でお願いしますが、他の言語で説明していただければ、理解できるかもしれません。
Microsoft のサイトでこれを見つけました:http://msdn.microsoft.com/en-us/library/ms645533(VS.85).aspx
しかし、リストされている通知を検出したり取得したりする方法がよくわかりません。
pygame の pygame.mouse.get_pos() 関数を次のように使用してみました:
import pygame
pygame.init()
while True:
print pygame.mouse.get_pos()
これは単に 0,0 を返します。私は pygame に詳しくないのですが、何かが足りないのでしょうか?
いずれにせよ、サードパーティのモジュールをインストールする必要がない方法の方が好ましいです。(pywin32以外)http://sourceforge.net/projects/pywin32/)
ベストアンサー1
プログラム外でマウスイベントを検出する唯一の方法は、Windowsフックをインストールすることです。ウィンドウフックの設定。pyフックモジュールは細かい詳細をカプセル化します。以下は、マウスクリックごとに場所を出力するサンプルです。
import pyHook
import pythoncom
def onclick(event):
print event.Position
return True
hm = pyHook.HookManager()
hm.SubscribeMouseAllButtonsDown(onclick)
hm.HookMouse()
pythoncom.PumpMessages()
hm.UnhookMouse()
確認するには例.pyモジュールと共にインストールされるスクリプトの詳細については、イベントパラメータ。
pyHookはアクティブなメッセージポンプを必要とするため、純粋なPythonスクリプトで使用するには難しいかもしれません。チュートリアル:
グローバル入力イベントの通知を受け取るアプリケーションには、Windows メッセージ ポンプが必要です。これを取得する最も簡単な方法は、Python の Win32 拡張パッケージの PumpMessages メソッドを使用することです。[...] 実行すると、このプログラムはアイドル状態になり、Windows イベントを待機します。GUI ツールキット (wxPython など) を使用している場合は、ツールキットが独自のループを提供するため、このループは不要です。