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

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

如何确定鼠标是否指向(悬停)最大化窗口按钮,即使该窗口不是我的应用程序。 有 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 来保证您的线程不会挂起。

关于c# - 如何确定鼠标是否指向光标下窗口的最大化按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9102938/

相关文章:

c# - XML 下载适用于模拟器,但不适用于手机

c# - 找不到 IDynamicObject?

c++ - "invalid conversion from"与 pthread_create 问题

c++ - OpenGL-点云的变色方案

windows - 在windows批处理中打印一段

windows - 如何在不删除或操作任何内容的情况下将二进制内容加载到剪贴板? (自动热键)

c# - 如果列表中包含后缀,则使用 LINQ 从字符串中删除后缀?

c# - Visual Studio 在已保存的文件上提示 'Save as...' 对话框。

c++ - 函数不想接受我的论点?

windows - 为应用程序选择合适的文件扩展名