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实现简单socket通信的方法
Apr 19 Python
一个基于flask的web应用诞生 flask和mysql相连(4)
Apr 11 Python
11月编程语言排行榜 Python逆袭C#上升到第4
Nov 15 Python
python使用Flask操作mysql实现登录功能
May 14 Python
在PyCharm环境中使用Jupyter Notebook的两种方法总结
May 24 Python
mvc框架打造笔记之wsgi协议的优缺点以及接口实现
Aug 01 Python
Python产生Gnuplot绘图数据的方法
Nov 09 Python
Python使用sqlalchemy模块连接数据库操作示例
Mar 13 Python
python函数与方法的区别总结
Jun 23 Python
Pytorch 计算误判率,计算准确率,计算召回率的例子
Jan 18 Python
python中用Scrapy实现定时爬虫的实例讲解
Jan 18 Python
python cv2图像质量压缩的算法示例
Jun 04 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中SQL注入攻击与XSS攻击
2012/06/10 PHP
php中将数组转成字符串并保存到数据库中的函数代码
2013/09/29 PHP
PHP调用VC编写的COM组件实例
2014/03/29 PHP
[原创]php使用curl判断网页404(不存在)的方法
2016/06/23 PHP
laravel框架的安装与路由实例分析
2019/10/11 PHP
表单项的name命名为submit、reset引起的问题
2007/12/22 Javascript
editable.js 基于jquery的表格的编辑插件
2011/10/24 Javascript
javascript动态判断html元素并执行不同的操作
2014/06/16 Javascript
ff chrome和ie下全局动态定位的异同及全局高度的取法
2014/06/30 Javascript
兼容主流浏览器的JS复制内容到剪贴板
2014/12/12 Javascript
jQuery计算文本框字数及限制文本框字数的方法
2016/03/01 Javascript
浅析在javascript中创建对象的各种模式
2016/05/06 Javascript
基于input框覆盖掉数字英文的实例讲解
2017/07/21 Javascript
利用HBuilder打包前端开发webapp为apk的方法
2017/11/13 Javascript
Vue header组件开发详解
2018/01/26 Javascript
微信小程序实现定位及到指定位置导航的示例代码
2019/08/20 Javascript
微信小程序 flexbox layout快速实现基本布局的解决方案
2020/03/24 Javascript
JavaScript实现音乐导航效果
2020/11/19 Javascript
[02:06]DOTA2肉山黑名单魔法终结者 敌法师中文配音鉴赏
2013/06/17 DOTA
[44:10]2018DOTA2亚洲邀请赛 4.5 淘汰赛 EG vs VP 第一场
2018/04/06 DOTA
列举Python中吸引人的一些特性
2015/04/09 Python
Python实现1-9数组形成的结果为100的所有运算式的示例
2017/11/03 Python
使用python验证代理ip是否可用的实现方法
2018/07/25 Python
python 调用pyautogui 实时获取鼠标的位置、移动鼠标的方法
2019/08/27 Python
PyTorch学习:动态图和静态图的例子
2020/01/06 Python
Python web框架(django,flask)实现mysql数据库读写分离的示例
2020/11/18 Python
python爬虫利用代理池更换IP的方法步骤
2021/02/21 Python
各大浏览器 CSS3 和 HTML5 兼容速查表 图文
2010/04/01 HTML / CSS
Oasis服装官网:时尚女装在线
2020/07/09 全球购物
星空联盟C# .net笔试题
2014/12/05 面试题
《落花生》教学反思
2014/02/25 职场文书
应届生自荐书
2014/06/23 职场文书
三问三解心得体会
2014/09/05 职场文书
Window server中安装Redis的超详细教程
2021/11/17 Redis
css实现左上角飘带效果的完整代码
2022/03/18 HTML / CSS
Spring this调用当前类方法无法拦截的示例代码
2022/03/20 Java/Android