利用VB建立鼠标键盘操作回放
vb键盘与鼠标事件过程上机指导

键盘与鼠标事件过程(上机指导)教学要求:掌握键盘事件KeyPress、KeyDown、KeyUp的基本方法;掌握鼠标事件MouseDown、MouseUp、MouseMove的基本方法;能利用键盘事件、鼠标事件进行程序设计。
知识点:各键盘事件的使用方法;各鼠标事件的使用方法。
内容导航:一、键盘事件(一)KeyPress事件该事件在单击键盘时发生。
它可获得按键的KeyAscii码,并不是单击任意一个键都会发生KeyPress事件,该事件只对会产生ASCII码的键有反应。
在窗体上画一个控件(指上面所讲的可以发生KeyPress事件的控件),双击该控件,进入程序代码窗口后,从“过程”框中选取KeyPress,即可以定义KeyPress事件过程。
一般格式为:Private Sub Command1_KeyPress(KeyAscii As Integer)… …End Sub(二)KeyDown事件和KeyUp事件当用户按下键盘上的任意一个键,便触发该对象的KeyDown事件,释放按键则触发KeyUp 事件。
由于按下键盘的键往往会立即放开,所以这两个事件的使用差别并不大。
KeyDown事件和KeyUp事件的参数有两种形式,其中Index As Integer只用于控件组,而KeyCode As Integer, Shift As Integer用于单个控件。
二、鼠标事件鼠标事件是由用户操作鼠标而引发的事件。
(一)Click事件用户单击鼠标键时发生,格式如下:Private Sub控件名_Click ( [ index As Integer ] )其中Index用于当控件是控件数组时传递的参数。
(二)DbClick事件用户双击鼠标键时发生,格式如下:Private Sub控件名_DbClick ( [ index As Integer ] )(三)MouseDown事件用户按下鼠标上的任一按钮时,就会引发该事件。
VB程序设计键盘与鼠标事件过程

VB程序设计键盘与鼠标事件过程11.1 键盘事件在Visual Basic中,窗体和接受键盘输入的控件都能识别这三种键盘事件:一是KeyPress,按下对应某ASCII字符的键;二是KeyDown,按下键盘的任意键;三是KeyUp,释放键盘的任意键。
只有获得焦点的对象才能接受键盘事件。
11.1.1 KeyPress事件当按下某个键时,将触发拥有输入焦点(Focus)的那个控件的KeyPress事件,返回“所按字符”的ASCII码。
语法格式:Sub Object_KeyPress(KeyAscii As Integer)或Sub Object_KeyPress([index As Integer,]KeyAscii As Integer) 说明:1、Object:是指窗体或控件对象名;2、index:一个整数,它用来惟一标识一个控件数组中的控件;3、KeyAscii:是指KeyAscii参数返回对应ASCII字符代码的整型数值;KeyPress事件带有一个参数,这个参数有两种形式。
第一种形式为:Index As Integer,这种形式只用于控件数组;第二种形式为:KeyAscii As Integer,这种形式只用于单个控件。
11.1.2 KeyDown事件和KeyUp事件当按下或松开某个键时,将触发拥有输入焦点(Focus)的那个控件的KeyDown事件或者KeyUp事件,返回键盘的直接状态。
KeyDown事件和KeyUp事件的参数也有两种形式:(1)Index As Integer 只用于控件数组。
(2)KeyCode As Integer,Shift As Integer 用于单个控件,本章只讨论这种形式。
语法格式为:Sub Object_KeyDown(KeyCode As Integer,Shift AsInteger)Sub Object_KeyUp(KeyCode As Integer,Shift As Integer)说明:1.KeyCode参数KeyCode表示按下的物理键,以“键”为准,而不是以“字符”为准。
VB模拟鼠标键盘动作

模拟鼠标键盘动作有些时候,一些重复性的,很繁琐的键盘操作总会让人疲惫,于是就有了用程序来代替人们按键的方法,这样可以把很多重复性的键盘操作交给程序来模拟,省了很多精力,按键精灵就是这样的一个软件。
那么我们怎样才能用VB来写一个程序,达到与按键精灵类似的功能呢?那就让我们来先了解一下windows 中响应键盘事件的机制。
当用户按下键盘上的一个键时,键盘内的芯片会检测到这个动作,并把这个信号传送到计算机。
如何区别是哪一个键被按下了呢?键盘上的所有按键都有一个编码,称作键盘扫描码。
当你按下一个键时,这个键的扫描码就被传给系统。
扫描码是跟具体的硬件相关的,同一个键,在不同键盘上的扫描码有可能不同。
键盘控制器就是将这个扫描码传给计算机,然后交给键盘驱动程序。
键盘驱动程序会完成相关的工作,并把这个扫描码转换为键盘虚拟码。
什么是虚拟码呢?因为扫描码与硬件相关,不具有通用性,为了统一键盘上所有键的编码,于是就提出了虚拟码概念。
无论什么键盘,同一个按键的虚拟码总是相同的,这样程序就可以识别了。
简单点说,虚拟码就是我们经常可以看到的像VK_A,VK_B这样的常数,比如键A的虚拟码是65,写成16进制就是&H41,注意,人们经常用16进制来表示虚拟码。
当键盘驱动程序把扫描码转换为虚拟码后,会把这个键盘操作的扫描码和虚拟码还有其它信息一起传递给操作系统。
然后操作系统则会把这些信息封装在一个消息中,并把这个键盘消息插入到消息列队。
最后,要是不出意外的话,这个键盘消息最终会被送到当前的活动窗口那里,活动窗口所在的应用程序接收到这个消息后,就知道键盘上哪个键被按下,也就可以决定该作出什么响应给用户了。
这个过程可以简单的如下表示:用户按下按键-----键盘驱动程序将此事件传递给操作系统-----操作系统将键盘事件插入消息队列-----键盘消息被发送到当前活动窗口明白了这个过程,我们就可以编程实现在其中的某个环节来模拟键盘操作了。
VB鼠标事件与键盘事件

VB鼠标事件与键盘事件SuB Form—MouseMove(Buttoil As Integer,Shift As Integer,x As Single,Y As Single)这3个鼠标事件过程具有相同的参数,它们把鼠标的信息传给过程。
(1)Button:被按下的鼠标按钮,可以取以下3个值。
(2)Shift:表示Shift、ctrl和Alt的状态。
如表6.7所示。
(3)x,Y:这两个值对应于当前鼠标的位置,采用ScaleMode属性指定的位置。
说明:(1)有些鼠标只有2个按键,或者虽有3个按键,但w:indows鼠标驱动程序不能识别中间按键。
在这种情况下,表6.6中的后4个参数值不能使用。
(2)对于单按鼠标器,它的按键定义为左按键。
如果鼠标带两个按键,并使用windows 的控制面板交换了鼠标器的左、右键,那么,当按右按键时,VB认为是按了左按键。
例如,如果按住Ctrl键,然后在坐标为(2000,3000)的点上按下鼠标器右键,则立即调用Forul—MouseDown过程,释放鼠标右键时,调用Form—MouseUp过程。
此时。
Button、Shift、x、Y这4个参数的值分别为2、2、2000和3000.(3)Shift是转换键,它指的是3个转换状态,包括Shift、ctrl和Alt。
这3个键分别以二进制方式表示,每个键用三位,即:Shift键为001,Ctrl键为010,Alt键为100。
当按下Shift键时,Shift参数的值为00l(十进制数1),当按下ctrl键时,Shift参数的值为010(十进制数2),而按下Alt键时,Shift参数的值为100(十进制数4)。
如果同时按下2个或3个转换键,则Shift参数的值即为上述两者或三者之和。
因此,Shift参数共可取8种值。
如何用vb实现模拟鼠标中键滚动

如何用vb实现模拟鼠标中键滚动!Declare Sub mouse_event Lib "user32" Alias "mouse_event" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)dwFlags:标志位集,指定点击按钮和鼠标动作的多种情况。
此参数里的各位可以是下列值的任何合理组合:MOOSE_EVENTF_ABSOLOTE:表明参数dX,dy含有规范化的绝对坐标。
如果不设置此位,参数含有相对数据:相对于上次位置的改动位置。
此标志可被设置,也可不设置,不管鼠标的类型或与系统相连的类似于鼠标的设备的类型如何。
要得到关于相对鼠标动作的信息,参见下面备注部分。
MOOSEEVENTFMOVE:表明发生移动。
M00SEEVENTF_LEFTDOWN:表明接按下鼠标左键。
M00SEEVENTF_LEFTUP:表明松开鼠标左键。
MOOSEEVENTF_RIGHTDOWN:表明按下鼠标右键。
MOOSEEVENTF_RIGHTUP:表明松开鼠标右键。
MOOSEEVENTF_MIDDLEDOWN:表明按下鼠标中键。
MOOSEEVENTF_MIDDLEUP:表明松开鼠标中键。
MOOSEEVENTF_WHEEL:在Windows NT中如果鼠标有一个轮,表明鼠标轮被移动。
移动的数量由dwData给出。
dx:指定鼠标沿x轴的绝对位置或者从上次鼠标事件产生以来移动的数量,依赖于MOOSEEVENTF_ABSOLOTE的设置。
给出的绝对数据作为鼠标的实际X坐标;给出的相对数据作为移动的mickeys数。
一个mickey表示鼠标移动的数量,表明鼠标已经移动。
dy:指定鼠标沿y轴的绝对位置或者从上次鼠标事件产生以来移动的数量,依赖于MOOSEEVENTF_ABSOLVTE的设置。
VB模拟按键终极教程

MakeKeyLparam = Val("&H" & s)
End Function
这个函数像这样调用,比如按下A键,那么lParam=MakeKeyLparam(VK_A,WM_KEYDOWN) ,很简单吧。值得注意的是,即使你发送消息时设置了lParam参数的值,但是系统在传递消息时仍然可能会根据当时的情况重新设置该参数,那么目标程序收到的消息中lParam的值可能会和你发送时的有所不同。所以,如果你很懒的话,还是直接把它设为0吧,对大多数程序不会有影响的,呵呵。
vb 键盘与鼠标事件过程

拖放有关的事件
与拖放有关的事件是dragdrop和dragover Dragdrop事件 事件:把控件拖到目标后放开鼠标产生一个dragdrop事件。 事件 该事件过程如下: Sub 对象名_dragdrop(source,y as single) …… end sub 参数解析: Source:是一个对象变量,类型为control,该参数含有被拖动对象的属性 X,Y:松开鼠标放下对象时鼠标光标的位置 Dragover事件 事件:用于图标的移动。拖动对象越过一个控件时产生一个dragover 事件 事件,该事件过程格式如下: Sub 对象名_dragover(source as control,x as single,y as single,state as integer) …… end sub
鼠标事件
鼠标键 鼠标键状态参数button设定,该参数是一个整数(16位),见下表
Button参数二进制值 Button参数十进制值 参数二进制值 参数十进制值
000 001 010 011 100 101 110 111 0 1 2 3 4 5 6 7 未按任何键
作用
左键被按下(默认) 右键被按下 左右键同时被按下 中间键被按下 按下中间与左键 按下中间与右键 3个键同时被按下
第十章 键盘与鼠标事件过程
Keypress事件
当一个控件或窗体拥有输入焦点时,该控件或窗体从键盘 上接受输入的信息。Keypress事件的一般格式: private sub 控件名_keypress(keyascii as integer) …… end sub 该事件有一个参数,这个参数有两种形式: 第一种形式是index as integer,只用于控件数组; 第二种形式是keyascii as integer ,用于单个控件,用来 识别按键的ascii码。 利用keypress事件可以对输入的值进行限制。
在VB中如何用API监控鼠标和键盘

End Sub
′具体的钩子程序,本例中该过程被包含在Module1中
Public Function MyKBHook(ByVal nCode As Long,ByVal wParam As Long,ByVal lParam As Long)As Long
If nCode>=0 then
Open "C:\Keyfile.txt" For Append As #1 '将键盘的操作记录在Keyfile.txt文件之中
'记录所操作的键、操作时间、日期操作时的按键状态,用16进制记录
Write #1,wParam,Hex(lParam),Date,time
键盘:
A:在Timer控件中不断使用GetAsyncKeyState取得按键信息
B:使用Hook。
如果是普通键盘钩子(WH_KEYBOARD),系统级的需要将回掉函数放在dll中,但VB不能写普通dll(不能是VB的ActiveX DLL),需要用其他编程工具写(如VC++、Delphi、Borland C++ Builder)
B:使用Hook。
如果是鼠标键盘钩子(WH_MOUSE),系统级的需要将回掉函数放在dll中,但VB不能写普通dll(不能是VB的ActiveX DLL),需要用其他编程工具写(如VC++、Delphi、Borland C++ Builder)
如果是鼠标键盘钩子(WH_MOUSE_LL),则本身就是系统级的,不需要dll,但只能在NT系统(WinNT4/2000/XP/2003)下使用
vb中键盘鼠标事件

第12章键盘与鼠标事件过程Visual Basic应用程序能够响应多种键盘事件和鼠标事件。
例如,窗体、图片框与图像控件都能检测鼠标指针的位置,并可判定其左、右键是否已经按下,还能响应鼠标按钮与Shift、Ctrl或Alt键的各种组合。
利用键盘事件可以编程响应多种键盘操作,也可以解释、处理ASCII字符。
Visual Basic应用程序还支持大多数控件及OLE的拖放功能,可用控件的Drag方法连同某些属性和事件宋实现控件的拖放操作。
OLE的拖放使应用程序的数据交换功能大大增强。
本章将对键盘和鼠标事件进行详细讲解,使读者掌握利用键盘和鼠标进行编程的基本技术。
12.1键盘事件键盘事件是用户与程序之间交互操作中的主要元素之—。
单击鼠标和按下按键都可以触发事件,而且还提供进行数据输入的手段以及在窗口和菜单中移动的基本形式。
键盘事件有三种,即KeyPress、KeyUp和KeyDown事件。
窗体和可接受键盘输入的控件(如文本框TextBox、命令按钮CommandButton、图片框PictureBox、组合框ComboBox 等)都可识别这些事件。
值得注意的是,只有获得焦点的对象才能够接受键盘事件。
对于窗体,只有成为活动窗体并且窗体中的任何控件均未获得焦点时,才会产生窗体的键盘事件。
窗体中任何控件已经获得焦点时,会产生控件的键盘事件。
12.1.1 KeyPress事件当用户按下键盘上的某个键时,将触发KeyPress事件。
该事件可以用于窗体和大部分标准控件,严格来说,当按下某个键时,所触发的是具有输入焦点(FOCUS)的那个控件的KeyPress事件。
在某一时刻,输入焦点只能位于某一个控件上,如果窗体上没有可见或有效的控件,则输入焦点位于窗体上。
当一个控件或窗体拥有输入焦点时,该控件或窗体将接受从键盘上输入的信息。
例如,假定一个文本框拥有输入焦点,则从键盘上输入的任何字符都将在该文本框上回显。
KeyPress事件过程的一般格式是:Private Sub对象名KeyPress(KeyAscii as Integer)事件过程End Sub如果接受KeyPress事件的对象为控件数组,对应的事件过程的格式为:Private Sub 对象名_KeyPress(Index as Integer,KeyAscii AS Integer)事件过程End Sub其中,“Index”是数组元素的下标。
VB键盘与鼠标事件过程

VB键盘与鼠标事件过程在VB中,键盘和鼠标事件是通过事件处理程序来实现的。
事件处理程序是一段代码,当用户与应用程序的用户界面交互时,会触发这段代码。
下面将详细介绍VB中键盘和鼠标事件的过程。
键盘事件过程:1.事件注册:在VB中,要处理键盘事件,首先需要将事件与特定的控件关联起来。
可以通过在设计视图中选择控件,然后在属性窗口中选择“事件”选项卡来注册事件。
2.事件处理程序:在事件注册后,可以在代码视图中看到为该事件创建的事件处理程序。
事件处理程序是一个特定的过程或函数,当事件触发时,会执行这段代码。
可以在事件处理程序中编写逻辑代码来响应键盘事件。
3. 事件参数:在事件处理程序中,可以使用事件参数来获取有关事件的信息。
键盘事件参数通常包括键码(KeyCode)和修饰键(Shift、Ctrl、Alt等)。
通过使用这些参数,可以确定用户按下的是哪个键,并采取相应的操作。
4.事件处理:在事件处理程序中,可以根据需要执行特定的操作。
例如,可以根据用户按下的键,执行不同的操作或调用不同的函数。
可以使用条件语句(如If语句)来根据键码执行不同的逻辑。
5.事件冒泡:在VB中,键盘事件通常具有冒泡的特性。
这意味着,当用户在一个控件上按下键时,除了该控件的键盘事件被触发外,还会触发其父控件的键盘事件。
这样可以在不同层次的控件中处理键盘事件。
鼠标事件过程:1.事件注册:与键盘事件类似,要处理鼠标事件,首先需要将事件与特定的控件关联起来。
可以通过在设计视图中选择控件,然后在属性窗口中选择“事件”选项卡来注册事件。
2.事件处理程序:在事件注册后,可以在代码视图中看到为该事件创建的事件处理程序。
事件处理程序是一个特定的过程或函数,当事件触发时,会执行这段代码。
可以在事件处理程序中编写逻辑代码来响应鼠标事件。
3. 事件参数:在事件处理程序中,可以使用事件参数来获取有关事件的信息。
鼠标事件参数通常包括鼠标按钮(Button)和鼠标位置(X、Y 坐标)。
vb键盘与鼠标事件过程

11.1.2 KeyDown和KeyUp事件
shift参数项返回一个整数,该整数相应于 〈Shift〉、 〈Ctrl〉和〈Alt〉键的状态。shift参数等于1、2和4分别表 示〈Shift〉、〈Ctrl〉和〈Alt〉键被按下,而三数的部分 和表示三个按钮部分地被同时按下。因此,可结合该参数 项来判断输入字母的大小写。
应 当 使 用 KeyDown 和 KeyUp 事 件 过 程 来 处 理 任 何 不 被 KeyPress识别的击键,诸如:功能键、编辑键、定位键以 及 任 何 这 些 键 和 键 盘 换 档 键 的 组 合 等 。 与 KeyDown 和 KeyUp事件不同的是,KeyPress不显示键盘的物理状态, 而只是传递一个字符。
KeyPreview 属性返回或设置一个值,以决定是否在控件 的键盘事件(KeyDown、KeyUp 和 KeyPress)之前激活 窗体的键盘事件。其语法为:
对象名.KeyPreview [= boolean]
其中,Boolean是布尔表达式,指定如何接收事件:当取 值为False(缺省值)时,活动控件接收键盘事件,而窗体 不接收;当取值为True时,窗体先接收键盘事件,然后是 活动控件接收事件。
表11-1 MousePointer属性值的描述
指针形状 值 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 99
常数 vbDefault vbArrow vbCrosshair vbIbeam vbIconPointer vbSizePointer vbSizeNESW vbSizeNS vbSizeNWSE vbSizeWE vbUpArrow vbHourglass vbNoDrop vbArrowHourglass vbArrowQuestion vbSizeAll vbCustom
VB编写键盘记录

VB编写键盘记录这个程序主要是利用GetAsyncKeyState函数,使用GetAsyncKeyState可以获得键盘的动作。
GetAsyncKeyState函数根据虚拟键表判断按键的类型。
返回值为一个16位的二进值数,如果被按下则最高位为1,即返回-32767。
下面是API函数及鼠标中左右键在虚拟键表中的定义:Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer好了,函数就先介绍这么多,下面开始动手实战了first,当然是创建窗口了在时间控件的Timer时间中定义检查按键类型,代码如下:Dim AddKeyKeyResult = GetAsyncKeyState(13) '回车键If KeyResult = -32767 ThenAddKey = "[ENTER]"GoTo KeyFoundEnd IfKeyResult = GetAsyncKeyState(17) 'Ctrl键If KeyResult = -32767 ThenAddKey = "[CTRL]"GoTo KeyFoundEnd IfKeyResult = GetAsyncKeyState(8) '退格键If KeyResult = -32767 ThenAddKey = "[BKSPACE]"GoTo KeyFoundKeyResult = GetAsyncKeyState(9) If KeyResult = -32767 Then AddKey = "[TAB]"GoTo KeyFoundEnd IfKeyResult = GetAsyncKeyState(18) If KeyResult = -32767 Then AddKey = "[ALT]"GoTo KeyFoundEnd IfKeyResult = GetAsyncKeyState(19) If KeyResult = -32767 Then AddKey = "[PAUSE]"GoTo KeyFoundEnd IfKeyResult = GetAsyncKeyState(20) If KeyResult = -32767 Then AddKey = "[CAPS]"GoTo KeyFoundEnd IfKeyResult = GetAsyncKeyState(27) If KeyResult = -32767 Then AddKey = "[ESC]"GoTo KeyFoundKeyResult = GetAsyncKeyState(33) If KeyResult = -32767 Then AddKey = "[PGUP]"GoTo KeyFoundEnd IfKeyResult = GetAsyncKeyState(34) If KeyResult = -32767 Then AddKey = "[PGDN]"GoTo KeyFoundEnd IfKeyResult = GetAsyncKeyState(35) If KeyResult = -32767 Then AddKey = "[END]"GoTo KeyFoundEnd IfKeyResult = GetAsyncKeyState(36) If KeyResult = -32767 Then AddKey = "[HOME]"GoTo KeyFoundEnd IfKeyResult = GetAsyncKeyState(44) If KeyResult = -32767 Then AddKey = "[SYSRQ]"GoTo KeyFoundKeyResult = GetAsyncKeyState(45) If KeyResult = -32767 Then AddKey = "[INS]"GoTo KeyFoundEnd IfKeyResult = GetAsyncKeyState(46) If KeyResult = -32767 Then AddKey = "[DEL]"GoTo KeyFoundEnd IfKeyResult = GetAsyncKeyState(144) If KeyResult = -32767 Then AddKey = "[NUM]"GoTo KeyFoundEnd IfKeyResult = GetAsyncKeyState(37) If KeyResult = -32767 Then AddKey = "[LEFT]"GoTo KeyFoundEnd IfKeyResult = GetAsyncKeyState(38) If KeyResult = -32767 Then AddKey = "[UP]"GoTo KeyFoundKeyResult = GetAsyncKeyState(39) If KeyResult = -32767 Then AddKey = "[RIGHT]"GoTo KeyFoundEnd IfKeyResult = GetAsyncKeyState(40) If KeyResult = -32767 Then AddKey = "[DOWN]"GoTo KeyFoundEnd IfKeyResult = GetAsyncKeyState(112) If KeyResult = -32767 Then AddKey = "[F1]"GoTo KeyFoundEnd IfKeyResult = GetAsyncKeyState(113) If KeyResult = -32767 Then AddKey = "[F2]"GoTo KeyFoundEnd IfKeyResult = GetAsyncKeyState(114) If KeyResult = -32767 Then AddKey = "[F3]"GoTo KeyFoundKeyResult = GetAsyncKeyState(115) If KeyResult = -32767 Then AddKey = "[F4]"GoTo KeyFoundEnd IfKeyResult = GetAsyncKeyState(116) If KeyResult = -32767 Then AddKey = "[F5]"GoTo KeyFoundEnd IfKeyResult = GetAsyncKeyState(117) If KeyResult = -32767 Then AddKey = "[F6]"GoTo KeyFoundEnd IfKeyResult = GetAsyncKeyState(118) If KeyResult = -32767 Then AddKey = "[F7]"GoTo KeyFoundEnd IfKeyResult = GetAsyncKeyState(119) If KeyResult = -32767 Then AddKey = "[F8]"GoTo KeyFoundKeyResult = GetAsyncKeyState(120) If KeyResult = -32767 Then AddKey = "[F9]"GoTo KeyFoundEnd IfKeyResult = GetAsyncKeyState(121) If KeyResult = -32767 Then AddKey = "[F10]"GoTo KeyFoundEnd IfKeyResult = GetAsyncKeyState(122) If KeyResult = -32767 Then AddKey = "[F11]"GoTo KeyFoundEnd IfKeyResult = GetAsyncKeyState(123) If KeyResult = -32767 Then AddKey = "[F12]"GoTo KeyFoundEnd IfKeyResult = GetAsyncKeyState(124) If KeyResult = -32767 Then AddKey = "[F13]"GoTo KeyFoundKeyResult = GetAsyncKeyState(125) If KeyResult = -32767 Then AddKey = "[F14]"GoTo KeyFoundEnd IfKeyResult = GetAsyncKeyState(126) If KeyResult = -32767 Then AddKey = "[F15]"GoTo KeyFoundEnd IfKeyResult = GetAsyncKeyState(127) If KeyResult = -32767 Then AddKey = "[F16]"GoTo KeyFoundEnd IfKeyResult = GetAsyncKeyState(32) If KeyResult = -32767 Then AddKey = " "GoTo KeyFoundEnd IfKeyResult = GetAsyncKeyState(186) If KeyResult = -32767 Then AddKey = ";"GoTo KeyFoundKeyResult = GetAsyncKeyState(187) If KeyResult = -32767 Then AddKey = "="GoTo KeyFoundEnd IfKeyResult = GetAsyncKeyState(188) If KeyResult = -32767 ThenGoTo KeyFoundEnd IfKeyResult = GetAsyncKeyState(189) If KeyResult = -32767 Then AddKey = "-"GoTo KeyFoundEnd IfKeyResult = GetAsyncKeyState(190) If KeyResult = -32767 Then AddKey = "."GoTo KeyFoundEnd IfKeyResult = GetAsyncKeyState(191) If KeyResult = -32767 Then AddKey = "/" '/GoTo KeyFoundEnd IfKeyResult = GetAsyncKeyState(192) If KeyResult = -32767 Then AddKey = "`" '`GoTo KeyFoundEnd If'----------NUM PADKeyResult = GetAsyncKeyState(96) If KeyResult = -32767 Then AddKey = "0"GoTo KeyFoundEnd IfKeyResult = GetAsyncKeyState(97) If KeyResult = -32767 Then AddKey = "1"GoTo KeyFoundEnd IfKeyResult = GetAsyncKeyState(98) If KeyResult = -32767 Then AddKey = "2"GoTo KeyFoundEnd IfKeyResult = GetAsyncKeyState(99) If KeyResult = -32767 Then AddKey = "3"GoTo KeyFoundEnd IfKeyResult = GetAsyncKeyState(100) If KeyResult = -32767 Then AddKey = "4"GoTo KeyFoundEnd IfKeyResult = GetAsyncKeyState(101) If KeyResult = -32767 Then AddKey = "5"GoTo KeyFoundEnd If'版权所有:教程中国KeyResult = GetAsyncKeyState(102) If KeyResult = -32767 Then AddKey = "6"GoTo KeyFoundEnd IfKeyResult = GetAsyncKeyState(103) If KeyResult = -32767 Then AddKey = "7"GoTo KeyFoundEnd IfKeyResult = GetAsyncKeyState(104) If KeyResult = -32767 Then AddKey = "8"GoTo KeyFoundEnd IfKeyResult = GetAsyncKeyState(105) If KeyResult = -32767 Then AddKey = "9"GoTo KeyFoundEnd IfKeyResult = GetAsyncKeyState(106) If KeyResult = -32767 Then AddKey = "*"GoTo KeyFoundEnd IfKeyResult = GetAsyncKeyState(107) If KeyResult = -32767 Then AddKey = "+"GoTo KeyFoundEnd IfKeyResult = GetAsyncKeyState(108) If KeyResult = -32767 Then AddKey = "[ENTER]"GoTo KeyFoundEnd IfKeyResult = GetAsyncKeyState(109) If KeyResult = -32767 Then AddKey = "-"GoTo KeyFoundEnd IfKeyResult = GetAsyncKeyState(110) If KeyResult = -32767 Then AddKey = "."GoTo KeyFoundEnd IfKeyResult = GetAsyncKeyState(2) If KeyResult = -32767 Then AddKey = "/"GoTo KeyFoundEnd IfKeyResult = GetAsyncKeyState(220) If KeyResult = -32767 Then AddKey = "\"GoTo KeyFoundEnd IfKeyResult = GetAsyncKeyState(222) If KeyResult = -32767 Then AddKey = "'"GoTo KeyFoundEnd IfKeyResult = GetAsyncKeyState(221)If KeyResult = -32767 ThenAddKey = "]"GoTo KeyFoundEnd IfKeyResult = GetAsyncKeyState(219)If KeyResult = -32767 ThenAddKey = "["GoTo KeyFoundEnd IfKeyResult = GetAsyncKeyState(16) 'shift键If KeyResult = -32767 And TimeOut = 0 ThenAddKey = "[SHIFT]"LastKey = AddKeyTimeOut = 1GoTo KeyFoundEnd IfKeyLoop = 41Do Until KeyLoop = 256 ' 显示其他键KeyResult = GetAsyncKeyState(KeyLoop)If KeyResult = -32767 Then Text1.Text = Text1.Text + Chr(KeyLoop)KeyLoop = KeyLoop + 1LoopLastKey = AddKeyExit SubKeyFound: '显示键的信息Text1 = Text1 & AddKeyEnd Sub上面的()里面的数字实际是就是那些键的Ascii码,比如13就代表回车,17代表Ctrl,……由于数目太多,一一列举不方便下面是其他的事件Private Sub Timer2_Timer()TimeOut = 0End Sub目的是随时刷新清空记录键盘输入后就准备你自己所设定的程序了。
vb中键盘鼠标事件

第12章键盘与鼠标事件过程Visual Basic应用程序能够响应多种键盘事件和鼠标事件。
例如,窗体、图片框与图像控件都能检测鼠标指针的位置,并可判定其左、右键是否已经按下,还能响应鼠标按钮与Shift、Ctrl或Alt键的各种组合。
利用键盘事件可以编程响应多种键盘操作,也可以解释、处理ASCII字符。
Visual Basic应用程序还支持大多数控件及OLE的拖放功能,可用控件的Drag方法连同某些属性和事件宋实现控件的拖放操作。
OLE的拖放使应用程序的数据交换功能大大增强。
本章将对键盘和鼠标事件进行详细讲解,使读者掌握利用键盘和鼠标进行编程的基本技术。
12.1键盘事件键盘事件是用户与程序之间交互操作中的主要元素之—。
单击鼠标和按下按键都可以触发事件,而且还提供进行数据输入的手段以及在窗口和菜单中移动的基本形式。
键盘事件有三种,即KeyPress、KeyUp和KeyDown事件。
窗体和可接受键盘输入的控件(如文本框TextBox、命令按钮CommandButton、图片框PictureBox、组合框ComboBox 等)都可识别这些事件。
值得注意的是,只有获得焦点的对象才能够接受键盘事件。
对于窗体,只有成为活动窗体并且窗体中的任何控件均未获得焦点时,才会产生窗体的键盘事件。
窗体中任何控件已经获得焦点时,会产生控件的键盘事件。
12.1.1 KeyPress事件当用户按下键盘上的某个键时,将触发KeyPress事件。
该事件可以用于窗体和大部分标准控件,严格来说,当按下某个键时,所触发的是具有输入焦点(FOCUS)的那个控件的KeyPress事件。
在某一时刻,输入焦点只能位于某一个控件上,如果窗体上没有可见或有效的控件,则输入焦点位于窗体上。
当一个控件或窗体拥有输入焦点时,该控件或窗体将接受从键盘上输入的信息。
例如,假定一个文本框拥有输入焦点,则从键盘上输入的任何字符都将在该文本框上回显。
KeyPress事件过程的一般格式是:Private Sub对象名KeyPress(KeyAscii as Integer)事件过程End Sub如果接受KeyPress事件的对象为控件数组,对应的事件过程的格式为:Private Sub 对象名_KeyPress(Index as Integer,KeyAscii AS Integer)事件过程End Sub其中,“Index”是数组元素的下标。
利用VB建立鼠标键盘操作回放

利用VB建立鼠标键盘操作回放很多的教学软件或系统监视软件可以自动记录回放用户的输入文字或点击按钮等操作操作,这个功能的实现是使用了Windows的Hook函数。
本文介绍如何通过使用VB来实现鼠标键盘操作的纪录和回放。
Windows提供API函数SetwindowsHookEx来建立一个Hook,通过这个函数可以将一个程序添加到Hook链中监视Windows消息,函数语法为:Public Declare Function SetWindowsHookEx Lib "user32" _Alias "SetWindowsHookExA" _(ByVal idHook As Long, _ByVal lpfn As Long, _ByVal hmod As Long, _ByVal dwThreadId As Long) As Long其中参数idHook指定建立的监视函数类型。
通过Windows MSDN帮助可以看到,SetwindowsHookEx函数提供15种不同的消息监视类型,在这里我们将使用WH_JOURNALRECORD和WH_JOURNALPLAYBACK来监视键盘和鼠标操作。
参数lpfn指定消息函数,在相应的消息产生后,系统会调用该函数并将消息值传递给该函数供处理。
函数的一般形式为:Hookproc (code: Integer; wparam: WPARAM; lparam: LPARAM): LRESULT stdcall;其中code为系统指示标记,wParam和lParam为附加参数,根据不同的消息监视类型而不同。
只要在程序中建立这样一个函数再通过SetwindowsHookEx函数将它加入到消息监视链中就可以处理消息了。
在不需要监视系统消息时需要调用提供UnHookWindowsHookEx来解除对消息的监视。
WH_JOURNALRECORD和WH_JOURNALPLAYBACK类型是两种相反的Hook类型,前者获得鼠标、键盘动作消息,后者回放鼠标键盘消息。
VB程序中实现鼠标

在VB程序中实现鼠标右键双击西北工业大学(710072) 况正谦在Microsoft Visual BASIC(VB)中,窗体(Form)和控件(Control)等对象的单击(Click)和双击(Double-Click)事件都是指鼠标左键而言的。
鼠标右键的单击和双击事件在VB中没有对应的事件驱动过程去响应和处理。
但是在实际应用中(特别是一些可视化的图形软件)可能对鼠标键的功能定义比较丰富,单靠鼠标左键的单击和双击难以满足复杂的需要。
因此有必要开发和扩充VB应用程序对鼠标右键的响应能力。
VB定义的鼠标事件VB定义的鼠标事件有五种:单击(Click)、双击(DblClick)、鼠标键按下(MouseDown)、鼠标键松开(MouseUp)和鼠标光标移动(MouseMove)。
其中前两种事件单击和双击是专指鼠标左键而言,后三种则适用于所有鼠标键。
后三种鼠标事件的事件驱动过程有如下的形式: Sub对象名-鼠标事件(Button As Integer,Shift As Integer, X As Single, Y As Single) 用户插入的事件响应和处理代码End Sub 传递给事件过程的参数中,整型数Button的最低三位从右到左分别对应鼠标左、右、中三个键。
事件发生时,哪个或哪些键处于被按下的状态,Button的对应位就为1,否则为0。
程序中可以用VB的位运算AND来检测鼠标键的状态。
整数Shift的最低三位从右到左分别对应事件发生时键盘的Shift、Ctrl、Alt键。
事件发生时,Shift、Ctrl、Alt中的哪个或哪些键处于被按下的状态,参数Shift 的对应位就为1,否则为0。
单精度值X和Y存放的是事件发生时鼠标光标的X-Y坐标值。
该值对于窗体对象而言是鼠标光标在窗体客户区中的坐标,对于控件对象则是鼠标光标在窗体客户区中相对于控件左上角的坐标。
鼠标右键事件的检测实际上,鼠标的单击事件可以被分解为MouseDown和MouseUp两个事件,所以我们可以用MouseDown事件来取代单击事件。
VBA实现Excel的宏指令的录制与回放

VBA实现Excel的宏指令的录制与回放Excel是一种常用的办公软件,而宏指令的录制与回放功能使得Excel的自动化处理更为高效。
VBA(Visual Basic for Applications)是一种用于编写Excel宏的编程语言,通过使用VBA可以实现Excel的宏指令的录制与回放。
本文将介绍如何使用VBA来实现Excel的宏指令的录制与回放。
首先,我们需要打开Excel,并进入开发人员模式。
在Excel菜单栏中选择“文件”,然后选择“选项”。
在选项对话框中选择“自定义功能区”,然后在右侧的列表中选中“开发人员”,点击“确定”按钮。
此时会在Excel菜单栏上显示“开发人员”选项卡,点击该选项卡进入开发人员模式。
进入开发人员模式后,我们可以开始录制宏指令。
点击开发人员选项卡上的“录制宏”按钮,弹出录制宏对话框。
在对话框中,我们需要为宏指令命名,并选择宏指令存储的位置。
可以选择将宏指令存储在当前工作簿中,或者存储在个人工作簿中以供其他工作簿使用。
接下来,点击“确定”按钮开始录制宏指令。
录制宏指令时,我们可以执行一系列的操作,例如在单元格中输入数据、格式化单元格、创建图表等。
在录制宏指令期间,Excel会自动记录我们的操作步骤,并将其转换为VBA代码。
完成宏指令的录制后,我们可以停止录制。
点击开发人员选项卡上的“停止录制”按钮,录制宏指令的过程结束。
现在,我们已经成功完成了宏指令的录制。
接下来,我们可以使用VBA代码来回放宏指令。
在开发人员选项卡中,点击“Visual Basic”按钮,打开Visual Basic for Applications编辑器。
在VBA编辑器中,我们可以看到刚刚录制的宏指令的代码。
可以按照我们的需求对代码进行编辑和修改。
在代码编辑器中,我们可以编写更复杂的程序逻辑,实现更灵活的宏指令功能。
完成对代码的编辑后,我们可以点击VBA编辑器中的“运行”按钮来执行宏指令的回放。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
利用VB建立鼠标键盘操作回放很多的教学软件或系统监视软件可以自动记录回放用户的输入文字或点击按钮等操作操作,这个功能的实现是使用了Windows的Hook函数。
本文介绍如何通过使用VB来实现鼠标键盘操作的纪录和回放。
Windows提供API函数SetwindowsHookEx来建立一个Hook,通过这个函数可以将一个程序添加到Hook链中监视Windows消息,函数语法为:Public Declare Function SetWindowsHookEx Lib "user32" _Alias "SetWindowsHookExA" _(ByVal idHook As Long, _ByVal lpfn As Long, _ByVal hmod As Long, _ByVal dwThreadId As Long) As Long其中参数idHook指定建立的监视函数类型。
通过Windows MSDN帮助可以看到,SetwindowsHookEx函数提供15种不同的消息监视类型,在这里我们将使用WH_JOURNALRECORD和WH_JOURNALPLAYBACK来监视键盘和鼠标操作。
参数lpfn 指定消息函数,在相应的消息产生后,系统会调用该函数并将消息值传递给该函数供处理。
函数的一般形式为:Hookproc (code: Integer; wparam: WPARAM; lparam: LPARAM): LRESULT stdcall;其中code为系统指示标记,wParam和lParam为附加参数,根据不同的消息监视类型而不同。
只要在程序中建立这样一个函数再通过SetwindowsHookEx函数将它加入到消息监视链中就可以处理消息了。
在不需要监视系统消息时需要调用提供UnHookWindowsHookEx来解除对消息的监视。
WH_JOURNALRECORD和WH_JOURNALPLAYBACK类型是两种相反的Hook类型,前者获得鼠标、键盘动作消息,后者回放鼠标键盘消息。
所以在程序中我们需要建立两个消息函数,一个用于纪录鼠标键盘操作并保存到一个数组中,另一个用于将保存的操作返给系统回放。
下面是具体的程序实现:首先建立一个新工程,在Form1中加入三个CommandButton控件用于控制消息钩子,另外还可以增加若干Command或者TextBox控件用于检验操作回放的效果。
然后在工程中增加一个模块文件,在模块中加入以下定义和代码:Option ExplicitPublic Type EVENTMSGmessage As LongparamL As LongparamH As Longtime As Longhwnd As LongEnd TypePublic Declare Function CallNextHookEx Lib "user32" _(ByVal hHook As Long, _ByVal ncode As Long, _ByVal wParam As Long, _ByVal lParam As Long) As LongPublic Declare Function SetWindowsHookEx Lib "user32" _Alias "SetWindowsHookExA" _(ByVal idHook As Long, _ByVal lpfn As Long, _ByVal hmod As Long, _ByVal dwThreadId As Long) As LongPublic Declare Sub CopyMemoryT2H Lib "kernel32" _Alias "RtlMoveMemory" _(ByVal Dest As Long, _Source As EVENTMSG, _ByVal Length As Long)Public Declare Sub CopyMemoryH2T Lib "kernel32" Alias "RtlMoveMemory" (Dest As EVENTMSG, ByVal Source As Long, ByVal Length As Long)Public Declare Function UnhookWindowsHookEx Lib "user32" _(ByVal hHook As Long) As LongPublic Const WH_JOURNALPLAYBACK = 1Public Const WH_JOURNALRECORD = 0Public Const HC_SYSMODALOFF = 5Public Const HC_SYSMODALON = 4Public Const HC_SKIP = 2Public Const HC_GETNEXT = 1Public Const HC_ACTION = 0Public EventArr(1000) As EVENTMSGPublicEventLog As LongPublic PlayLog As LongPublic hHook As LongPublic hPlay As LongPublic recOK As LongPublic canPlay As LongPublic bDelay As BooleanPublic Function HookProc(ByVal iCode As Long, ByVal wParam As Long, _ByVal lParam As Long) As LongDim Result As LongrecOK = 1Result = 0If iCode < 0 Then 'iCode小于0必须直接调用下一个消息钩子函数Result = CallNextHookEx(hHook, iCode, wParam, lParam)ElseIf iCode = HC_SYSMODALON Then '不允许纪录recOK = 0ElseIf iCode = HC_SYSMODALOFF Then '允许纪录recOK = 1ElseIf ((recOK > 0) And (iCode = HC_ACTION)) Then'将消息纪录在纪录队列中CopyMemoryH2T EventArr(EventLog), lParam, Len(EventArr(EventLog)) EventLog = EventLog + 1If EventLog >= 1000 Then'当纪录大于1000后释放消息钩子UnhookWindowsHookEx hHookEnd IfEnd IfHookProc = ResultEnd FunctionPublic Function PlaybackProc(ByVal iCode As Long, ByVal wParam As Long, _ ByVal lParam As Long) As LongDim Result As LongcanPlay = 1Result = 0If iCode < 0 Then 'iCode小于0必须直接调用下一个消息钩子函数Result = CallNextHookEx(hPlay, iCode, wParam, lParam)ElseIf iCode = HC_SYSMODALON Then '不允许回放canPlay = 0ElseIf iCode = HC_SYSMODALOFF Then '允许回放canPlay = 1ElseIf ((canPlay = 1) And (iCode = HC_GETNEXT)) ThenIf bDelay ThenbDelay = FalseResult = 50End If'从纪录队列中取出消息并赋予lParam指针指向的EVENTMSG区域CopyMemoryT2H lParam, EventArr(PlayLog), Len(EventArr(EventLog))ElseIf ((canPlay = 1) And (iCode = HC_SKIP)) ThenbDelay = TruePlayLog = PlayLog + 1End IfIf PlayLog >= EventLog ThenUnhookWindowsHookEx hPlayEnd IfPlaybackProc = ResultEnd Function在Form1的代码窗口中加入以下代码:Option ExplicitPrivate Sub Command1_Click()EventLog = 0hHook = SetWindowsHookEx(WH_JOURNALRECORD, AddressOf HookProc, _ App.hInstance, 0)Command2.Enabled = TrueCommand1.Enabled = FalseEnd SubPrivate Sub Command2_Click()UnhookWindowsHookEx hHookhHook = 0Command1.Enabled = TrueCommand2.Enabled = FalseCommand3.Enabled = TrueEnd SubPrivate Sub Command3_Click()PlayLog = 0hPlay = SetWindowsHookEx(WH_JOURNALPLAYBACK, AddressOf PlaybackProc, _App.hInstance, 0)Command3.Enabled = FalseEnd SubPrivate Sub Form_Load()Command1.Caption = "纪录"Command2.Caption = "停止"Command3.Caption = "回放"Command2.Enabled = FalseCommand3.Enabled = FalseEnd Sub运行程序,点击“纪录”按钮,然后在TextBox中输入一些文字或者在窗口上移动光标后再按“停止”键停止消息纪录,然后按“回放”按钮,可以看到刚才鼠标键盘的操作被丝毫不差的回放了出来。