作为我在 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);
}
我想知道的是,在设置我的钩子代替我发现的任意 200 毫秒数字之前,我可以检查一些 Windows 属性以查看是否一切都已完成。如果需要,我将发布更多代码,但问题的核心在于这里。
谢谢,吉姆