文档章节

网友xiangyunangua写的PyNano控制键盘精彩例程

shaoziyang
 shaoziyang
发布于 2016/11/27 10:59
字数 758
阅读 19
收藏 0

网友xiangyunangua写的PyNano控制键盘例程,非常精彩:

 

在第一弹里尝试了用PyNano作鼠标。
既然PyNano可以模拟鼠标,当然也可以模拟为键盘了。
利用键盘信号,我们可以做很多事情(嘿嘿),这里就简单地实现为:
    1. win+r调出windows启动器
    2. 输入notepad并回车,打开记事本软件
    3. 自动填写python之禅
编码完成后,重新插入开发板,不用做任何事情,就可以看着电脑上冒出python之禅了(这里偷懒只弄了一部分)(输入法要改成默认是英文,或者在每行再加个回车符)
效果图如下:
 

#-----------------------------------boot.py-----------------------------------------
import machine
import pyb
pyb.usb_mode('VCP+HID',hid=pyb.hid_keyboard) # 注意这里添加了第二个参数,就是用作键盘

#-----------------------------------main.py-----------------------------------------
 

详细注释如下:关于具体的细节,看注释里提到的源码

import pyb
hid=pyb.USB_HID() # 获取hid对象

#KEY_A=0x04;KEY_B=0x05;KEY_C=0x06;KEY_D=0x07;KEY_E=0x08;KEY_F=0x09;KEY_G=0x0A;KEY_H=0x0B;KEY_I=0x0C;
#KEY_J=0x0D;KEY_K=0x0E;KEY_L=0x0F;KEY_M=0x10;KEY_N=0x11;KEY_O=0x12;KEY_P=0x13;KEY_Q=0x14;KEY_R=0x15;
#KEY_S=0x16;KEY_T=0x17;KEY_U=0x18;KEY_V=0x19;KEY_W=0x1A;KEY_X=0x1B;KEY_Y=0x1C;KEY_Z=0x1D;KEY_ENTER=0x28;
# 采用字典形式
ch = {
    'a' : 0x04, 'b' : 0x05, 'c' : 0x06, 'd' : 0x07,
    'e' : 0x08, 'f' : 0x09, 'g' : 0x0a, 'h' : 0x0b,
    'i' : 0x0c, 'j' : 0x0d, 'k' : 0x0e, 'l' : 0x0f,
    'm' : 0x10, 'n' : 0x11, 'o' : 0x12, 'p' : 0x13,
    'q' : 0x14, 'r' : 0x15, 's' : 0x16, 't' : 0x17,
    'u' : 0x18, 'v' : 0x19, 'w' : 0x1a, 'x' : 0x1b,
    'y' : 0x1c, 'z' : 0x1d, '\n': 0x28, ' ' : 0x2C,
}
# 普通键值从 usbh_hid_keybd.h 源码中获取

KBD_RIGHT_CTRL  = 0x10
KBD_RIGHT_SHIFT = 0x20
KBD_RIGHT_ALT   = 0x40
KBD_RIGHT_GUI   = 0x80 # win键
# 特殊键的值从 usbh_hid_keybd.c 源码中获取,
# 直接在micropython源码根目录搜文件名即可

def release_key():
    # 松开按键信号
    hid.send(bytearray(8)) # 每次键盘信息传递为8个字节
    pyb.delay(10)
    
def press_key(key, specialkey):
    # 按下按键信号,接收普通键值列表和特殊键值
    buf = bytearray(8) # 每次键盘信息传递为8个字节
    buf[0] = specialkey # 对于像ctrl和win这种特殊键,要放在第一个字节上
    if len(key) > 6: # 一次最多六个键一起按
        raise KeyError # 随便用了个异常抛出
    for i,k in enumerate(key): # 依次填充按键到buf
        buf[2+i] = k # 后6个字节用来填充普通键值
    hid.send(buf)
    pyb.delay(10) # 延时
    
def send_key(key, specialkey = 0x00, delay = 500): # specialkey = 0x00表示不按下任何特殊键
    # 逻辑上合并上两个函数
    key = [ch[i] for i in key] # 将字符串转换为对应键值列表
    i = 0 # i作索引,初始化为0
    while i < len(key): # 6个一组发送键盘信息
        press_key(key[i:i+6], specialkey) # python冒号后面索引越界没有关系
        release_key() # 每次按完键后要松开
        i += 6
    pyb.delay(delay)

pyb.delay(1000) # 等待启动完成,有的电脑插上usb后反应比较慢,延迟可适当增多
send_key('r', specialkey = KBD_RIGHT_GUI) # 发送 win + r
send_key('notepad\n\n', delay = 0) # 调用记事本
send_key('''the zen of python

beautiful is better than ugly
explicit is better than implicit
simple is better than complex
complex is better than complicated
flat is better than nested
sparse is better than dense
readability counts

by wonderful micropython
''')

 

 

本文转载自:http://www.micropython.org.cn/forum.php?mod=viewthread&tid=391&page=1#pid937

共有 人打赏支持
shaoziyang
粉丝 11
博文 75
码字总数 25881
作品 0
武汉
程序员
vc+如何实现模拟键盘输入,自动输入文字(创世纪篇)

键盘对于每个操作电脑的人员来说是最熟悉不过的了。键盘上的按键可分为两类: 按下后会在电脑的输入窗口上出现对应字符的按键,如字母键和数字键等,我们称之为字符键;按下后虽然看不到字符但...

crossmix
2015/07/30
0
0
在VC中实现模拟键盘,输入内容并显示在ListBox中。

网上找的,还没试过,希望对楼主有帮助 模拟键盘按键 自动输入文字 键盘对于每个操作电脑的人员来说是最熟悉不过的了。键盘上的按键可分为两类: 按下后会在电脑的输入窗口上出现对应字符的按...

云栖希望。
2017/12/04
0
0
基于STM32(ARM Cortex M3)的Arduino——Spurce (支持Eclip...

很多电子专业的学生,或者刚刚入行的电子工程师都有一个困惑。电子行业范畴这么大,这么多细分行业,不知该如何抉择。诸如硬件、软件、Layout 、单片机、 ARM ……这么多名词让人眼花缭乱,职...

soliddigi
2011/09/18
0
0
Android中使EditText失去焦点,edittext禁止弹出键盘

在我们的应用中,有时候一进入一个页面, EditText默认就会自动获取焦点。弹出输入法框,用户体验很不好, 那么如何取消这个默认行为呢? ps:这篇文字是一年前写的,现在有网友再问这个问题,...

simpower
2014/09/24
0
0
百度网盘代码,屌炸天,之前我就想做出这种东西,现在看到百度也这样写,非常惊喜,总会有人理解我的。

百度也这么务实,真是不知是哪位大牛这么写的,也不知道是不是早就有这种技术了,反正有种相见恨晚的感觉,因为我一直也在研究这样编程,只不过我是在任何文本中嵌入,而百度是在网页中这样用...

快速开发师
2014/10/15
21.8K
44

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Ubuntu18.04 显卡GF-940MX安装NVIDIA-390.77

解决办法: 下面就给大家一个正确的姿势在Ubuntu上安装Nvidia驱动: (a)首先去N卡官网下载自己显卡对应的驱动:www.geforce.cn/drivers (b)下载后好放在英文路径的目录下,怎么简单怎么来...

AI_SKI
今天
0
0
深夜胡思乱想

魔兽世界 最近魔兽世界出了新版本, 周末两天升到了满级,比之前的版本体验好很多,做任务不用抢怪了,不用组队打怪也是共享拾取的。技能简化了很多,哪个亮按哪个。 运维 服务器 产品 之间的...

Firxiao
今天
0
0
MySQL 8 在 Windows 下安装及使用

MySQL 8 带来了全新的体验,比如支持 NoSQL、JSON 等,拥有比 MySQL 5.7 两倍以上的性能提升。本文讲解如何在 Windows 下安装 MySQL 8,以及基本的 MySQL 用法。 下载 下载地址 https://dev....

waylau
今天
0
0
微信第三方平台 access_token is invalid or not latest

微信第三方开发平台code换session_key说的特别容易,但是我一使用就带来无穷无尽的烦恼,搞了一整天也无济于事. 现在记录一下解决问题的过程,方便后来人参考. 我遇到的这个问题搜索了整个网络也...

自由的开源
今天
2
0
openJDK之sun.misc.Unsafe类CAS底层实现

注:这篇文章参考了https://www.cnblogs.com/snowater/p/8303698.html 1.sun.misc.Unsafe中CAS方法 在sun.misc.Unsafe中CAS方法如下: compareAndSwapObject(java.lang.Object arg0, long a......

汉斯-冯-拉特
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部