8

画面上の任意の場所でのマウスクリックを検出するために pyhooks を使用しようとしています。問題は、PumpMessages() でしか機能しないことです。構築したwhileループ内で動作させたいと思います。これを達成する方法はありますか/なぜpumpMessagesが必要なのですか?

def onclick(event):
    print 'Mouse click!'
    return True


hm = pyHook.HookManager()

hm.MouseLeftDown = onclick

hm.HookMouse()
pythoncom.PumpMessages()
hm.UnhookMouse()

上記は、実行できる唯一の方法です。

私はこのようなことを達成しようとしています:

sTime = time.time()

def onclick(event):
    global sTime
    print 'Time between clicks equals: %i' % time.time() - stime
    sTime = time.time()
    return True

hm.MouseLeftDown = OnClick

while True:

    hm.HookMouse()

編集:私は賢い男ではありません。このシナリオでは while ループは必要ありません。

はぁ..

4

2 に答える 2

16

後で参照できるようpythoncom.PumpWaitingMessages()に、実行をロックしないため、whileループ内で使用できます。このようなもの:

while True:
    # your code here
    pythoncom.PumpWaitingMessages()
于 2013-01-10T00:51:01.403 に答える
4

pyhook チュートリアルから:

グローバル入力イベントの通知を受け取るアプリケーションには、Windows メッセージ ポンプが必要です。

ただし、これは必ずしもコードの動作を妨げるものではありません。あなたがやろうとしていることを投稿してみませんか。あなたのコードのコンテキストでメッセージ ポンプを使用する方法を探すことができます。

問題を解決できる方法の 1 つは、PostQuitMessages (元の解決策はこちら)を使用することです。

import ctypes
ctypes.windll.user32.PostQuitMessage(0)
于 2012-04-04T03:58:47.470 に答える