如何确定鼠标是否指向光标下窗口的最大按钮

How determine if mouse points to maximise button of window under cursor

本文关键字:窗口 按钮 光标 鼠标 何确定 是否      更新时间:2023-10-16

如何确定鼠标是否指向(悬停在)窗口的最大化按钮,即使该窗口不是我的应用程序。有API吗?

您可以向该窗口发送WM_NCHITTEST。返回值将与请求坐标上的对象类型相对应。

类似这样的东西:

bool IsMouseOverMaxBtn(HWND hWnd)
{
    POINT pt;
    VERIFY(GetCursorPos(&pt)); // get mouse position
    int retVal = SendMessage(hWnd, WM_NCHITTEST, 0, MAKELONG(pt.x, pt.y));
    return HTMAXBUTTON == retVal;
}

编辑:

您可以将此消息发送到任何窗口(不一定属于您的线程/进程)。由于不涉及指针(例如字符串指针),所以没有问题。

然而,您应该注意,向属于另一个线程的窗口发送(而不是发布)消息是一项相当繁重的操作,在此过程中,您的线程将被挂起。甚至可能出现线程挂起的情况,因为为该窗口提供服务的应用程序的线程挂起。

您可以考虑使用SendMessageTimeout来保证线程不会挂起。