【问题标题】:How determine if mouse points to maximise button of window under cursor如何确定鼠标是否指向光标下窗口的最大化按钮
【发布时间】:2025-12-27 09:45:16
【问题描述】:

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

【问题讨论】:

  • 你在说什么编程语言?
  • GetTitleBarInfo 看起来很有前途。
  • @Raymond,该 API 似乎只告诉按钮是可见还是按下,而不是鼠标是否只是悬停 在按钮上方。
  • valdo 得到了你的答案,但这对我来说听起来有点像 XY problem。我确信有比您发明的建议解决方案更好的方法。
  • @RobKennedy 它还为您提供了按钮的坐标,您可以使用该坐标来确定鼠标是否在其中。

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


【解决方案1】:

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

【讨论】:

    最近更新 更多