gpt4 book ai didi

winapi - ClipCursor 成功,但实际上什么也没做

转载 作者:行者123 更新时间:2023-12-03 00:34:09 27 4
gpt4 key购买 nike

我正在编写一个非常简单的程序来将鼠标剪辑到指定的窗口。它从系统托盘运行,没有可见窗口。由于同一窗口会有多个实例,因此它使用 EnumWindows() 迭代每个顶级窗口,并将它们的 hwnd 与 GetForegroundWindow() 进行比较。如果为 true,它将运行标准 ClipCursor() 代码。 ClipCursor() 返回 TRUE,并且我断言 GetClipCursor() 设置的 RECT 是与传递给 ClipCursor()RECT 完全相同。然而,光标可以在屏幕上的任何位置自由移动。

我已经检查了RECT中的值是否是窗口的确切值,我已经在 Release模式下编译了程序并使用管理员权限运行它,但仍然没有任何结果。下面的代码正是我们找到 GetForegroundWindow()HWND 后运行的代码:

// Get the window client area.
GetClientRect(hwnd, &rc);

// Convert the client area to screen coordinates.
POINT pt = { rc.left, rc.top };
POINT pt2 = { rc.right, rc.bottom };
ClientToScreen(hwnd, &pt);
ClientToScreen(hwnd, &pt2);
SetRect(&rc, pt.x, pt.y, pt2.x, pt2.y);

clipped = true;
ClipCursor(&rc);

RECT rect;
GetClipCursor(&rect);

assert(rect.bottom == rc.bottom);
assert(rect.left == rc.left);
assert(rect.right == rc.right);
assert(rect.top == rc.top);

我删除了很多检查,因为它们变得烦人(我使用的是 MessageBox()'s),但是这段代码确实在它应该运行的时候运行。光标没有被剪切,我不明白为什么。

最佳答案

由于光标是共享资源,因此您尝试剪辑它的操作会被调用 ClipCursor 取消剪辑光标的任何其他人覆盖。许多操作会自动松开光标(例如任何焦点更改)。对于背景窗口来说,改变光标剪辑被认为是很糟糕的形式。

关于winapi - ClipCursor 成功,但实际上什么也没做,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12015200/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com