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 プロパティがあることです。必要に応じてさらにコードを投稿しますが、問題の本質はここにあります。
ありがとう、ジム