知道一个程序的控件的句柄,如何实现用sendmessage实现鼠标点击,谢谢!!
解决方案 »
- 编码转换的问题,如何将如下代码转换成中文?能转换吗?
- vb如何实现多语言去持?
- 请问各位高手如何修改MSFlexGrid1表中数据。现在我可以修改,但为什么在数据库表中还是原先数据,没有修改成功呢?急盼,请各位高手快快
- 对Excel单元格进行深度编程!
- VB程序打包问题
- COMBOBOX 默认显示8行数据(高度), 能否让他显示16行数据?
- 一个小问题啊,大虾来拿分儿吧!!!!!
- 我刚开始学VB以前学ASP,能给初学者一点意见和建议吗?请问有陕西朋友吗?
- 关于 重复调用Shell 导致 系统资源不足 的问题,请高手们多帮忙!
- 请问如何在VB中获取系统默认字体?
- 关于如何调用按钮单击事件的问题
- 如何测量一段代码的运行时间
Public Const WM_MOUSEACTIVATE = &H21
Public Const WM_MOUSEFIRST = &H200
Public Const WM_MOUSELAST = &H209
Public Const WM_LBUTTONUP = &H202
Public Const WM_LBUTTONDOWN = &H201
Public Const WM_LBUTTONDBLCLK = &H203
Public Const WM_RBUTTONUP = &H205
Public Const WM_RBUTTONDOWN = &H204
Public Const WM_RBUTTONDBLCLK = &H206
SendMessage or PostMessage
SendMessage hWnd,WM_MOUSEMOVE,0,y*2^16+x '注意最后那个y*2^16+x(即y<<16+x)
同理,鼠标点击:
SendMessage hWnd,WM_LBUTTONDOWN,MK_LBUTTON,y*2^16+x '记得定义MK_LBUTTON,MK_RBUTTON
有了这些,可以写一个简单的点击过程:
Private Sub LeftClick(hwnd as Long,x as Integer,y as Integer)
SendMessage hwnd,WM_MOUSEMOVE,0,y*2^16+x
SendMessage hwnd,WM_LBUTTONDOWN,MK_LBUTTON,y*2^16+x
SendMessage hwnd,WM_LBUTTONUP,MK_BUTTON,y*2^16+x
End Sub
RightClick同理.这样就是鼠标点了... 先发送消息设置鼠标位置在DELPHI里是
SendMessage(hButton, WM_LBUTTONDOWN, MK_LBUTTON, LOWORD(X)+HIWORD(Y));SendMessage(hButton, WM_MouseMove, 0, LOWORD(X)+HIWORD(Y));C++BUILDER 或VC里
如:
SendMessage(hwnd,WM_MOUSEMOVE,1,MAKELPARAM(point.x,point.y));
SendMessage hWnd,WM_LBUTTONDOWN,MK_LBUTTON,y*2^16+x '记得定义MK_LBUTTON,MK_RBUTTON
有了这些,可以写一个简单的点击过程:
Private Sub LeftClick(hwnd as Long,x as Integer,y as Integer)
SendMessage hwnd,WM_MOUSEMOVE,0,y*2^16+x
SendMessage hwnd,WM_LBUTTONDOWN,MK_LBUTTON,y*2^16+x
SendMessage hwnd,WM_LBUTTONUP,MK_BUTTON,y*2^16+x
End Sub
RightClick同理.
Public Const WM_MOUSEMOVE = &H200
Public Const WM_LBUTTONUP = &H202
Public Const WM_LBUTTONDOWN = &H201
Public Const MK_LBUTTON = &H1Public Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As LongPublic Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Sub LeftClick(hwnd As Long, x As Integer, y As Integer)
PostMessage hwnd, WM_LBUTTONDOWN, MK_LBUTTON, y * 2 ^ 16 + x '这是后台模拟点击的,这方面的资料偶找了好久啊..
PostMessage hwnd, WM_LBUTTONUP, MK_LBUTTON, y * 2 ^ 16 + x
End Sub
这个可以了... 偶也找了半天... 实验过了..确实可以行
数值
DELPHI里C++里 是酱紫MakeLong(x,y);
MAKELONG宏可以将两个16位的无符号数组合成一个32位的无符号数:
The MAKELONG macro creates an unsigned 32-bit value by concatenating two given 16-bit values.
DWORD MAKELONG(
WORD wLow, // low-order word of long value
WORD wHigh // high-order word of long value
);
Parameters
wLow
Specifies the low-order word of the new long value.
wHigh
Specifies the high-order word of the new long value.
Return Values
The return value is an unsigned 32-bit value.
Res
The MAKELONG macro is defined as follows:
#define MAKELONG(a, b) ((LONG)(((WORD)((DWORD_PTR)(a) & 0xffff)) | ((DWORD)((WORD)((DWORD_PTR)(b) & 0xffff))) << 16))
VB里貌似没这个东西可用