文档章节

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

shaoziyang
 shaoziyang
发布于 2016/11/27 10:59
字数 758
阅读 121
收藏 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
粉丝 16
博文 77
码字总数 26345
作品 0
武汉
程序员
私信 提问
加载中

评论(0)

AVRmega16 LED 例程

AVRmega16 LED 例程 例程1:点亮一个灯 #include<mega16.h> include<delay.h> void main(void){DDRA=0xff;while(1){PORTA=0x01;};} 例程2:运用8个LED显示出流水灯的效果(运用for语句) #i......

osc_mersr09e
2018/09/09
2
0
玩转X-CTR100 l USB功能-HOST鼠标键盘

更多塔克创新资讯欢迎登陆【塔克社区 www.xtark.cn 】【塔克博客 www.cnblogs.com/xtark/ 】 X-CTR100控制器具有MicroUSB接口,支持SLAVE和HOST两种模式,本例程介绍USB HOST鼠标键盘功能。 ...

osc_y499kuvp
2018/07/02
4
0
Windows 内核 IDT(中断描述符表)的学习总结

      0x01 概述   将中断告知系统CPU ,中断的典型示例是硬件中断,例如鼠标按钮或键盘按键按下,网络数据包活动以及硬件生成的异常,例如除零或断点-分别中断号0x00和0x03。   一旦...

嘶吼RoarTalk
01/05
0
0
JavaSE学习(三):按位运算—控制流程(顺序、分支、循环)

第一节 按位运算 1.1按位运算符& | 1.1.1按位运算符可作算术运算 做算术运算先将十进制转为二进制数,再按位计算,按位与全部为1,才为1,只要有0则为0;按位或只要有1则为1,全部为0才为0。...

osc_3om50641
2018/08/19
2
0
vc+如何实现模拟键盘输入,自动输入文字(创世纪篇)

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

crossmix
2015/07/30
3.1K
0

没有更多内容

加载失败,请刷新页面

加载更多

文献速递20200524

一 文献题目:Characterizing the Causal Pathway for Genetic Variants Associated with Neurological Phenotypes Using Human Brain-Derived Proteome Data 不想看英文题目:使用人脑蛋白质......

osc_mbhfa1vl
4分钟前
0
0
【Java入门】JDK安装和环境变量配置(Win7版)

系统环境:Windows7 x64 安装JDK和JRE版本:1.8.0_191 1、下载JDK安装包 Oracle官网下载网址:https://www.oracle.com/technetwork/java/javase/downloads/index.html 选择需要下载的JDK版本...

osc_s7aj86hu
6分钟前
7
0
Android Q 指纹解锁流程

Android Q 指纹解锁流程 // Authentation Finger Schedule: (close Screen, Authentation with finger(Success))        // PhoneWindowManager        mKeyguardDelegate.onStar......

osc_0qnrwmy3
7分钟前
9
0
List的扩容机制,你真的明白吗?

一:背景 1. 讲故事 在前一篇大内存排查中,我们看到了Dictionary正在做扩容操作,当时这个字典的count=251w,你把字典玩的66飞起,其实都是底层为你负重前行,比如其中的扩容机制,当你遇到...

osc_34b9n45c
9分钟前
14
0
2020.04.12软件更新公告

原创软件区升级ComicsViewer、DjVuToy、Pdg2Pic、PdgRenamer、PdgThumbViewer

osc_6tgtqi6v
9分钟前
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部