VB编程的键盘控制
VBA中检测键盘控制键
VBA中检测键盘控制键(Shift Control Alt)状态来源:水文工具集分类:代码, 博客标签:VBAVBA编写的程序中,经常需要提供一些功能键或者快捷键或者是辅助键,比如Shift|Control|Alt,以方便用户更方便使用你的程序。
VBA中并没有相关函数来完成检测键盘控制键状态的函数,因此,必须使用Windows API函数GetKeyState。
GetKeyState 函数会返回某个指定按键的状态(按下或者未按下)。
水文工具集提供VBA编写的3个相关函数,可以方便你在代码中使用,用以完成相关功能。
IsShiftKeyDown:检测Shift控制键状态IsControlKeyDown:检测Control控制键状态IsAltKeyDown:检测Alt控制键状态上面的函数返回True或者False,当指定按键按下时返回True,而未按下时返回False。
函数的定义如下:Function IsShiftKeyDown( _LeftOrRightKey As Long = LeftKeyOrRightKey _03.) As Boolean04.Function IsControlKeyDown( _LeftOrRightKey As Long = LeftKeyOrRightKey _07.) As Boolean08.Function IsAltKeyDown( _LeftOrRightKey As Long = LeftKeyOrRightKey _11.) As Boolean上面的函数都有一个可选的参数来指定是检测只有左边或者只有右边或者两者其一或者同时按下控制键,默认是左边右边两者其一,具体的可选参数有下面的类型:Const BothLeftAndRightKeys = 02.' BOTH left and right togetherConst LeftKey = 14.' LEFT key onlyConst RightKey = 26.' RIGHT key onlyConst LeftKeyOrRightKey = 38.' EITHER left or right or BOTH当然如果加以修改,一样可以用来其它功能键。
VB编程中的键盘和鼠标知识总结!
VB编程中的键盘和鼠标知识总结!大家好,今天我们来学习VB编程中的键盘与鼠标知识。
读书改变命运,这个理论在当今社会仍然适用。
并且越喜欢读书学习的人,越有更多机会去选择自己想要的生活。
不要惧怕读书的苦,这是你通向美好未来最好的路,共同努力!VB中的键盘与鼠标事件KeyPress事件KeyPress事件简介在窗体上画一个控件(指可以发生KeyPress事件的控件),并双击该控件,进入程序代码窗口后,从'过程'框中选取KeyPress,即可定义KeyPress事件过程。
一般格式为:Private Sub Text1_KeyPress(KeyAscii As Integer)'用户按下并释放一个能产生ASCII码的键时被触发End SubKeyPress事件带有一个参数,这个参数有两种形式:第1种形式是Index As Integer,只用于控件数组;第2种形式是KeyAscii As Integer,用于单个控件。
KeyDown和KeyUp事件KeyDown和KeyUp事件简介KeyDown和KeyUp事件的参数也有两种形式,其中Index As Integer只用于控件数组,而KeyCode As Integer,Shift As Integer用于单个控件。
KeyDown和KeyUp事件都有两个参数,即KeyCode和Shift。
①KeyCode是按键的实际ASCII码。
该码以'键'为准,而不是以'字符'为准。
②Shift转换键。
它指的是3个转换键的状态,包括Shift,Ctrl和Alt键,这3个键分别以二进制数形式表示,每个键有3位,即Shift 键为001,Ctrl键为010,Alt键为100。
Private Sub Command1_KeyDown(KeyCode As Integer, Shift As Integer)'用户按下任一个键时被触发End SubPrivate Sub Command1_KeyUp(KeyCode As Integer, Shift As Integer)'用户释放任一个键时被触发End Sub鼠标事件鼠标事件简介为了实现鼠标操作,Visual Basic中提供了以下3个事件过程。
VB中的键盘事件、鼠标事件、拖放技术
VB中的键盘事件、鼠标事件、拖放技术键盘事件:参数是KeyAscii,每次按一下键盘上的一个键,相应的键的Ascii码值都要赋给参数KeyAscii,然后再执行相应的操作KeyPreview:接受键盘事件。
默认情况下,窗体的KeyPreview 属性为False,只有窗体获得焦点才能相应键盘事件;若窗体的KeyPreview属性为True,窗体会在空件之前首先截获键盘事件。
Shift And 7: 取Shift参数的低三位,因为7的二进制数是111,shift参数与111进行按位And运算,得到是按了三个功能键中的哪一个。
命令按钮控件的default属性用于设置默认命令按钮.,设置为true时,按[Enter键]相当于用鼠标单击了该按钮,Cancel属性为True,则Esc键触发按钮的Click事件快捷键的优先级高于键盘事件,鼠标事件:参数X和Y表示鼠标指针的位置Clc:清除图像。
划线函数Line格式:Line (x1, y1) -(x2, y2), [color], [B][F](x1, y1) 可选的。
Single (单精度浮点数),直线或矩形的起点坐标。
(x2, y2) 必选的。
Single (单精度浮点数),直线或矩形的终点坐标。
color 可选的。
Long (长整型数),画线时用的 RGB 颜色,可用RGB函数B 可选的。
如果包括,则利用对角坐标画出矩形。
F 可选的。
如果使用了 B 选项,则 F 选项规定矩形以矩形边框的颜色填充。
不能不用 B 而用F。
例:Line (0, 0)-(X, Y), vbGreen, BF拖放技术:DragMode属性:0—手动拖放,1—自动拖放DragDrop事件:Private Sub Form_DragDrop(Source As Control, X As Single, Y As Single)Source.Move X, YEnd Sub---Source表示拖放的控件,即DragMode属性为1的控件;xy 表示鼠标指针的位置坐标。
vbSendKeys方法
vbSendKeys方法
1.模拟按键:
2.输入文本:
3.模拟组合键:
4.间隔时间:
5. 启用/禁用vbSendKeys方法:
需要注意的是,vbSendKeys方法在模拟键盘输入时,键盘焦点必须在接收输入的窗口上。
因此,在调用vbSendKeys方法前,可以使用AppActivate方法将焦点设置到指定的窗口上。
另外,vbSendKeys方法也可以结合循环和条件语句等控制结构,实现更复杂的键盘输入操作。
例如:
```
'循环输入数字1到9
For i = 1 To 9
Next i
'根据条件输入不同的文本
If condition = True Then
Else
End If
```
需要注意的是,vbSendKeys方法虽然可以实现自动化键盘输入操作,但它并不适用于所有情况。
特别是在与其他窗口同时交互或与网络操作相
关的应用程序中,可能会遇到一些问题。
在使用vbSendKeys方法时,应
谨慎选择使用场景,并测试确保其按预期工作。
总结:vbSendKeys方法是Visual Basic中的一个关键方法,用于模
拟键盘输入操作。
通过该方法,可以模拟按键、输入文本、模拟组合键等
操作。
并且可以结合循环和条件语句等控制结构,实现更复杂的键盘输入
操作。
使用vbSendKeys方法时,需要确保窗口焦点正确设置,且在特定
场景下会有一些限制。
VBA 快捷键和快速操作技巧
VBA 快捷键和快速操作技巧在使用 Visual Basic for Applications (VBA) 进行编程时,熟练掌握相关快捷键和快速操作技巧是提高效率的关键。
本文将为您介绍一些常用的 VBA 快捷键和快速操作技巧,帮助您更高效地编写 VBA 代码。
1. 快捷键1.1. 编辑快捷键- F7:切换到 VBA 编辑器窗口,在 VBA 编辑器中编辑宏代码。
- Ctrl + G:打开“立即窗口”,可在其中执行单个 VBA 语句或查看变量的值。
- Ctrl + E:切换到“代码窗口”,用于编写和编辑 VBA 代码。
- Ctrl + [:跳转到当前光标所在的变量的声明处。
- Ctrl + Shift + Z:撤销最近的撤销操作。
1.2. 常用调试快捷键- F5:启动或继续执行 VBA 代码,用于调试宏。
- F8:逐行执行 VBA 代码,可用于单步调试。
- Ctrl + F8:切换到“修个模式”,用于选择要执行的代码行。
- Ctrl + Shift + F8:清除所有断点。
- Ctrl + Shift + F9:出发当前项目中所有断点。
1.3. 其他常用快捷键- Ctrl + C:复制选定的内容。
- Ctrl + V:粘贴剪贴板中的内容。
- Ctrl + Z:撤销上一次操作。
- Ctrl + Y:重复上一次操作。
- Ctrl + F:在当前工作表或 VBA 编辑器中查找指定的内容。
2. 快速操作技巧2.1. 自动填充VBA 中可以使用自动填充功能来快速填充一系列单元格或变量。
例如,若要填充一列从 A1 到 A10 的连续数字,只需在 A1 单元格中输入起始数字,然后双击A1 单元格右下角的小黑点即可自动填充完成。
2.2. IntelliSenseVBA 的 IntelliSense 功能能够自动显示与当前正在输入的代码相关的属性、方法、关键字等信息,帮助您快速编写准确的代码。
在编写代码时,可以通过按下“.”键来触发 IntelliSense 提示,然后根据提示选择所需的代码。
VBA中的快捷键设置与应用技巧
VBA中的快捷键设置与应用技巧VBA(Visual Basic for Applications)是一种用于进行自动化操作的编程语言,常用于Microsoft Office软件中,如Word、Excel、PowerPoint等。
它可以帮助用户通过编写宏来提高工作效率和减少重复性操作。
在VBA中,设置和使用快捷键是一个非常实用的技巧,可以进一步提高工作效率。
本文将介绍VBA中的快捷键设置与应用技巧,帮助读者更好地利用VBA进行自动化操作。
一、设置自定义的快捷键在VBA中,通过设置自定义的快捷键,可以方便地执行特定的操作。
下面是设置自定义快捷键的步骤:1. 打开VBA编辑器:在需要设置快捷键的Office软件中,按下“Alt +F11”键,即可打开VBA编辑器。
2. 选择代码窗口:在VBA编辑器中,选择你需要设置快捷键的模块或代码窗口。
3. 打开属性窗口:在VBA编辑器的“视图”菜单中,选择“属性窗口”选项,即可打开属性窗口。
4. 设置快捷键:在属性窗口中,找到“名称”属性,双击该属性,即可编辑快捷键。
输入你想要的快捷键组合,如Ctrl+Shift+P。
5. 编写VBA代码:在代码窗口中,编写你想要执行的VBA代码。
例如,你可以编写一个用于插入当前日期的代码。
6. 关闭VBA编辑器:保存你的VBA代码,并关闭VBA编辑器。
现在,你可以使用你设置的快捷键组合来执行相应的操作。
按下你设置的快捷键时,VBA代码将会被执行,完成相应的任务。
二、常用的快捷键技巧除了设置自定义的快捷键,VBA中还有一些常用的快捷键技巧,可以帮助用户更高效地进行编程和操作。
1. 执行代码:在VBA编辑器的代码窗口中,按下“F5”键,即可执行当前选中的VBA代码。
这对于测试代码和调试程序非常有用。
2. 注释代码:在VBA编辑器的代码窗口中,选中需要注释的代码,然后按下“Ctrl + Shift + C”键,即可将选中的代码添加注释。
VBA的使用技巧与实用技术分享
VBA的使用技巧与实用技术分享VBA(Visual Basic for Applications)是一种编程语言,可以在Microsoft Office应用程序中编写自定义的宏和脚本。
它提供了丰富的功能和灵活性,使得用户可以通过简单的代码自动化各种工作,提高工作效率。
本文将分享一些VBA的使用技巧和实用技术,帮助读者更好地应用VBA来完成各种任务。
1. 自定义快捷键VBA允许用户自定义快捷键来执行特定的操作。
在VBE(Visual Basic Editor)中,通过选择"Tools"菜单下的"Options"选项,然后选择"Keyboard"选项卡,在右侧的命令列表中选择需要自定义的命令,并在"Press New Shortcut Key"文本框中输入快捷键。
这样,用户就可以通过快捷键来执行特定的VBA操作,提高工作效率。
2. 循环和条件语句使用循环和条件语句可以实现程序的智能化和自动化。
VBA提供了多种循环和条件语句,如For循环、Do While循环和If语句等。
通过合理地运用这些语句,可以根据特定的条件执行相应的操作,简化繁琐的工作过程,提高代码的灵活性和效率。
例如,假设有一个包含学生成绩的Excel表格,我们可以使用VBA编写一个程序来自动计算每个学生的平均分,并根据平均分的不同给出相应的评级。
通过使用For循环和条件语句,我们可以一次性处理所有学生的成绩,并生成相应的评级报告。
3. 使用数组和集合数组和集合是VBA中常用的数据结构,可以将多个相关的数据保存在一个变量中。
通过使用数组和集合,我们可以方便地处理大量数据,提高代码的可读性和复用性。
在日常工作中,经常需要处理大量的数据,并对其进行相应的操作。
使用数组和集合可以有效地管理这些数据,并进行相应的计算和分析。
例如,我们可以将一组学生的成绩保存在一个数组中,并通过遍历数组来进行求和、平均值等操作。
VB编程控制Windows中文输入法
VB编程控制Windows中文输入法
在Windows中我们可以用“Ctrl+Shift”键来调入或切换中文输入法,但是这样做每次都是使位于输入法列表顶端的那个输入法首先被调用。
通常我们都要连续按好几次“Ctrl+Shift”才能将习惯的输入法调出。
我编制了一段小程序,通过它可以把任意一个输入法放在输入法列表的顶端。
它的原理是:使用LoadKeyboardLayout函数可以改变输入法的顺序,只要在第一个参数中传递目标输入法的KeyboardlayoutName,第二个参数用KLF_REORDER就可以了。
例如,aa = LoadKeyboardLayout(″00000409″, KLF_REORDER) 使英文变成第一。
那怎样获得KeyboardlayoutName呢?因为使用GetKeyboardLayoutname可以返回当前输入法的KeyboardlayoutName,所以我们可以先用GetKeyboardLayoutList 函数来取得所有输入法,再用activateKeyboardlayout()函数设置当前输入法,最后就可以得到它的KeyboardlayoutName了。
具体步骤如下:
打开VB后选择标准的EXE文档,在Form1上添加一个Combobox和一个command控件,输入以下程序。
运行后,在combobox中选择目标输入法,按下command即可。
VB模拟按键终极教程
VB模拟按键终极教程教程, 模拟VB模拟按键终极教程,有了他,什么游戏都不怕提示:里面有个小彩蛋,找到了,E里的WI NIO你可以自己写!键盘是我们使用计算机的一个很重要的输入设备了,即使在鼠标大行其道的今天,很多程序依然离不开键盘来操作。
但是有时候,一些重复性的,很繁琐的键盘操作总会让人疲惫,于是就有了用程序来代替人们按键的方法,这样可以把很多重复性的键盘操作交给程序来模拟,省了很多精力,按键精灵就是这样的一个软件。
那么我们怎样才能用VB来写一个程序,达到与按键精灵类似的功能呢?那就让我们来先了解一下wind ows中响应键盘事件的机制。
当用户按下键盘上的一个键时,键盘内的芯片会检测到这个动作,并把这个信号传送到计算机。
如何区别是哪一个键被按下了呢?键盘上的所有按键都有一个编码,称作键盘扫描码。
当你按下一个键时,这个键的扫描码就被传给系统。
扫描码是跟具体的硬件相关的,同一个键,在不同键盘上的扫描码有可能不同。
键盘控制器就是将这个扫描码传给计算机,然后交给键盘驱动程序。
键盘驱动程序会完成相关的工作,并把这个扫描码转换为键盘虚拟码。
什么是虚拟码呢?因为扫描码与硬件相关,不具有通用性,为了统一键盘上所有键的编码,于是就提出了虚拟码概念。
无论什么键盘,同一个按键的虚拟码总是相同的,这样程序就可以识别了。
简单点说,虚拟码就是我们经常可以看到的像VK_A,VK_B这样的常数,比如键A的虚拟码是65,写成16进制就是&H41,注意,人们经常用16进制来表示虚拟码。
当键盘驱动程序把扫描码转换为虚拟码后,会把这个键盘操作的扫描码和虚拟码还有其它信息一起传递给操作系统。
VB 利用键盘模拟进行自动录入操作(完整模块代码)
Private Const VK_F5 = &H74
Private Const VK_F6 = &H75
Private Const VK_F7 = &H76
Private Const VK_F8 = &H77
Private Const VK_F9 = &H78
Private Const VK_NUMPAD1 = &H61
Private Const VK_NUMPAD2 = &H62
Private Const VK_NUMPAD3 = &H63
Private Const VK_NUMPAD4 = &H64
Private Const VK_NUMPAD5 = &
'▼插入消息队列。
Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Const VK_RSHIFT = &HA1
Private Const VK_SCROLL = &H91
Private Const VK_SELECT = &H29
Private Const VK_SEPARATOR = &H6C
Private Const VK_SHIFT = &H10
VB快捷键
F5 运行F7 代码窗口Shift + F7 对象窗口Ctrl+J 编写函数有几个函数。
老要看总是记不住,呵呵(Alt+→)Shift + 方向键改变大小Ctrl + 方向键改变位置ALT+F4 结束Ctrl+C复制Ctrl+V粘贴Ctrl+X剪贴Ctrl+F查找Ctrl+H 替换Tab 向右推Shift+Tab 向左推F8 断点运行F9 设置/清除断点Ctrl+G 立即窗口Shift+F2 到定义处Ctrl+Shift+F9 清除所有断点Ctrl+shift+F2 到上次编辑处Ctrl+PauseBreak 强行暂停程序(专门对付死循环之类的)Shift+F4:打开属性页窗口,与F4不一样Ctrl+R:查看工程窗口Ctrl+T:显示部件窗口。
菜单位置是工程----部件1、F1:显示MSDN帮助。
当然你要安装MSDN,否则得不到真正的帮助了2、F2:显示对象浏览器。
这里你可以看到对象的各种属性、方法与事件3、F3:查找一下个满足条件的内容4、F4:显示当前选中控件的属性窗体5、F5:运行程序(则是F8了)6、F7:由窗体设计切换到对应的代码窗体7、F8:单步执行程序8、F9:切换断点25、Shift+F2:查看当前光标所在的变量或函数、子过程的定义。
这一快捷键很方便,比如程序中有一个call PubFunction ,你只要将鼠标在PubFunction 任意一处点中,然后按Shift+F2就可以直接转到函数的声明处。
27、Shift+F5:重新启动28、Shift+F7:由代码窗体切换到对应的窗体设计界面29、Shift+F8:逐过程单步执行。
按过程进行调试30、Shift+F9:快速监视31、Shift+Tab:让选中的代码集体凸出32、Ctrl+F5:全编译执行33、Ctrl+A:全部选中34、Ctrl+PauseBreak:中断执行,调试过程中如果程序限入死循环,或者你随时高兴让程序停下来,此快捷键就很有用了,不要再结束任务了吧。
VB按键方案
VB按键⽅案VB中模拟按键的⽅法Visual Basic键盘是我们使⽤计算机的⼀个很重要的输⼊设备了,即使在⿏标⼤⾏其道的今天,很多程序依然离不开键盘来操作。
但是有时候,⼀些重复性的,很繁琐的键盘操作总会让⼈疲惫,于是就有了⽤程序来代替⼈们按键的⽅法,这样可以把很多重复性的键盘操作交给程序来模拟,省了很多精⼒,按键精灵就是这样的⼀个软件。
那么我们怎样才能⽤VB来写⼀个程序,达到与按键精灵类似的功能呢?那就让我们来先了解⼀下windows中响应键盘事件的机制。
当⽤户按下键盘上的⼀个键时,键盘内的芯⽚会检测到这个动作,并把这个信号传送到计算机。
如何区别是哪⼀个键被按下了呢?键盘上的所有按键都有⼀个编码,称作键盘扫描码。
当你按下⼀个键时,这个键的扫描码就被传给系统。
扫描码是跟具体的硬件相关的,同⼀个键,在不同键盘上的扫描码有可能不同。
键盘控制器就是将这个扫描码传给计算机,然后交给键盘驱动程序。
键盘驱动程序会完成相关的⼯作,并把这个扫描码转换为键盘虚拟码。
什么是虚拟码呢?因为扫描码与硬件相关,不具有通⽤性,为了统⼀键盘上所有键的编码,于是就提出了虚拟码概念。
⽆论什么键盘,同⼀个按键的虚拟码总是相同的,这样程序就可以识别了。
简单点说,虚拟码就是我们经常可以看到的像VK_A,VK_B 这样的常数,⽐如键A的虚拟码是65,写成16进制就是&H41,注意,⼈们经常⽤16进制来表⽰虚拟码。
当键盘驱动程序把扫描码转换为虚拟码后,会把这个键盘操作的扫描码和虚拟码还有其它信息⼀起传递给操作系统。
然后操作系统则会把这些信息封装在⼀个消息中,并把这个键盘消息插⼊到消息列队。
最后,要是不出意外的话,这个键盘消息最终会被送到当前的活动窗⼝那⾥,活动窗⼝所在的应⽤程序接收到这个消息后,就知道键盘上哪个键被按下,也就可以决定该作出什么响应给⽤户了。
这个过程可以简单的如下表⽰:⽤户按下按键-----键盘驱动程序将此事件传递给操作系统-----操作系统将键盘事件插⼊消息队列-----键盘消息被发送到当前活动窗⼝明⽩了这个过程,我们就可以编程实现在其中的某个环节来模拟键盘操作了。
VB模拟按键终极教程
MakeKeyLparam = Val("&H" & s)
End Function
这个函数像这样调用,比如按下A键,那么lParam=MakeKeyLparam(VK_A,WM_KEYDOWN) ,很简单吧。值得注意的是,即使你发送消息时设置了lParam参数的值,但是系统在传递消息时仍然可能会根据当时的情况重新设置该参数,那么目标程序收到的消息中lParam的值可能会和你发送时的有所不同。所以,如果你很懒的话,还是直接把它设为0吧,对大多数程序不会有影响的,呵呵。
VB模拟按键终极教程
VB模拟按键终极教程VB(Visual Basic)是一种可视化的编程语言,在Windows操作系统中得到广泛应用。
VB可以通过模拟按键实现自动化操作,比如自动填写表单、自动点击按钮等。
本教程将详细介绍如何使用VB来模拟按键操作的终极方法。
首先,我们需要创建一个新的VB项目。
打开VB开发环境,点击“新建项目”并选择“Windows桌面向导”。
在下一步中,选择“Windows窗体应用程序”并命名项目。
点击“确定”开始创建项目。
```Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, _ByVal bScan As Byte, _ByVal dwFlags As Long, _ByVal dwExtraInfo As Long)Private Const KEYEVENTF_KEYUP = &H2```上述代码声明了一个名为keybd_event的函数和一个名为KEYEVENTF_KEYUP的常量。
keybd_event函数用于模拟按键操作,KEYEVENTF_KEYUP常量用于指定按键的释放事件。
然后,在Form_Load事件处理程序中添加以下代码,实现模拟按键操作:```Private Sub Form_Loadkeybd_event(VBKeyLMenu, 0, 0, 0) '按下左Alt键keybd_event(Keys.F, 0, 0, 0) '按下F键keybd_event(Keys.F, 0, KEYEVENTF_KEYUP, 0) '释放F键keybd_event(VBKeyLMenu, 0, KEYEVENTF_KEYUP, 0) '释放左Alt键End Sub```上述代码会在窗体加载时模拟按下左Alt键和F键,并在F键释放后释放左Alt键。
最后,我们需要在按钮的Click事件处理程序中添加代码来触发模拟按键操作。
基于VB的使用键盘实现光标控制软件的设计
基于VB的使用键盘实现光标控制软件的设计尹祥贵,王春永,周力,赵志强大连水产学院信息工程学院,大连 (116023)E-mail:yxg_80@摘要:本文描述了使用程序控制的方法,实现使用键盘的Enter、↑、↓、Esc、F1~F12键控制光标移动的基本设计方法,从而提高软件的可操作性和可用性。
关键词:可操作性,可用性,程序设计中图分类号:TP3111.引言对于一直没有从事过商业软件开发的软件爱好者来说,在设计软件时,通常只考虑程序是否能够执行,执行的结果是否正确,而较少考虑到程序的可操作性,即虽然设计的软件在逻辑上是正确的,但是在运行时,每个选项或文本框都要用鼠标选中后才能选择或输入数据,而不能用Enter、↑、↓、Esc、F1~F12键来控制光标的移动,很大程度上影响了软件的操作性[2]。
在此,本论文将简要介绍一下如何使用Enter、↑、↓、Esc、F1~F12键来控制光标的移动和相应的操作。
2.准备工作INI函数为后续编程方便和用键盘控制光标的移动,首先对画面中的每个控件进行编号,并根据光标在软件中的移动顺序设置它的上下位关系,部分代码如图1所示:图1 设置光标移动顺序(部分)其中CTRLTBL是一个包含三个属性(INEXT,IBACK,IDOWN)的一个类型,在按Enter、↑、↓键时求得光标将要移动到的控件的编号。
在程序运行中,光标会在某控件聚焦,有时需要改变各个功能按钮的名称,以及是否可用,在此设置了一组数组,来存储各个按钮的名称,在需要时改变他们显示的标题名称,代码如图2所示:图2 功能键标题设置同样,状态条也要显示与当前控件相关的内容,也相应的使用一个数组来存储状态条将要显示的内容,代码如图3所示:图3 状态条内容设置各功能按钮名,状态,是否可用等,需用函数来控制和显示,它在控件得到光标,并检查该控件能合法的得到光标后调用这个函数,并相应的调整画面的显示,代码如图4所示:图4 功能键控制函数另外,在INI函数其他初始操作在此不再赘述。
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目的是随时刷新清空记录键盘输入后就准备你自己所设定的程序了。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
VB编程的键盘控制
我们利用Visual BASIC编写程序,多数情况只涉及到鼠标操作(如单击、双击、拖动等),但如果程序中需要实现文本编辑、热键激活或利用键盘进行游戏控制等功能时,将不可避免地碰到键盘捕获及处理的问题。
下面,我们就来看一看VB编程中如何进行键盘控制。
一、概述
在VB中,很多控件都提供了键盘输入功能(如文本框、组合框等),但它们对键盘的处理较简单,遇到复杂一点的要求即无能为力。
因而VB提供了KeyPress、KeyUp、KeyDown 三种键盘事件,当用户按键时,会触发这三种事件,而且窗体和接受键盘输入的控件都识别这三种事件。
下表对这些事件作了描述。
KeyDown和KeyUp事件提供了最低级的键盘响应,可用这些事件检测KeyPress事件无法检测到的情况:
◆SHIFT、CTRL和ALT键的特殊组合。
◆光标控制键。
◆HOME、END、PAGEUP、PAGEDOWN等。
◆数字小键盘的数字键与打字键盘数字键的区别。
◆不仅响应按键操作而且响应释放键操作(KeyPress只响应按键操作)。
键盘事件彼此不相互排斥。
按下某键时将生成KeyDown和KeyPress事件,而松开此键时生成KeyUp事件。
当用户按下一个KeyPress不能检测的键时将触发KeyDown事件,松开此键时生成KeyUp事件。
若使用KeyUp和KeyDown事件应确保KeyPress事件的功能不够用,通常编写KeyPress事件的代码比较容易。
二、KeyPress事件
在按下与ASCII字符对应的键时将触发KeyPress事件。
ASCII字符集代表标准键盘的字母、数字和标点符号以及部分控制键(ENTER、TAB、BACKSPACE键等)。
KeyDown 和KeyUp事件能够检测其它功能键、编辑键和光标定位键。
当处理标准ASCII字符时应使用KeyPress事件。
例如,如果希望将输入到文本框中的所有字符都强制转换为大写字符,则可在输入时使用此事件转换大小写:
Private Sub Text1_KeyPress(KeyAscii As Integer)
KeyAscii = Asc(Ucase(Chr(KeyAscii)))
End Sub
KeyAscii参数返回对应所按键的ASCII代码。
也可通过KeyPress事件识别部分控制键。
例如,下述事件过程使用KeyPress检测用户是否正在按BACKSPACE键:
Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = 8 Then MsgBox "You Pressed the BACKSPACE key."
End Sub
注:BACKSPACE键的ASCII值为8。
还可用KeyPress事件改变某些键的缺省行为。
例如,当在文本框内按ENTER键就会结束当前行输入并将光标转到下一行(Multiline属性设为True)。
在KeyPress 事件中截断ENTER键(ASCII值为13)就可避免这种情况:
Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then KeyAscii = 0
End Sub
三、KeyUp和KeyDown事件
KeyUp和KeyDown事件报告键盘本身准确的物理状态:按下键(KeyDown)及松开键(KeyUp)。
而KeyPress事件并不直接地报告键盘状态,它只提供键所代表的字符而不识别键的按下或松开状态。
进一步举例将有助于阐明这一差别。
输入大写"A"时,KeyDown事件获得"A"的ASCII 码。
在输入小写"a"时,KeyDown事件获得相同的ASCII码。
为区分大小写,KeyDown和KeyUp事件使用shift参数。
与此相对照的是,KeyPress事件将字母的大小写作为两个不同的ASCII字符处理。
KeyUp和KeyDown事件通过提供下列两参数返回输入字符的信息。
1、Keycode参数
字母键的Keycode与此字母大写字符的ASCII值相同,所以"A"和"a"的Keycode都是由Asc("A") 返回的数值;数字与标点符号键的Keycode与键上数字的ASCII码相同,因此"1"和"!"的Keycode都是由Asc("1")返回的数值。
Private Sub Text1_Keydown(KeyCode As Integer, Shift As Integer)
If KeyCode = 65 Then MsgBox "You pressed the A or a key."
End Sub
上例中按下"A"或"a"后都将显示消息框,为判断按下的字母是大写还是小写需用shift 参数。
可见,处理这些键时用KeyPress事件更方便。
KeyDown和KeyUp事件可识别标准键盘上的大多数控制键。
其中包括功能键(F1-F12)、编辑键(HOME、PAGEUP、DELETE等)、光标键(↑、↓、←、→)和数字小键盘上的键。
可以通过键代码常数或相应的ASCII值检测这些键。
例如:
Private Sub Text1_Keydown(KeyCode As Integer, Shift As Integer)
If KeyCode = 36 Then MsgBox "You pressed the HOME key."
End Sub
VB中常用控制键的Keycode值见下表:
2、Shift参数
键盘事件使用shift参数来判断按下某键的同时是否按下了SHIFT、CTRL、ALT键或它们的组合。
如果按SHIFT键,则shift 为1;按CTRL键,shift为2;按ALT键,shift为3,通过键值总和来判断这些组合。
例如,同时按下SHIFT和ALT键时shift等于5(1+4)。
在使用中,可将KeyDown 与KeyUp事件及shift参数一同使用以区分字符的大小写或检测各种组合键。
例如,以下事件过程可捕获CTRL+ALT+F1并给出提示:
Private Sub Text1_Keydown(KeyCode As Integer, Shift As Integer)
If Keycode = 112 And Shift = 6 Then MsgBox "You press the CTRL+ALT+F1 Key!"
End Sub
四、编写窗体级键盘处理程序
只有获得焦点的对象才能够接受键盘事件。
当窗体为活动窗体且其上所有控件均未获得焦点时,窗体才获得焦点。
这种情况只有在空窗体或窗体上的控件都无效时才发生。
如果将窗体上的KeyPreview属性设置为True,则每个控件在识别其所拥有的KeyPress、KeyUP、KeyDown事件之前,窗体会抢先接受这些键盘事件。
当您希望无论何时按下某键都会执行同一个操作,而不管哪个控件在此时具有焦点时,这样设置KeyPreview属性极为有用。
可在"属性"窗口中或通过Form_Load过程中的代码设置窗体的KeyPreview属性为True:Private Sub Form_Load
Form1.KeyPreview = True
End Sub
需要注意的是,当把窗体的KeyPreview属性设置为True时,窗体在控件之前识别键盘事件,但对控件来说事件仍然会发生,这可能会造成一次按键触发多个不同的处理。
为防止这种情况,可在窗体键盘事件过程结束前将KeyAscii或KeyCode重置为0。
例如,在窗体上将ENTER键捕获并处理后,把KeyAscii或KeyCode设置为0,则控件在自己的键盘事件过程中将无法识别按下的ENTER键,因而控件的键盘事件过程也不被调用。
下面,我们来看一个键盘处理的简单例子:设计一个窗体和文本框以及其它控件,无论焦点在哪个控件,按下CTRL+P即让文本框显示"Hello!";按下ALT+C 清除文本框;按下F10结束程序。
Private Sub Form_Load()
Form1.KeyPreview = True
End Sub
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = 80 And Shift = 2 Then Text1.Text = "Hello!"
If KeyCode = 67 And Shift = 4 Then Text1.Text = ""
If KeyCode = 121 Then End
End Sub。