当活动窗口是特定应用程序时,我试图将光标剪切到窗口。每当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周期才能使其正常工作。如何检测何时发生松脱,以便我可以提高效率?