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

时间:2012-02-01 20:35:29

标签: c# c++ windows maximize-window accessibility-api

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

1 个答案:

答案 0 :(得分:5)

您可以向该窗口发送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来保证您的线程不会挂起。