如何防止游标被取消剪切?

时间:2017-12-05 04:55:23

标签: c# pinvoke

当活动窗口是特定应用程序时,我试图将光标剪切到窗口。每当WinEventHook引发事件以进行上下文更改时,我都会有以下内容:

    [System.Runtime.InteropServices.DllImport("user32.dll")]
    static extern bool ClipCursor(ref RECT lpRect);

    [System.Runtime.InteropServices.DllImport("user32.dll")]
    static extern bool ClipCursor(IntPtr zero);

    private void ProcessEvent(IntPtr hwnd)
    {
        var windowName = GetActiveWindowTitle(hwnd);
        if (windowName == "Application Window Title")
        {
            RECT rect;
            GetWindowRect(hwnd, out rect);
            ClipCursor(ref rect);
        }
        else
        {
            ClipCursor(IntPtr.Zero);
        }
    }

我可以确认ClipCursor确实有效,但似乎每当我点击或在我的应用程序中执行某些操作时,裁剪就会停止工作,我可以再次将鼠标移到窗口边界之外。我已经通过调试器并确认rect每次都有正确的值,但只有第一次调用ClipCursor才有效。

我开始怀疑在初次调用ClipCursor()后,其他东西导致我的光标变为未被剪切,因为如果我这样做

while(true) ProcessEvent(GetForegroundWindow());

光标变为未剪辑的问题消失了。但是,这显然引入了一个问题,即我只是在耗费CPU周期才能使其正常工作。如何检测何时发生松脱,以便我可以提高效率?

0 个答案:

没有答案