文档章节

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

shaoziyang
 shaoziyang
发布于 2016/11/27 10:59
字数 758
阅读 17
收藏 0
点赞 0
评论 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
''')

 

 

© 著作权归作者所有

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

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

crossmix ⋅ 2015/07/30 ⋅ 0

在VC中实现模拟键盘,输入内容并显示在ListBox中。

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

云栖希望。 ⋅ 2017/12/04 ⋅ 0

Android中使EditText失去焦点,edittext禁止弹出键盘

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

伽罗kapple ⋅ 2014/09/24 ⋅ 0

input textarea监听鼠标粘贴

发现一个问题,在input/textarea中如果是鼠标粘贴内容进去,发现判断不了value的改变,html代码如下: <!doctype html><html><head><meta charset="utf-8"><title>判断粘贴</title><script t......

subying ⋅ 2014/01/10 ⋅ 0

PYB Nano驱动OLED显示

这是论坛网友hbzjt2012的作品: http://www.micropython.org.cn/forum.php?mod=viewthread&tid=408&extra= 这次使用PYB Nano驱动0.96寸OLED显示屏,此次参考了国外网友的例程,OLED可以使用S...

shaoziyang ⋅ 2016/12/05 ⋅ 0

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

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

快速开发师 ⋅ 2014/10/15 ⋅ 44

网友脑洞大开 用 Emoji 开发“俏皮”编程语言

Emoji表情真是无所不能了。你知道它能当密码,但你想过它能用来编程吗?国外论坛4Chan的一位网友就把Emoji变成了编程语言。这门语言名为FourMan,它当然有一个表情名称,但抱歉,我正在用的编...

oschina ⋅ 2015/06/26 ⋅ 20

iPhone OS 3.0 当地时间周三发布

许多令iPhone用户们翘首期盼的功能终于要出现了,本周三,苹果将向所有用户公布iPhone OS 3.0,iPhone用户可直接升级,iTouch用户升级费用9.95美元. 本次更新添加了MMS支持,声音录制,视频和电视节...

红薯 ⋅ 2009/06/17 ⋅ 1

Python网络编程之协程

What is the association? 与子例程一样,协程也是一种程序组件。 相对子例程而言,协程更为一般和灵活,但在实践中使用没有子例程那样广泛。 协程源自Simula和Modula-2语言,但也有其他语言...

一盏烛光 ⋅ 2017/05/22 ⋅ 0

​黑科技:程序猿如何打造属于自己的分体键盘

前言 之前一直想买个机械键盘,听说机械键盘敲代码和玩游戏都特别爽,也是装B神器。同时也觉得普通的键盘打字打久了手腕会有点酸酸的,因为敲键盘时都是要弯着手腕的,一点也不符合人体工程...

腾讯Bugly ⋅ 2016/04/29 ⋅ 40

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JVM堆的理解

在JVM中,我们经常提到的就是堆了,堆确实很重要,其实,除了堆之外,还有几个重要的模块,看下图: 大 多数情况下,我们并不需要关心JVM的底层,但是如果了解它的话,对于我们系统调优是非常...

不羁之后 ⋅ 昨天 ⋅ 0

推荐:并发情况下:Java HashMap 形成死循环的原因

在淘宝内网里看到同事发了贴说了一个CPU被100%的线上故障,并且这个事发生了很多次,原因是在Java语言在并发情况下使用HashMap造成Race Condition,从而导致死循环。这个事情我4、5年前也经历...

码代码的小司机 ⋅ 昨天 ⋅ 1

聊聊spring cloud gateway的RetryGatewayFilter

序 本文主要研究一下spring cloud gateway的RetryGatewayFilter GatewayAutoConfiguration spring-cloud-gateway-core-2.0.0.RC2-sources.jar!/org/springframework/cloud/gateway/config/G......

go4it ⋅ 昨天 ⋅ 0

创建新用户和授予MySQL中的权限教程

导读 MySQL是一个开源数据库管理软件,可帮助用户存储,组织和以后检索数据。 它有多种选项来授予特定用户在表和数据库中的细微的权限 - 本教程将简要介绍一些选项。 如何创建新用户 在MySQL...

问题终结者 ⋅ 昨天 ⋅ 0

android -------- 颜色的半透明效果配置

最近有朋友问我 Android 背景颜色的半透明效果配置,我网上看资料,总结了一下, 开发中也是常常遇到的,所以来写篇博客 常用的颜色值格式有: RGB ARGB RRGGBB AARRGGBB 这4种 透明度 透明度...

切切歆语 ⋅ 昨天 ⋅ 0

CentOS开机启动subversion

建立自启动脚本: vim /etc/init.d/subversion 输入如下内容: #!/bin/bash## subversion startup script for the server## chkconfig: 2345 90 10# description: start the subve......

随风而飘 ⋅ 昨天 ⋅ 0

Nginx + uwsgi @ubuntu

uwsgi 安装 sudo apt-get install python3-pip # 注意 ubuntu python3默认没有安装pippython3 -m pip install uwsgi 代码(test.py) def application(env, start_response): start_res......

袁祾 ⋅ 昨天 ⋅ 0

版本控制工具

CSV , SVN , GIT ,VSS

颖伙虫 ⋅ 昨天 ⋅ 0

【2018.06.19学习笔记】【linux高级知识 13.1-13.3】

13.1 设置更改root密码 13.2 连接mysql 13.3 mysql常用命令

lgsxp ⋅ 昨天 ⋅ 0

LVM

LVM: 硬盘划分分区成物理卷->物理卷组成卷组->卷组划分逻辑分区。 1.磁盘分区: fdisk /dev/sdb 划分几个主分区 输入t更改每个分区类型为8e(LVM) 使用partprobe生成分区的文件:如/dev/sd...

ZHENG-JY ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部