0

UserControl で必要な機能の一部として、マウス メッセージをキャプチャする必要があります。アプリケーションの外側にある画面の一部をキャプチャします。最初にキャプチャを開始するには、単純なボタンがあり、すべて正常に機能しました。SetHook が機能し、WM_xxxx メッセージを確認して、それに応じて処理できます。

private void Capture_OnClick(object sender, RoutedEventArgs e)
    {
        getLeftClicks = _getLeftClicks.First;
        _hookID = SetHook(_proc);
    }

ここで、画像をクリックしてキャプチャ プロセスを開始しますが、それを機能させるには、ハンドラーに Thread.Sleep ステートメントを挿入する必要があります。

    private void Capture_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        if (_hookID != null)
            UnhookWindowsHookEx(_hookID);
        getLeftClicks = _getLeftClicks.First;

        Thread.Sleep(200);   // need to wait for this mousedown to finish before trying to hook the mouse 
        _hookID = SetHook(_proc);            
    }

私が知りたいのは、動作することがわかった任意の 200ms の数値の代わりにフックを設定する前に、すべてが終了したかどうかを調べることができる Windows プロパティがあることです。必要に応じてさらにコードを投稿しますが、問題の本質はここにあります。

ありがとう、ジム

4

1 に答える 1