1

私は、理想的には目立たず、非常に邪魔にならない時間管理ツールを wxPython で作成しようとしています。これまでのアプリは通常どおり使用でき、使用中はシステム トレイに最小化されます。

ただし、「アイコン化」されているときのように、フレームがフォーカスされていない場合、フレーム/アプリがフォーカスされているときに通常は機能するマウスとキーボードのトラッピングが機能しなくなることに気付きました。

メッセージ キュー フックを作成し、すべてのマウスおよびキーボード イベントを OS レベルでトラップする C++ プログラムを作成できることは承知していますが、そこまでは考えたくありません。結局のところ、手汚さないようにするために、そもそも wxPython で UI を書いているのです :)

4

1 に答える 1

3

マウスとキーボードのイベントが本当に必要ですか、それともユーザーがアイドル状態であるかどうかを知るだけで十分でしょうか? (あなたは時間管理アプリについて言及したので、これは実現可能だと思われます.)

このコードは Windows で動作し、アイドル時間を秒単位で返します。

from ctypes import Structure, windll, c_uint, sizeof, byref

class LASTINPUTINFO(Structure):
    _fields_ = [
        ('cbSize', c_uint),
        ('dwTime', c_uint),
    ]

def get_idle_duration():
    lastInputInfo = LASTINPUTINFO()
    lastInputInfo.cbSize = sizeof(lastInputInfo)
    windll.user32.GetLastInputInfo(byref(lastInputInfo))
    millis = windll.kernel32.GetTickCount() - lastInputInfo.dwTime
    return millis / 1000.0
于 2009-07-05T00:04:48.207 に答える