鼠标消息是队列消息,好像因为这个原因,所以得以投递的方式来发送消息,而用sendmessage貌似就不灵。我知道两种投递鼠标消息的办法,一种是用PostMessage,一种是用Mouse_Event。分述如下:
一、Mouse_Event方法
假设我们希望发送鼠标消息到TreeView控件的节点上使它的NodeClick事件发生,可以用如下代码:
Dim rc As RECT
Dim pt As POINTAPI
'TVM_GETITEMRECT消息的lparam参数是hitem,通过rc.left传进去,节点的坐标位置则通过rc返回
rc.Left = GetTVItemFromNode(trcX.HTvw, nodX)
Call SendMessage(trcX.HTvw, TVM_GETITEMRECT, True, rc)
pt.x = rc.Left
pt.y = rc.Top
'节点的相对坐标要变为绝对坐标
Call ClientToScreen(trcX.HTvw, pt)
Call SetCursorPos(pt.x, pt.y)
mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
其中GetTVItemFromNode函数的说明见这篇文章:http://blog.csdn.net/slowgrace/archive/2009/04/16/4083667.aspx。其他函数、结构和常量都可从Win32API中查到。
二、PostMessage方法
假设我们希望通过模拟鼠标点击来是tabstrip控件的click事件发生,可以通过投递鼠标点击消息在相应位置来达成。
Public Function SendClick(hwnd As Long, mX As Long, mY As Long)
Dim i As Long
i = PostMessage(hwnd, WM_LBUTTONDOWN, 0, (mX And &HFFFF) + (mY And &HFFFF) * &H10000)
i = PostMessage(hwnd, WM_LBUTTONUP, 0, (mX And &HFFFF) + (mY And &HFFFF) * &H10000)
End Function
Private Sub cmdTest_Click()
Dim aa As MSComctlLib.TabStrip
Set aa = Me.TabStrip0.Object
Call SendClick(aa.hwnd, aa.Tabs(2).Left / 15, aa.Tabs(2).Top / 15)
Set aa = Nothing
End Sub
注意,这里面这个15,那是缇和像素之间的转换窍要,呵呵。参看这里:http://blog.csdn.net/slowgrace/archive/2009/02/22/3916962.aspx以及下面的摘抄:“Left-返回或设置对象内部的左边与它的容器的左边之间的距离。Top-返回或设置对象的内顶部和它的容器的顶边之间的距离。对于窗体,Left 和 Top 属性总以缇为单位来表达;对于控件,它们的度量单位决定于它的容器的坐标系统。这些属性值随着用户或程序中移动该对象而改变。”
另外,关于WM_LBUTTONDOWN消息的lParam,摘抄如下http://baike.baidu.com/view/1514116.htm
The low-order word specifies the x-coordinate of the cursor. The coordinate is relative to the upper-left corner of the client area.
The high-order word specifies the y-coordinate of the cursor. The coordinate is relative to the upper-left corner of the client area.
本文来自CSDN博客,转载请标明出处:file:///F:/資料/通过API函数发送鼠标点击消息%20-%20slowgrace的专栏%20-%20CSDN博客.htm
分享到:
相关推荐
同时,API函数也可以发送消息到其他窗口,比如`PostMessage`可以异步地将消息放入目标窗口的消息队列。 深入学习API函数和消息函数,不仅需要理解每个函数的用法,还需要理解Windows消息机制和线程模型。这对于开发...
【API函数】API,全称为Application Programming Interface,是操作系统为应用程序提供的一组接口,使得开发者可以通过调用这些接口来实现特定的功能。在C++编程中,API函数是开发者与操作系统进行交互的重要途径。...
5. **使用WinAPI函数**:很多API函数是Windows系统提供的,如`CreateWindow`用于创建窗口,`SendMessage`用于发送消息等。理解这些函数的用途和用法对编写底层或系统级程序至关重要。 6. **系统资源管理**:API函数...
鼠标动作”涉及的是利用API函数来模拟用户的键盘输入和鼠标操作,这对于自动化测试、脚本编写或远程控制等场景非常有用。下面我们将深入探讨这一技术。 首先,API模拟发送按键主要涉及到Windows API中的几个函数,...
3. **用户输入处理**:API函数如GetAsyncKeyState、GetKeyboardState可以获取键盘状态,GetCursorPos、SetCursorPos则与鼠标位置相关,处理用户的输入事件。 4. **内存管理和进程线程**:VirtualAlloc、VirtualFree...
根据给定文件中的标题“API函数说明 固高控制卡”及描述“固高控制卡的官方API函数说明,简单资料”,以下将详细介绍文件中提到的各个API函数的知识点。 ### 1. MessageBoxA() #### 函数描述 `MessageBoxA()` 是一...
《VB API函数大全》是针对Visual Basic编程者的一份宝贵资源,它集合了大量的Windows API函数,这些函数在标准VB库中未直接提供,但能够极大地扩展VB程序的功能和性能。API(Application Programming Interface)是...
### API函数参考大全知识点概述 #### 一、Win32 API概述 - **为何使用Win32 API**:Win32 API是微软为Windows操作系统提供的一组编程接口,旨在帮助开发者利用系统的各种功能来构建高效稳定的Windows应用程序。...
描述中的“可查找API函数”意味着该软件具有一个API数据库,程序员可以通过搜索找到需要的API,并了解其用途和用法。此外,“软件包含数百个VB调用API函数实现各种功能”暗示这个工具集成了大量的API实现,覆盖了...
在Windows编程中,菜单是用户界面的重要组成部分,允许用户通过点击来执行各种操作。API(Application Programming Interface)提供了多种用于创建、修改和管理菜单的函数。以下是一些常用的菜单函数: 1. **...
以下是常用的 API 函数,分为网络函数、消息函数和文件处理函数三大类。 网络函数 1. WNetAddConnection:创建同一个网络资源的永久性连接。 2. WNetAddConnection2:创建同一个网络资源的连接。 3. ...
通过这些API函数,开发者可以编写出能够与Windows系统底层交互的应用程序。本文将根据给定的内容,整理并归纳一系列重要的Windows API函数,并分为网络连接、消息处理、文件操作三大类进行详细介绍。 #### 一、网络...
3. 调用API函数:在程序中通过已定义的API函数名调用,传递必要的参数,比如窗口句柄、消息ID等,以模拟按钮点击事件。 4. 错误处理:处理可能出现的错误,例如函数调用失败,或者找不到相应的API函数。 在"content...
以上介绍了Windows API中的一部分关键函数及其功能概述,这些API函数覆盖了网络管理、消息处理、文件操作等多个方面,为Windows平台的应用程序开发提供了强大的支持。理解并掌握这些API函数的使用方法,对于开发者来...
开发者还需要了解Windows消息机制,因为许多API函数与消息循环紧密相关。此外,理解线程和进程的概念也是必要的,因为许多API涉及到多线程编程。 通过深入学习和实践Windows API,开发者可以掌握Windows系统级别的...
通过《精通Windows API函数接口编程实例源代码》,你可以深入探究每个知识点,并结合实际代码加深理解。这个过程中,不断练习和调试,你会逐渐熟悉Windows API的使用,成为一名出色的Windows平台开发者。
### API函数大全整理 在计算机科学领域中,API(应用...以上列举的API函数只是冰山一角,它们为开发人员提供了强大的工具来处理文件、目录以及消息等操作。通过合理利用这些API,可以显著提高应用程序的效率和功能性。
"WINDOWS api 函数大全" 是一个全面收集了Windows API函数的资源,它对于进行系统级编程、驱动开发或深入理解Windows操作系统的工作原理至关重要。 Windows API 包含了大量的函数,这些函数覆盖了诸如窗口管理、...
2. GetMessagePos:取得消息队列中上一条消息处理完毕时的鼠标指针屏幕位置。 3. GetMessageTime:取得消息队列中上一条消息处理完毕时的时间。 4. PostMessage:将一条消息投递到指定窗口的消息队列。 5. ...