利用Windows API 在指定的窗口上单击一次鼠标

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了利用Windows API 在指定的窗口上单击一次鼠标相关的知识,希望对你有一定的参考价值。

已经获取了一个窗口句柄 hWnd,我想让程序在这个窗口的某一个坐标上,单击一下鼠标,即使该窗口被其他窗口遮盖住了,依然能够完成点击,用Windows API 来实现。求助!
多谢

用 postmessage 给 窗口发送消息,不过现在大多数程序 不会使用 postmessage 单击消息 中的鼠标 坐标,程序会自己调用 getcursorpos 获取系统鼠标坐标,所以很难办到,除非你 Hook 该程序getcursorpos api,
PostMessage hWnd,&H201, 0, 0
最后一个参数是 窗口的内部坐标,不是 屏幕坐标,是 long 数据,前16 是 Y 后 16位是 X,自己填充
PostMessage hWnd,&H202, 0, 0
参考技术A A. 0 B. 1 C. 5 D. 15 当然是5,有提问的时间你还不如在你电脑上试一下 c 你自己试试不就知道了 囧 儿科问题!

在 Windows 环境中,如何获取鼠标点击的坐标(相对于窗口)

【中文标题】在 Windows 环境中,如何获取鼠标点击的坐标(相对于窗口)【英文标题】:How do you get the coordinates (with respect to a window) of a mouse click, in a Windows environment 【发布时间】:2011-02-04 18:54:41 【问题描述】:

对于 Windows 环境窗口 HWND,如何获取鼠标在该窗口上单击的坐标?

编辑:抱歉含糊不清。我有一个 HWND 对象,我正在对其进行一些图像分析。我希望能够单击 HWND 对象中显示的图像上的一个点并打印出我单击的 x、y 坐标,以及 x 和 y 坐标处图像的一些属性

【问题讨论】:

【参考方案1】:

函数ScreenToClientClientToScreen 在屏幕坐标系和客户端坐标系之间转换。鼠标消息以客户端相对坐标传递到窗口。

但是,您的问题不是很清楚,所以如果我没有提供您正在寻找的答案,请编辑您的问题以准确解释您在寻找什么。

【讨论】:

@apple 您需要处理 WM_LBUTTONDOWN 和/或 WM_LBUTTONUP 消息。当然,如果您使用的是 MFC 或 WinForms 或 VCL 或 wxWidgets 或 Qt 等,那么这些将为您包装好。你为什么不告诉我们更多。我们无法真正猜测您在做什么。语言、框架、应用类型等细节会有所帮助。 这是 windows c++,如问题的标签所示。而已。一个函数更新窗口视频 WNDCLASS.lpfnWndProc。我没有使用 QT 或 wxWidgets 之类的。不过,也许我误解了你的要求 @apple “window video WNDCLASS.lpfnWndProc”是什么意思?你有一个带有 switch 语句的 WndProc 吗?您是否尝试过处理我提到的消息。【参考方案2】:

David Heffernan 已经给出了基本答案。为了更完整,这是完整的过程:

每个窗口都有一个唯一的HWND,它是一个内部数据结构的句柄。除其他外,该结构包含一个指向WindowProc(窗口过程)的函数指针。这个窗口过程负责处理WM_LBUTTONUP等消息。每个窗口消息都有两个关联的参数,历史上称为lparamwparamWM_LBUTTONUPlparam 参数包含您想要的 x 和 y 坐标。您可以通过GET_X_LPARAM(lparam)GET_Y_LPARAM(lparam) 检索它们

Windows 支持为单个HWND 链接多个WindowProc。这被称为"subclassing"

【讨论】:

以上是关于利用Windows API 在指定的窗口上单击一次鼠标的主要内容,如果未能解决你的问题,请参考以下文章

Windows Server 2008中怎么安装证书服务

ArcGIS api for javascript——查询,然后单击显示信息窗口

用C#调用Windows API向指定窗口发送按键消息

在运行时在 c++ Windows API 中调整窗口大小?

如何在windows窗体里面添加窗口

Windows API--光标的操作