keyhac
keyhac copied to clipboard
マウスボタンのフック中にマウス操作をpyauto.Input.sendするとフリーズ
メールでいただいたバグ報告
マウスボタンのフック処理中に マウス操作をpyauto.Input.sendすると、フリーズが起こってしまい、 解決できないため、連絡した次第です。
環境: OS:win10 Pro 1909 pyauto:2020/03/08にGitHubからダウンロードしたもの keyhac:ver1.81
どうもマウスフックでボタンダウンをフックしてその処理中に マウス操作をSendInputで送信するとフリーズが起きるようです。
ネットしらべると下記の記事が見つかりました。 「フックスレッドと同一スレッド内でSendInputすると、 Windows10でユニバーサルアプリが動作している場合には、フリーズが発生する。」
マウスジェスチャツールの作り方 - Qiit https://qiita.com/rubyu/items/88b9f93b39951252a0c1 ↑のページ内の「特定の条件下でフリーズする」という欄のリンク https://qiita.com/rubyu/items/88b9f93b39951252a0c1#%E7%89%B9%E5%AE%9A%E3%81%AE%E6%9D%A1%E4%BB%B6%E4%B8%8B%E3%81%A7%E3%83%95%E3%83%AA%E3%83%BC%E3%82%BA%E3%81%99%E3%82%8B
pyautoに同梱されているsample/hook.py にマウス操作を追記したものを添付してしています。 マウスのボタンダウンをフックして、pyauto.MouseLeftUpを送信していますが、 このhook.pyを実行して、クリックすると、onMouseDown1が表示されて数百ms 経過したのち、onMouseDown2が表示されます。 時間を空けて数回クリックしているとフック処理タイムアウトに引っかかって マウスのフックがシステム側から強制的に外されてしまいます。
マウスを連続でクリックするとpythonのインタプリタがフリーズします。 タスクマネージャーからも終了できないため、PC再起動するしかない状況に なりますので、ご注意ください。
コメントアウトしているKeyDown(ord('A'))のみにすると フリーズが解消されます。