python模拟键盘输入 切换键盘布局过程解析


Posted in Python onAugust 15, 2019

PostMessage()

def keyHwnd(hwndEx, char):
  """
  向指定控件输入值
  :param hwndEx: 控件句柄
  :param char: 字符串
  :return: True or Flase
  """
  try:
    for _ in char:
      print('key:%s  ascii:%d' % (_, ord(_)))
      win32api.PostMessage(hwndEx, win32con.WM_CHAR, ord(_), 0)
      time.sleep(random.uniform(0,0.2))
  except Exception as e:
    print(e)
    return False
  return True  
hwnd = win32gui.FindWindow(None,'a.txt - 记事本')
print(hwnd)

win32gui.SetForegroundWindow(hwnd)
hwndex = win32gui.FindWindowEx(hwnd,None,'Edit', None)
keyHwnd(hwndex,'撒地方SDFkof;ldsojfdfdsjfd;slkjfdlksjfkldsjflkdsjlkfjkldsljkfjdssj')

切换键盘布局

该功能封装成了一个装饰器,函数执行完恢复了原键盘布局

import win32con
from win32con import WM_INPUTLANGCHANGEREQUEST
import win32gui
import win32api
def setKeyboardLayout_en(inner):
  def wrapper(*args, **kwargs):
    if win32api.LoadKeyboardLayout('0x0409', win32con.KLF_ACTIVATE) == None:
      return Exception('加载键盘失败')
    # 语言代码
    # https://msdn.microsoft.com/en-us/library/cc233982.aspx
    LID = {0x0804: "Chinese (Simplified) (People's Republic of China)",
        0x0409: 'English (United States)'}

    # 获取前景窗口句柄
    hwnd = win32gui.GetForegroundWindow()

    # 获取前景窗口标题
    title = win32gui.GetWindowText(hwnd)
    # 获取键盘布局列表
    im_list = win32api.GetKeyboardLayoutList()
    im_list = list(map(hex, im_list))
    print(im_list)
    oldKey = hex(win32api.GetKeyboardLayout())

    # 设置键盘布局为英文
    result = win32api.SendMessage(
      hwnd,
      WM_INPUTLANGCHANGEREQUEST,
      0,
      0x4090409)
    if result == 0:
      print('设置英文键盘成功!')
    inner(*args,*kwargs)
    result = win32api.SendMessage(
      hwnd,
      WM_INPUTLANGCHANGEREQUEST,
      0,
      oldKey)
    if result == 0:
      print('还原键盘成功!')
  return wrapper

ascii标准码

python模拟键盘输入 切换键盘布局过程解析

keybd_event()

win32api.keybd_event(65, 0, 0, 0)
time.sleep(random.uniform(0, 0.5))
win32api.keybd_event(65, 0, win32con.KEYEVENTF_KEYUP, 0)

microsoft键盘码参考

python模拟键盘输入 切换键盘布局过程解析

python模拟键盘输入 切换键盘布局过程解析

这位兄弟写的关于模拟键盘非常全

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python在windows下实现备份程序实例
Jul 04 Python
跟老齐学Python之玩转字符串(2)更新篇
Sep 28 Python
Python实现统计英文单词个数及字符串分割代码
May 28 Python
使用Python对MySQL数据操作
Apr 06 Python
详解python基础之while循环及if判断
Aug 24 Python
python读写LMDB文件的方法
Jul 02 Python
python sklearn常用分类算法模型的调用
Oct 16 Python
浅谈Python3实现两个矩形的交并比(IoU)
Jan 18 Python
python中threading开启关闭线程操作
May 02 Python
Python中的特殊方法以及应用详解
Sep 20 Python
Python模拟登录和登录跳转的参考示例
Oct 30 Python
python xlsxwriter模块的使用
Dec 24 Python
django项目登录中使用图片验证码的实现方法
Aug 15 #Python
Python使用Beautiful Soup爬取豆瓣音乐排行榜过程解析
Aug 15 #Python
解析python的局部变量和全局变量
Aug 15 #Python
python实现的自动发送消息功能详解
Aug 15 #Python
python调用支付宝支付接口流程
Aug 15 #Python
Python使用字典实现的简单记事本功能示例
Aug 15 #Python
Flask框架学习笔记之模板操作实例详解
Aug 15 #Python
You might like
php 图像函数大举例(非原创)
2009/06/20 PHP
PHP 5.3.1 安装包 VC9 VC6不同版本的区别是什么
2010/07/04 PHP
php防止SQL注入详解及防范
2013/11/12 PHP
使用php实现从身份证中提取生日
2016/05/09 PHP
Yii框架弹出窗口组件CJuiDialog用法分析
2017/01/07 PHP
PHP利用pdo_odbc实现连接数据库示例【基于ThinkPHP5.1搭建的项目】
2019/05/13 PHP
PHP rsa加密解密算法原理解析
2020/12/09 PHP
DOM基础教程之使用DOM
2015/01/19 Javascript
jQuery基于cookie实现的购物车实例分析
2015/12/24 Javascript
移动端H5开发 Turn.js实现很棒的翻书效果
2016/06/20 Javascript
使用JS批量选中功能实现更改数据库中的status状态值(批量展示)
2016/11/22 Javascript
微信小程序实现点击文字页面跳转功能【附源码下载】
2017/12/12 Javascript
jquery获取transform里的值实现方法
2017/12/12 jQuery
Angular4 ElementRef的应用
2018/02/26 Javascript
微信小程序开发问题之wx.previewImage
2018/12/25 Javascript
vue实现固定位置显示功能
2019/05/30 Javascript
基于jquery ajax的多文件上传进度条过程解析
2019/09/11 jQuery
Vue表单控件数据绑定方法详解
2020/02/05 Javascript
three.js利用射线Raycaster进行碰撞检测
2020/03/12 Javascript
js实现直播点击飘心效果
2020/08/19 Javascript
Python使用Mechanize模块编写爬虫的要点解析
2016/03/31 Python
python抓取需要扫微信登陆页面
2019/04/29 Python
Python CSV文件模块的使用案例分析
2019/12/21 Python
python 中的命名空间,你真的了解吗?
2020/08/19 Python
大学生自荐书范文
2013/12/10 职场文书
初中女生自我鉴定
2013/12/19 职场文书
职业生涯规划书基本格式
2014/01/06 职场文书
公积金单位接收函
2014/01/11 职场文书
政法干警核心价值观心得体会
2014/09/11 职场文书
2015年人力资源部工作总结
2015/04/30 职场文书
2015年惩防体系建设工作总结
2015/05/22 职场文书
九年级化学教学反思
2016/02/22 职场文书
Python3 类型标注支持操作
2021/06/02 Python
基于Redis zSet实现滑动窗口对短信进行防刷限流的问题
2022/02/12 Redis
SpringBoot中获取profile的方法详解
2022/04/08 Java/Android
小喇叭开始广播了! 四十多年前珍贵老照片
2022/05/09 无线电