使用VMWare-Unity时检查鼠标是否在窗口内

时间:2014-05-30 15:06:06

标签: winapi vmware

在我正在处理的应用程序中,我会弹出一个通知窗口,通知用户有关事件的信息。它与Outlook使用的新邮件通知非常相似 - 它会显示几秒钟然后自动消失。但是,如果鼠标位于通知窗口的顶部,则窗口将保持可见,直到鼠标离开窗口区域。

要查看鼠标是否在窗口内,请使用GetCursorPosGetWindowRect Win32 API函数。这些在大多数情况下都很有效。但是,我发现当我使用VMWare的Unity模式(VM中的应用程序窗口出现在VM之外)时,它们不会按预期工作。如果鼠标不在VM应用程序的区域内,而是在VM外部运行的应用程序中,那些Win32 API调用仍然告诉我鼠标位于VM中。

例如,当我在Unity中运行并且鼠标在我的通知窗口上时,我从这两个API调用中获得以下信息:

Window Rect:
Left: 1190
Right: 1540
Top: 743
Bottom: 864

Mouse:
X: 1529
Y: 802

当鼠标坐在Windows桌面或其他非VM应用程序窗口上时,我得到以下结果:

Window Rect:
Left: 1200
Right: 1550
Top: 748
Bottom: 869

Mouse:
X: 1547
Y: 799

正如您所看到的,GetCursorPos返回一个位于窗口屏幕矩形内的鼠标位置,因此即使鼠标未覆盖,通知也不会消失。

我尝试使用GetCursorInfo API来查看游标是否正在显示,但在两种情况下都会在flags变量中返回值1。所以,我不知道如何让它在Unity模式下工作。还有其他我可以检查的东西来检测这个吗?

0 个答案:

没有答案