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> 
        第一个参数指明一个键的扫描码值,再乘上&amp;H10000,第二个参数指定一个用来装载键名称的字符串缓冲区,第三个参数为缓冲区长度。函数的返回值是实际写入字符串缓冲区的字符数。<br>
        调用如:<br>
        Private Sub Command1_Click()<br> 
        Dim abuf As String<br> 
        abuf = String(255, " ")<br> 
        x&amp; = MapVirtualKey(VK_CONTROL, 0)<br> 
        lng&amp; = GetKeyNameText(x&amp; * &amp;H10000, abuf, 255)<br> 
        Print Left(abuf, lng&amp;)<br> 
        End Sub<br> 
        说明:第一个参数为什么要乘上&amp;H10000呢?这是因为其原本是以二进制数来表示的,位0到5=0;位16到23=按键的扫描码;位24=增强型键盘上的扩展位;位25=如设为1,表示忽略左右Shift和Ctrl键的区别。为了使原本在位0-7上的扫描码值x&amp;到位16-23位上去,就要乘上二进制数1000000000000000(16个0)--十六进制值就是&amp;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,欲模拟的虚拟键码&nbsp;<br>
        bScan: Byte,键的OEM扫描码&nbsp;<br>
        dwFlags: Long,零;或设为下述两个标志之一&nbsp;<br>
        KEYEVENTF_EXTENDEDKEY(值1) 指出是一个扩展键,且在前面冠以0xE0代码&nbsp;<br>
        KEYEVENTF_KEYUP(值2) 模拟松开一个键&nbsp;<br>
        dwExtraInfo: Long,零。通常不用的一个值。api函数GetMessageExtraInfo可取得这个值。允许使用的值取决于特定的驱动程序。<br> 
        调用如:模拟单击空格键。<br>
        x&amp; = MapVirtualKeyA(VK_SPACE, 0)<br> 
        keybd_event VK_SPACE, x&amp;, 0, 0 '单击空格键。<br> 
        再如模拟Ctrl+V键:<br>
        x&amp; = MapVirtualKeyA(VK_CONTROL, 0)<br> 
        keybd_event VK_CONTROL, x&amp;, 0, 0 '按下Ctrl,它自动保持按下状态。<br> 
        keybd_event vbKeyV, 0, 0, 0 '单击V键,这里直接用VB常数,且扫描码也无,简便法。<br> 
        keybd_event VK_CONTROL, x&amp;, 2, 0 '抬起Ctrl键。<br> 
        再如抓取活动窗口(Alt+Print Screen键):<br> 
        keybd_event VK_MENU, 0, 0, 0<br> 
        keybd_event VK_SNAPSHOT, 0, 0, 0&nbsp;<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。&nbsp;<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。&nbsp;<br>
        Ctrl键:17。(也可左:162;右:163)Alt键:18。(也可左:164;右:165)<br>
        Windows键:左:91;右:92。&nbsp;<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>
        -----鼠 标 键-------&nbsp;<br>
        鼠标左键:值1。 鼠标右键:值2。&nbsp;<br>
        主要就是以上这些,这可是我自己用GetKeyboardState函数试出来的。</font>
        <p align="center">
        <br>
        &lt; <a href="040101.htm">上一页</a>--<a href="http://www.xxby.com" target="_blank">华生小屋</a>--<a href="040103.htm">下一页</a>     
        &gt;<br>
      </td>
    </tr>
  </table>
  </center>
</div>

</body>

</html>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?