040102.htm
来自「提供一个VB学习教程,入门级。来源于网上」· HTM 代码 · 共 171 行 · 第 1/2 页
HTM
171 行
Declare Function GetKeyNameText Lib "user32" Alias "GetKeyNameTextA" (ByVal lParam As Long, ByVal lpBuffer As String, ByVal nSize As Long) As Long<br>
第一个参数指明一个键的扫描码值,再乘上&H10000,第二个参数指定一个用来装载键名称的字符串缓冲区,第三个参数为缓冲区长度。函数的返回值是实际写入字符串缓冲区的字符数。<br>
调用如:<br>
Private Sub Command1_Click()<br>
Dim abuf As String<br>
abuf = String(255, " ")<br>
x& = MapVirtualKey(VK_CONTROL, 0)<br>
lng& = GetKeyNameText(x& * &H10000, abuf, 255)<br>
Print Left(abuf, lng&)<br>
End Sub<br>
说明:第一个参数为什么要乘上&H10000呢?这是因为其原本是以二进制数来表示的,位0到5=0;位16到23=按键的扫描码;位24=增强型键盘上的扩展位;位25=如设为1,表示忽略左右Shift和Ctrl键的区别。为了使原本在位0-7上的扫描码值x&到位16-23位上去,就要乘上二进制数1000000000000000(16个0)--十六进制值就是&H10000。<br>
-----------------------------------------------------------------------<br>
模拟击键动作:keybd_event过程<br>
模拟在键盘上按下或抬起了哪个键,要同时传入键的虚拟键码和扫描码(实验中我发现可以不要扫描码),由于按下按键和抬起按键是两个动作,因此对于单击键,应分两次调用函数,第二次调用时将第三个参数设为2,表示抬起。注意对于一些功能键,如Ctrl和Alt等,必须分两次调用函数(实际上,任一键都应调用两次为妥,因为都会保持按下状态,只是别的键嘛,因是虚拟键,与物理键还是有点不同,无妨碍)。声明:<br>
Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)<br>
参数如下:<br>
bVk: Byte,欲模拟的虚拟键码 <br>
bScan: Byte,键的OEM扫描码 <br>
dwFlags: Long,零;或设为下述两个标志之一 <br>
KEYEVENTF_EXTENDEDKEY(值1) 指出是一个扩展键,且在前面冠以0xE0代码 <br>
KEYEVENTF_KEYUP(值2) 模拟松开一个键 <br>
dwExtraInfo: Long,零。通常不用的一个值。api函数GetMessageExtraInfo可取得这个值。允许使用的值取决于特定的驱动程序。<br>
调用如:模拟单击空格键。<br>
x& = MapVirtualKeyA(VK_SPACE, 0)<br>
keybd_event VK_SPACE, x&, 0, 0 '单击空格键。<br>
再如模拟Ctrl+V键:<br>
x& = MapVirtualKeyA(VK_CONTROL, 0)<br>
keybd_event VK_CONTROL, x&, 0, 0 '按下Ctrl,它自动保持按下状态。<br>
keybd_event vbKeyV, 0, 0, 0 '单击V键,这里直接用VB常数,且扫描码也无,简便法。<br>
keybd_event VK_CONTROL, x&, 2, 0 '抬起Ctrl键。<br>
再如抓取活动窗口(Alt+Print Screen键):<br>
keybd_event VK_MENU, 0, 0, 0<br>
keybd_event VK_SNAPSHOT, 0, 0, 0 <br>
keybd_event VK_MENU, 0, 2, 0<br>
(抓屏是直接按Print Screen键即可,只抓取活动窗口就要同时按Alt键。)<br>
也可模拟其他特殊键,如Windows键的虚拟键码值为91(在API浏览器中查不到),直接用:keybd_event 91, 0, 0, 0<br>
keybd_event 91, 0, 2, 0 可以弹出"开始"菜单,因为是在"抬起"按键时会弹出,所以要调用两次。只要知道虚拟键码,我们就可以模拟任何的击键动作,所有的虚拟键码值(普通十进制)如下:<br>
--------第一排F键和主键盘上键---------<br>
F1-F12键:值从112-123。 主键盘上数字0-9键:值从48-57。<br>
字母A-Z键:值从65-90。 ESC键:值27。<br>
"~"符号键:值192。 "-"减号键:189。 <br>
"="等号键:187。 " \ "键:220。<br>
退格键Backspace:8。 TAB键:9。<br>
"["左中括号键:219。 "]"右中括号键:221。<br>
回车键Enter:13. 大小写转换键Caps Lock:20。<br>
";"分号键:186。 "'"引号键:222。<br>
Shift键:16。(也可另只指左Shift键:160,只指右Shift键:161。)<br>
","逗号键:188。 "。"句号键:190。<br>
"/"键:191。 <br>
Ctrl键:17。(也可左:162;右:163)Alt键:18。(也可左:164;右:165)<br>
Windows键:左:91;右:92。 <br>
------功 能 键---------<br>
上下左右键头键:左:37;上:38:右:39;下:40。<br>
Sleep进入休眠键:95。<br>
Print Screen抓屏键:44。 Scroll Lock键:145。<br>
Insert插入键:45。 Delete删除键:46。<br>
Home开始位置键:36。 END结束位置键:35。<br>
Page Up向上翻页键:33。 Page Down向下翻页键:34。<br>
------数字小键盘上的键-------<br>
NumLock键:144。 "/"号键:111。<br>
"*"号键:106。 "-"号键:109。<br>
"+"号键:107。 回车键:13。<br>
其余键分两种情况,当NumLock键关上时:<br>
Num 1键:35。 Num 2键:40。 Num 3键:34。 Num 4键:37。 Num 5键:12。Num 6键:39。 Num 7键:36。 Num 8键:38。 Num 9键:33。 Num 0键:45。<br>
Del键:46。<br>
当NumLock键打开时:(键盘上Numlock指示灯亮)<br>
Num 1键:97。 Num 2键:98。 Num 3键:99。 Num 4键:100。 Num 5键:101。Num 6键:102。 Num 7键:103。 Num 8键:104。 Num 9键:105。 Num 0键:96。<br>
Del键:110。<br>
-----鼠 标 键------- <br>
鼠标左键:值1。 鼠标右键:值2。 <br>
主要就是以上这些,这可是我自己用GetKeyboardState函数试出来的。</font>
<p align="center">
<br>
< <a href="040101.htm">上一页</a>--<a href="http://www.xxby.com" target="_blank">华生小屋</a>--<a href="040103.htm">下一页</a>
><br>
</td>
</tr>
</table>
</center>
</div>
</body>
</html>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?