我有一个进程A,它启动一个进程B.我在A中加载了一个鼠标光标,当鼠标在B窗口时,我希望A改变鼠标光标 . 可能吗?
当鼠标在B上时,我试图从A调用SetCursor,但即使我在B中处理WM_SETCURSOR消息,光标也不会改变 . 我错过了什么吗?
我有一个进程A,它启动一个进程B.我在A中加载了一个鼠标光标,当鼠标在B窗口时,我希望A改变鼠标光标 . 可能吗?
当鼠标在B上时,我试图从A调用SetCursor,但即使我在B中处理WM_SETCURSOR消息,光标也不会改变 . 我错过了什么吗?
3 回答
您可以使用带有
GCL_HCURSOR
的SetClassLong
更改子进程的默认光标 . 当孩子使用SetCursor
显式更改自己的光标时,这会显示't affect what',这只是's displayed when it hasn' t指定其他任何内容的默认值 . 警告:它's possible that a program may never display its default cursor at all, in which case this won' t有任何影响 .窗口可以控制鼠标在另一个窗口上的唯一方法是捕获鼠标(参见SetCapture),或者设置系统鼠标,但我非常怀疑你想要做后者 .
不幸的是,捕获鼠标意味着您将所有鼠标事件发送到您的窗口而不是他们的窗口,因此它们的GUI无法使用 .
唯一的另一个解决方案是API挂钩和代码注入到B中,您可以在应用程序本身内管理任何消息,如WM_MOUSEMOVE和调用SetCursor,可能使用某种进程间通信方法从应用程序A获取要设置的游标 .
应用程序可以控制自己的游标 . 无法从A调用
SetCursor()
无法正常工作 . 请注意,SetCursor()
没有参数指定要对其进行更改的应用程序 . 这是因为在调用应用程序中进行了更改 .您需要将代码注入B以实现所需的更改 .