鼠标的api 有哪些?

stg609 2008-02-26 03:54:07
比如判断鼠标移动的消息是0x0001,
那判断鼠标左键按下是什么?右键按下又是什么?
这些资料该到哪里查呀?我查了winuser.h,查到左键是0x0002,可是试了下,根本不行.
...全文
398 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
stg609 2008-02-26
  • 打赏
  • 举报
回复
很感谢大家的资料,不过我主要想要的是2楼的东东.
FantasyFreed 2008-02-26
  • 打赏
  • 举报
回复
前些天自己写的鼠标自动点击程序的一部门,endX和endY换成windows屏幕的X,Y坐标即可
[DllImport("user32.dll")]
static extern void mouse_event(MouseEventFlag flags, int dx, int dy, uint data, UIntPtr extraInfo);
[DllImport("user32.dll")]
static extern bool SetCursorPos(int X, int Y);

SetCursorPos(endX, endY);
mouse_event(MouseEventFlag.LeftDown, 0, 0, 0, UIntPtr.Zero);
mouse_event(MouseEventFlag.LeftUp, 0, 0, 0, UIntPtr.Zero);

王集鹄 2008-02-26
  • 打赏
  • 举报
回复
const int WM_MOUSEMOVE = 0x0200;
const int WM_LBUTTONDOWN = 0x0201;
const int WM_LBUTTONUP = 0x0202;
const int WM_LBUTTONDBLCLK = 0x0203;
const int WM_RBUTTONDOWN = 0x0204;
const int WM_RBUTTONUP = 0x0205;
const int WM_RBUTTONDBLCLK = 0x0206;
const int WM_MBUTTONDOWN = 0x0207;
const int WM_MBUTTONUP = 0x0208;
const int WM_MBUTTONDBLCLK = 0x0209;
欧文 2008-02-26
  • 打赏
  • 举报
回复
得到当前鼠标指针的坐标:GetCursorPos函数
声明:
public Type POINTAPI
x As Long
y As Long
End Type
Public Declare Function GetCursorPos Lib "user32" _
(lpPoint As POINTAPI) As Long 参数缺省为byref指针传递
调用:先声明一个自定义类型变量: Dim z As POINTAPI
Private Sub Timer1_Timer()
GetCursorPos z 注:这里z是引用地址传递,其值改变,就象"返回值"
Label1.Caption = z.x
Label2.Caption = z.y
End Sub
参数lpPoint返回鼠标在屏幕上坐标(不限于程序窗体),如将鼠标指针移到屏幕左上角时,z.x=0,z.y=0,而鼠标移到屏幕右下角时,z.x=639;z.y=477
===========================================================
设置鼠标在屏幕上的坐标 : SetCursorPos函数
声明:
Private Declare Function SetCursorPos Lib "user32" (ByVal X As Long, ByVal Y As Long) As Long
调用如:Private Sub Command1_Click()
Call SetCursorPos(600, 100) 将鼠标定位到屏幕(600,100)处。
End Sub
很简单,注:屏幕是以象素为单位的(与屏幕分辨率设定有关)。不是缇。
==========================================================
自动按下鼠标按纽:mouse_event过程函数
该过程能在程序中模拟手工按下或抬起鼠标,移动鼠标的操作,声明:
Public Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
一般只用它的第1个参数,指明按下或抬起哪个按纽,如果要模拟鼠标移动,则要用到第2,3个参数dx和dy, 而最后面两个参数始终不用。
第1个参数dwFlags的可能设置值如下:
MOUSEEVENTF_LEFTDOWN=&H2: 模拟鼠标左键按下
MOUSEEVENTF_LEFTUP :模拟鼠标左键抬起
MOUSEEVENTF_RIGHTDOWN: 模拟鼠标右键按下
MOUSEEVENTF_RIGHTUP :模拟鼠标右键抬起
MOUSEEVENTF_ABSOLUTE=&H8000: 由参数dx和dy指定鼠标坐标系统中的一个绝对位置。在鼠标坐标系统中,屏幕在水平和垂直方向上均匀分割成65535×65535个单元
MOUSEEVENTF_MOVE=&H1 :移动鼠标
调用如:在屏幕上指定位置按下鼠标左键:
Public Const MOUSEEVENTF_LEFTDOWN = &H2
Public Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long
Private Sub Timer1_Timer()
SetCursorPos 300, 20
mouse_event MOUSEEVENTF_LEFTDOWN, 0&, 0&, 0&, 0&
End Sub
模拟鼠标移动需要设置其dx和dy参数来确定鼠标位置,这时第1个参数用MOUSEEVENTF_MOVE加上MOUSEEVENTF_ABSOLUTE组合,如下:
Public Const MOUSEEVENTF_MOVE = &H1
Public Const MOUSEEVENTF_ABSOLUTE = &H8000
mouse_event MOUSEEVENTF_ABSOLUTE + MOUSEEVENTF_MOVE, 65535, 65535, 0&, 0& '移动鼠标
mouse_event MOUSEEVENTF_LEFTDOWN, 0&, 0&, 0&, 0& '按下鼠标
这样可省去用SetCursorPos函数,不过它不以象素为度量单位,而是将长宽分别平分为65535个鼠标位置点,要注意。
补充说明:
参数dx-- Long,根据是否指定了MOUSEEVENTF_ABSOLUTE标志,指定水平方向的绝对位置或相对运动
参数dy-- Long,根据是否指定了MOUSEEVENTF_ABSOLUTE标志,指定垂直方向的绝对位置或相对运动
==============================================
限制鼠标活动区域函数:ClipCursor函数
限制光标只能在参数lpRect给出的矩形区域内运动。声明:
Public Declare Function ClipCursor Lib "user32" (lpRect As RECT) As Long
参数lpRect声明为RECT型,RECT的声明如下:
Public Type RECT
Left As Long
Top As Long Left,Top为左上角坐标。
Right As Long
Bottom As Long Right,Bottom为右下角坐标。
End Type
注:以上坐标使用的是屏幕坐标。
调用如:
Dim lxnRect As RECT
Private Sub Form_Click()
Static a As Boolean
a = Not a
If a = True Then 活动范围为Form1
lxnRect.Left = Form1.Left \ Screen.TwipsPerPixelX
lxnRect.Top = Form1.Top \ Screen.TwipsPerPixelY
lxnRect.Right = (Form1.Left + Form1.Width) \ Screen.TwipsPerPixelX
lxnRect.Bottom = (Form1.Top + Form1.Height) \ Screen.TwipsPerPixelY
ClipCursor lxnRect
Else 活动范围为全屏幕
lxnRect.Left = 0
lxnRect.Top = 0
lxnRect.Right = Screen.Width \ Screen.TwipsPerPixelX
lxnRect.Bottom = Screen.Height \ Screen.TwipsPerPixelY
ClipCursor lxnRect
End If
End Sub
上例是这样的,在窗体上单击时,鼠标活动限在此窗体,再单击,则恢复为全屏幕活动范围。
注:在VB中,所有尺寸都化为缇了(包括screen对象的width,height),而在API中,所有尺寸都为象素,因此,要统一单位,用转换比例screen对象的TwipsPerPixelX和TwipsPerPixelY(好象值就等于15。不知是否固定不变。)
======================================
显示/隐藏鼠标指针:ShowCursor函数
该函数可用于隐藏鼠标,但鼠标仍然可"看不见地移动"。声明:
Declare Function ShowCursor Lib "user32" (ByVal bShow As Long) As Long
参数很简单:bShow--当为true且"函数"返回值大于等于0时,显示指针,当为false且"函数"返回值小于0时,隐藏指针。
注:该函数的函数返回值需要注意:它返回"显示计数",windows维持着一个内部显示计数;倘若bShow为TRUE,那么每调用一次这个函数,计数就会递增1;反之,如bShow为FALSE,则计数递减1。只有在这个计数大于或等于0的情况下,指针才会显示出来。而小于0时则隐藏,因此,不单是简单地把bShow设为false就可以了。不然要想再使指针显示出来,可能会遇到困难。如:
Dim a As Boolean
Private Sub Form_Click()
a = False
x = ShowCursor(a)
Print x
End Sub
如果我们多次单击form窗体,则x的值会变为-1,-2,-3,-4……这时,如果再简单地把a改为true,则单击1次时指针不会重显,x的值会变为-3,-2,-1,0……只有多次单击使x等于大于0的时候,指针才会重显。
===========================================
在VB中捕捉mouse_leave事件:SetCapture和ReleaseCapture函数
SetCapture函数:设置鼠标捕获到指定窗口,使该窗口接收所有鼠标输入。
ReleaseCapture函数:释放鼠标捕获。
声明:
Declare Function SetCapture Lib "user32"(ByVal hwnd As Long) As Long
Declare Function ReleaseCapture Lib "user32"() As Long
参数:hwnd--要接收所有鼠标输入的窗口句柄。
调用如(捕捉command2的mouseleave"事件":
Private Sub Command2_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Text1.Text = X & "," & Y
Dim MouseOver As Boolean
MouseOver = (0 <= X) And (X <= Command2.Width) And (0 <= Y) And (Y <= Command2.Height) 这里要注意,一个控件的mouse类事件返回的X,Y坐标值是此控件自身的窗口坐标,不是Form的坐标!所以左上角都是(0,0)-右下角(width,height).
If MouseOver Then 当鼠标在command2上时,
Command2.BackColor = RGB(255, 255, 0)
SetCapture Command2.hwnd 使command2窗口响应鼠标输入。
Else 当鼠标离开时,以下写mouseleave的内容。
Command2.BackColor = RGB(120, 120, 120)
ReleaseCapture command2不再响应鼠标动作
End If
End Sub
我帮你baidu了
(题外话:从本次开始 我新增了jQuery EasyUI的专题页面 大家可以关注我的专题页来及时获取最新的EasyUI资源 专题页地址如下http:http://download.csdn.net/album/detail/343 同时也希望转载的那些朋友能保留我资源的说明及出处地址 我花那么多精力制作出来的 你们鼠标点两下就给我转走了还不注明出处 实在是不厚道 本来就是本着分享精神的 为的就是聚集一点人气和提供一个优良的环境来一起学习进步的 请不要抹杀掉我的热情 谢谢 )   时隔4个月之久 EasyUI终于迎来大版本更新了 本次更新内容诸多 除了常规维护外 还新增了3个新组件 都很实用 详细的可以阅读更新说明 里面给了详细的解读 另外 从该版本开始我将会逐步的将EasyUI官方以及第三方较好的插件API整合到API文档当中 并且会对这些插件做一些简单的Demo实现 存放到配套提供的程序包demo文件夹下 以便大家学习和使用 本期文档中将官方提供的所有附加插件的API都整理并存放到Extension节点下了 这些扩展的demo在附带的程序包中已经提供 可以用于参考使用 jQuery EasyUI 1 4版本更新内容: Bug(修复) menu:修复在删除一个菜单项的时候该菜单无法正确自适应高度的问题; datagrid:修复在datagrid宽度太小的时候“fitColumns”方法无法正常工作的问题 Improvement(改进) EasyUI的所有组件已经支持非固定 百分比大小的尺寸设置; menu:添加“showItem” “hideItem”和“resize”方法; menu:基于窗体大小自动调整高度; menu:添加“duration”属性 该属性允许用户自定义隐藏菜单动画的持续时间 以毫秒为单位; validatebox:添加“onBeforeValidate”和“onValidate”事件; combo:从该版本开始combo组件扩展自textbox组件(textbox是1 4中新增的组件); combo:添加“panelMinWidth” “panelMaxWidth” “panelMinHeight”和“panelMaxHeight”属性; searchbox:从该版本开始searchbox组件扩展自textbox组件(textbox是1 4中新增的组件); tree:添加“getRoot”方法 用于返回通过“nodeEl”参数指定的节点的顶部父节点元素 注意:官网的英文API中该函数的说明有误 其说明是none 无参数 实际这里是需要参数的 ; tree:添加“queryParams”属性; datetimebox:添加“spinnerWidth”属性; panel:添加“doLayout”方法 用于控制面板内组件的大小; panel:添加“clear”方法 用于清除面板内的内容; datagrid:允许用户设置百分比宽度的列(该功能真是千呼万唤始出来啊 ); form:添加“ajax” “novalidate”和“queryParams”属性; linkbutton:添加“resize”方法 New Plugin(新组件) textbox:该组件是一个增强的输入字段 它可以让用户非常简单的构建一个表单; datetimespinner:该组件是一个日期和时间的微调组件 它允许我们选择一个特定的日期或时间; filebox:filebox 该组件表单元素中用于上传文件的文件框工具组件 ">(题外话:从本次开始 我新增了jQuery EasyUI的专题页面 大家可以关注我的专题页来及时获取
大家好,又见面了!EasyUI又更新了,这次更新内容还是不少的,具体内容请参考下面的更新说明,官方的更新说明中还少了1条,我给补上了。 jQuery EasyUI 1.3.5版本更新内容: Bug(修复) searchbox:修复“searcher”函数提供的“name”参数值错误的问题; combo:修复“isValid”方法无法返回布尔值的问题; combo:修复点击页面某一个combo组件的下拉列表时触发的“onHidePanel”事件会导致页面上其他combo组件的下拉列表被关闭的问题; combogrid:修复某些从combo组件继承来的方法无法使用的问题。 Improvement(改进) datagrid:改进检查行时候的性能; menu:允许追加菜单分隔符; menu:新增“hideOnUnHover”属性用于在鼠标离开菜单的时候指示是否需要隐藏菜单; slider:新增“clear”和“reset”方法; tabs:新增“unselect”方法、“onUnselect”事件; tabs:新增“selected”属性,用于指定的默认打开的面板; tabs:Tab Panel(Tab页)新增“collapsible”属性,用于设置是否允许摺叠面板; tabs:新增“showHeader”属性、“showHeader”方法和“hideHeader”方法; combobox:允许“disabled”属性禁用下拉列表选项; tree:改进数据加载时候的性能; pagination:新增“layout”属性,用于自定义控件的样式布局; accordion:新增“unselect”方法、“onUnselect”事件; accordion:新增“select”和“multiple”属性; accordion:新增“getSelections”方法; datebox:新增“sharedCalendar”属性,允许多个datebox控件共享使用同一个calendar控件。 datebox:新增“buttons”属性,用于自定义日历下方的按钮。 (译者注:该点更新内容官方更新公告上没有注明,具体内容和用法请看datebox的API。) 历史版本: - jQuery EasyUI 1.3.4 离线API简体中文版 http://download.csdn.net/detail/richie696/6302785 - jQuery EasyUI 1.3.4 离线API简体中文版 http://download.csdn.net/detail/richie696/5363933

110,526

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧