【发布时间】:2011-09-29 17:56:16
【问题描述】:
我有一个进程 A,它启动一个进程 B。我在 A 中加载了一个鼠标光标,并且我希望 A 在鼠标位于 B 窗口上时更改鼠标光标。有可能吗?
当鼠标悬停在 B 上时,我尝试从 A 调用 SetCursor,但即使我在 B 中处理 WM_SETCURSOR 消息,光标也不会改变。我错过了什么吗?
【问题讨论】:
标签: windows winapi mouse-cursor
我有一个进程 A,它启动一个进程 B。我在 A 中加载了一个鼠标光标,并且我希望 A 在鼠标位于 B 窗口上时更改鼠标光标。有可能吗?
当鼠标悬停在 B 上时,我尝试从 A 调用 SetCursor,但即使我在 B 中处理 WM_SETCURSOR 消息,光标也不会改变。我错过了什么吗?
【问题讨论】:
标签: windows winapi mouse-cursor
应用程序可以控制自己的游标。从 A 调用 SetCursor() cannot 不可能工作。请注意,SetCursor() 没有指定要对哪个应用程序进行更改的参数。这是因为更改是在调用应用程序中进行的。
您需要将代码注入 B 以实现所需的更改。
【讨论】:
窗口在另一个窗口上方时控制鼠标的唯一方法是捕获鼠标(请参阅SetCapture),或通过设置系统鼠标,但我非常怀疑您是否想要执行后者。
不幸的是,捕获鼠标意味着您将所有鼠标事件发送到您的窗口而不是他们的窗口,因此他们的 GUI 无法使用。
唯一的其他解决方案是 API 挂钩和代码注入 B,您可以在其中管理 WM_MOUSEMOVE 等任何消息并从应用程序本身调用 SetCursor,可能使用某种进程间通信方法从应用程序 A 获取要设置的光标。
【讨论】:
您可以使用SetClassLong 和GCL_HCURSOR 更改子进程的默认光标。这不会影响孩子使用SetCursor 显式更改自己的光标时显示的内容,只是在未指定其他任何内容时显示的默认值。警告:程序可能永远不会显示其默认光标,在这种情况下这不会有任何效果。
【讨论】: