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);            
    }

我想知道的是,在设置我的钩子代替我发现的任意 200 毫秒数字之前,我可以检查一些 Windows 属性以查看是否一切都已完成。如果需要,我将发布更多代码,但问题的核心在于这里。

谢谢,吉姆

4

1 回答 1

-1

尝试使用 MouseLeftButtonUp 事件而不是 MouseLeftButtonDown。

于 2015-01-05T04:19:19.367 回答