[491]pywin32模拟鼠标键盘操作

2023-11-19

  • keybd_event(bVk, bScan, dwFlags, dwExtraInfo)

第一个参数:虚拟键码(键盘键码对照表见附录);

第二个参数:硬件扫描码,一般设置为0即可;

第三个参数:函数操作的一个标志位,如果值为KEYEVENTF_EXTENDEDKEY则该键被按下,也可设置为0即可,如果值为KEYEVENTF_KEYUP则该按键被释放;

第四个参数:定义与击键相关的附加的32位值,一般设置为0即可。

例子:

import win32api

import win32con
win32api.keybd_event(13,0,0,0)     # enter
win32api.keybd_event(13,0,win32con.KEYEVENTF_KEYUP,0)  #释放按键

键盘键码对照表:

按键 键码 按键 键码 按键 键码 按键 键码
A 65 6(数字键盘) 102 ; 59 : 58
B 66 7(数字键盘) 103 = 61 + 43
C 67 8(数字键盘) 104 , 44 60
D 68 9(数字键盘) 105 - 45 _ 95
E 69 * 106 . 46 62
F 70 ! 33 / 47 ? 63
G 71 Enter 13 ` 96 ~ 126
H 72 @ 64 [ 91 { 123
I 73 # 35 \ 92 | 124
J 74 $ 36 } 125 ] 93
K 75 F1 112 a 97 b 98
L 76 F2 113 c 99 d 100
M 77 F3 114 e 101 f 102
N 78 F4 115 g 103 h 104
O 79 F5 116 i 105 j 106
P 80 F6 117 k 107 l 108
Q 81 F7 118 m 109 n 110
R 82 F8 119 o 111 p 112
S 83 F9 120 q 113 r 114
T 84 F10 121 s 115 t 116
U 85 F11 122 u 117 v 118
V 86 F12 123 w 119 x 120
W 87 Backspace 8 y 121 z 122
X 88 Tab 9 0(数字键盘) 96 Up Arrow 38
Y 89 Clear 12 1(数字键盘) 97 Right Arrow 39
Z 90 Shift 16 2(数字键盘) 98 Down Arrow 40
0(小键盘) 48 Control 17 3(数字键盘) 99 Insert 45
1(小键盘) 49 Alt 18 4(数字键盘) 100 Delete 46
2(小键盘) 50 Cap Lock 20 5(数字键盘) 101 Num Lock 144
3(小键盘) 51 Esc 27 2(数字键盘) 98 Down Arrow 40
4(小键盘) 52 Spacebar 32 3(数字键盘) 99 Insert 45
5(小键盘) 53 Page Up 33 4(数字键盘) 100 Delete 46
6(小键盘) 54 Page Down 34 5(数字键盘) 101 Num Lock 144
7(小键盘) 55 End 35
8(小键盘) 56 Home 36
9(小键盘) 57 Left Arrow 37
# _*_ coding:UTF-8 _*_
import win32api
import win32con
import win32gui
from ctypes import *
import time
VK_CODE = {
  'backspace':0x08,
  'tab':0x09,
  'clear':0x0C,
  'enter':0x0D,
  'shift':0x10,
  'ctrl':0x11,
  'alt':0x12,
  'pause':0x13,
  'caps_lock':0x14,
  'esc':0x1B,
  'spacebar':0x20,
  'page_up':0x21,
  'page_down':0x22,
  'end':0x23,
  'home':0x24,
  'left_arrow':0x25,
  'up_arrow':0x26,
  'right_arrow':0x27,
  'down_arrow':0x28,
  'select':0x29,
  'print':0x2A,
  'execute':0x2B,
  'print_screen':0x2C,
  'ins':0x2D,
  'del':0x2E,
  'help':0x2F,
  '0':0x30,
  '1':0x31,
  '2':0x32,
  '3':0x33,
  '4':0x34,
  '5':0x35,
  '6':0x36,
  '7':0x37,
  '8':0x38,
  '9':0x39,
  'a':0x41,
  'b':0x42,
  'c':0x43,
  'd':0x44,
  'e':0x45,
  'f':0x46,
  'g':0x47,
  'h':0x48,
  'i':0x49,
  'j':0x4A,
  'k':0x4B,
  'l':0x4C,
  'm':0x4D,
  'n':0x4E,
  'o':0x4F,
  'p':0x50,
  'q':0x51,
  'r':0x52,
  's':0x53,
  't':0x54,
  'u':0x55,
  'v':0x56,
  'w':0x57,
  'x':0x58,
  'y':0x59,
  'z':0x5A,
  'numpad_0':0x60,
  'numpad_1':0x61,
  'numpad_2':0x62,
  'numpad_3':0x63,
  'numpad_4':0x64,
  'numpad_5':0x65,
  'numpad_6':0x66,
  'numpad_7':0x67,
  'numpad_8':0x68,
  'numpad_9':0x69,
  'multiply_key':0x6A,
  'add_key':0x6B,
  'separator_key':0x6C,
  'subtract_key':0x6D,
  'decimal_key':0x6E,
  'divide_key':0x6F,
  'F1':0x70,
  'F2':0x71,
  'F3':0x72,
  'F4':0x73,
  'F5':0x74,
  'F6':0x75,
  'F7':0x76,
  'F8':0x77,
  'F9':0x78,
  'F10':0x79,
  'F11':0x7A,
  'F12':0x7B,
  'F13':0x7C,
  'F14':0x7D,
  'F15':0x7E,
  'F16':0x7F,
  'F17':0x80,
  'F18':0x81,
  'F19':0x82,
  'F20':0x83,
  'F21':0x84,
  'F22':0x85,
  'F23':0x86,
  'F24':0x87,
  'num_lock':0x90,
  'scroll_lock':0x91,
  'left_shift':0xA0,
  'right_shift ':0xA1,
  'left_control':0xA2,
  'right_control':0xA3,
  'left_menu':0xA4,
  'right_menu':0xA5,
  'browser_back':0xA6,
  'browser_forward':0xA7,
  'browser_refresh':0xA8,
  'browser_stop':0xA9,
  'browser_search':0xAA,
  'browser_favorites':0xAB,
  'browser_start_and_home':0xAC,
  'volume_mute':0xAD,
  'volume_Down':0xAE,
  'volume_up':0xAF,
  'next_track':0xB0,
  'previous_track':0xB1,
  'stop_media':0xB2,
  'play/pause_media':0xB3,
  'start_mail':0xB4,
  'select_media':0xB5,
  'start_application_1':0xB6,
  'start_application_2':0xB7,
  'attn_key':0xF6,
  'crsel_key':0xF7,
  'exsel_key':0xF8,
  'play_key':0xFA,
  'zoom_key':0xFB,
  'clear_key':0xFE,
  '+':0xBB,
  ',':0xBC,
  '-':0xBD,
  '.':0xBE,
  '/':0xBF,
  ';':0xBA,
  '[':0xDB,
  '\\':0xDC,
  ']':0xDD,
  "'":0xDE,
  '`':0xC0}
class POINT(Structure):
  _fields_ = [("x", c_ulong),("y", c_ulong)]
def get_mouse_point():
  po = POINT()
  windll.user32.GetCursorPos(byref(po))
  return int(po.x), int(po.y)
def mouse_click(x=None,y=None):
  if not x is None and not y is None:
    mouse_move(x,y)
    time.sleep(0.05)
  win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
  win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
def mouse_dclick(x=None,y=None):
  if not x is None and not y is None:
    mouse_move(x,y)
    time.sleep(0.05)
  win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
  win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
  win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
  win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
def mouse_move(x,y):
  windll.user32.SetCursorPos(x, y)
def key_input(str=''):
  for c in str:
    win32api.keybd_event(VK_CODE[c],0,0,0)
    win32api.keybd_event(VK_CODE[c],0,win32con.KEYEVENTF_KEYUP,0)
    time.sleep(0.01)
if __name__ == "__main__":
  mouse_click(1024,470)
  str = 'hello'
  key_input(str)

学习文档:http://timgolden.me.uk/pywin32-docs/win32api.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[491]pywin32模拟鼠标键盘操作 的相关文章

  • 穷举法解决鸡兔同笼问题 Python实现

    今天学习王晓华老师课程中的穷举法 在此简单用穷举法求解鸡兔同笼问题 import pandas as pd import numpy as np head 50 foot 120 def chick rabbit head foot rab
  • python 赋值/浅拷贝/深拷贝的区别

    在了解赋值 浅拷贝 深拷贝之前 需要预热一下python对象知识点 一 变量名字和对象 a 123 b 1 2 3 代码中 a和b是变量名称 123和 1 2 3 是对象 对象包括值和类型 python中 一切皆对象 对象占内存 内存中存放
  • 5、DML语句(数据操纵语言-增删改查)

    文章目录 一 DML语句介绍 二 insert 增加 插入数据 1 基本语法 2 示例 三 delete 删除表中的某行或者某些行数据 1 基本语法 2 示例 四 update 更新 修改 1 基本语法 2 示例 五 select 查询 1
  • 软件和建筑的结构

    一般都倾向于将软件比作建筑 因为建筑的架构和软件框架类似 好的建筑需要好的框架 但是大家忽略了另外一个情况 一个建筑要能居住 不但要好的建 筑风格和框架 更需要有好的家居和内部装修 建筑居住的舒适度很大程度上由内部装修细节决定的 装修时家居
  • 程序员,职场上请远离这种人!

    对有些职场人来讲 甩锅就是一种生存手段 01 从大学打篮球说起 上大学的时候喜欢打篮球 然后我又特别喜欢抢篮板 经常是跳起来的时候没事 落下来的时候偶尔会踩到别人的脚上 于是左脚经常性崴脚 这是背景 我们班上有一个同学也喜欢打篮球 我俩水平
  • 多媒体透明屏,在户外广告领域中,有哪些应用展示?

    多媒体透明屏是一种新型的显示技术 它能够将图像和视频直接投射到透明的屏幕上 使得观众可以同时看到屏幕后面的实物 这种技术在广告 展览 商场等场合有着广泛的应用前景 多媒体透明屏的原理是利用透明显示技术 将图像和视频通过光学投射技术投射到透明
  • 【C语言初学】作业:计算在贷款第一个月、第二个月、第三个月后需要还款金额

    贷款金额 20000 00元 年贷款利率 6 0 每个月还款金额 386 66 第一个月剩余的需还款金额 19713 34元 第二个月剩余的需还款金额 19425 25元 第三个月剩余的需还款金额 19135 71元 提示 每个月剩余的贷款
  • 深入浅出 sideEffects

    前言 最近在给团队对 webpack 中的 sideEffects 字段用途进行微分享 于是乎 我最后就整理成一篇文章 希望帮助更多的人理解 sideEffects 的作用 sideEffects 是什么呢 我用一句话来概括就是 让 web
  • redis 安装配置

    原文链接 https www cpweb top 1266 一 介绍 Redis 是一个开源的 基于内存的数据结构存储系统 它可以用作数据库 缓存和消息中间件 它是一个键值 Key Value 存储数据库 为非关系型数据库 它支持多种类型的
  • 在el-table的功能,并且在单元格里面加入输入框

    在我们的前端拿到后端返回的数据的时候 需要在el table的功能 并且在单元格里面加入输入框 为了让输入框的输入时候不会影响到其他的输入框 可以使用 input来获取输入框内容的值
  • python 多个logger对象使用,输出到多个文件

    就不介绍logger基础配置了 如何创建多个logger对象 输出到多个文件 import logging from datetime import datetime def get logger name logger logging g
  • 解决BookxNotePro在linux下无法启动或GLIBC_2.29‘ not found的问题

    问题描述如题 命令行启动出现如下报错 usr local BookxNotePro BookxNotePro usr local BookxNotePro BookxNotePro lib x86 64 linux gnu libm so
  • JS声明二维数组常见办法

    JS声明二维数组常见办法 目录 文章目录 前言 new Array 和 fill fill 灵活插入 for 笨办法 Array from 前言 目前论坛常见的办法代码质量奇差 因此针对这个问题进行整理 new Array和fill con

随机推荐

  • 使用机器学习算法打造一个简单的“微博指数”

    欢迎大家前往腾讯云技术社区 获取更多腾讯海量技术实践干货哦 作者 林浩威 前言 随着人工智能的大热 越来越多的小伙伴们开始投身到机器学习的大潮中 作为其中的一员 我对此也是极有兴趣的 当然我更感兴趣的 是怎么利用这些有趣的算法 来实现脑海里
  • element样式无法修改

    在使用el form组件时 组件中的字体是黑色的 需要显示白色字体就加了个color fff 结果发现修改并没有什么效果 还是原来的黑色 打开F12发现属于 el form item label选择器下面的 我就在css下面修改了该选择器
  • 端口占用查询

    我们做WEB开发 本地调试时 有时出现 Caused by java net BindException Address already in use bind at sun nio ch Net bind0 Native Method a
  • 机械孔与盲孔

    过孔是什么 过孔 Via 电路板上的孔 连接不同层之间的线路 把电路板从平面结构变成立体结构 单层线路想不交叉太难了 双层或更多层线路 必须通过过孔来连接 通过孔壁上的铜 连通上下层的电路铜线 单层PCB 有些时候无法布线 必须通过过孔换层
  • Chisel手册之Types

    本文是Chisel手册第二篇Types Types 表示硬件设计的Chisel图包含原始节点和类型节点 Chisel类型系统与底层Scala类型系统分开维护 因此类型节点散布在原始节点之间 以允许Chisel检查并响应Chisel类型 Ch
  • 微信小程序 实现底部导航栏tabbar

    参考链接 1 微信小程序底部导航Tabbar https www cnblogs com huangjialin p 6278429 html 2 小程序自定义tabbar实现中间图标突出效果 附带wx hideTabBar不生效的bug解
  • Spring Boot 启动报错解决:No active profile set, falling back to default profiles: default

    在SpringBoot启动时 控制台打印出来的信息有这么一条 No active profile set falling back to default profiles default 如下图 这句话的意思是 没有指定项目的配置文件 使用
  • Skyfire: 一种用于Fuzzing的数据驱动的种子生成工具

    Skyfire Data Driven Seed Generation for Fuzzing 作者 杨鑫 清华大学 论文发表于 IEEE S P 2017 原文作者 Junjie Wang Bihuan Chen Lei Wei and
  • C# 使用SignalR实现消息通知

    背景 Web端需要能实时接收到消息推送 当客户有新消息来时 在客户端的右下角进行弹框提醒 什么是signalR Asp net SignalR是微软为实现实时通信的一个类库 一般情况下 signalR会使用JavaScript的长轮询 lo
  • 【Android -- UI 开发】WebView 的基本使用

    一 简介 WebView 在 Android 平台上是一个特殊的 View 基于 webkit 引擎 展现 web 页面的控件 这个类可以被用来在你的 app 中仅仅显示一张在线的网页 还可以用来开发浏览器 WebView 内部实现是采用渲
  • GitHub pages 如何搭建一个个人博客

    搭建一个 GitHub Pages 个人博客的步骤如下 在 GitHub 上创建一个名为 username github io 的仓库 其中 username 是你的 GitHub 用户名 在仓库里创建一个 index html 文件 用于
  • 刚学JavaWeb如何创建一个简单的Servlet项目(保姆级!!!)

    idea如何创建一个简单的Servlet项目 一 准备步骤 1 创建一个工程 2 添加Web application支持 3 部署Tomcat服务器 4 向服务器中添加项目 5 向项目中导入所需要的JAR包 二 编写一个简单的Servlet
  • java动态加载jar包,并运行其中的类和方法

    flink 相关 https www toutiao com article 6883793897495986691 动态加载jar包 在实际开发中经常会需要用到 尤其涉及平台和业务的关系的时候 业务逻辑部分可以独立出去交给业务方管理 业务
  • Bugku题目Reverse逆向部分wp(持续更新)

    目录 入门逆向 Easy Re 游戏过关 sign in Easy vb Next 入门逆向 题目链接 丢入DIE PEID看过 没有壳 32位 直接IDA 汇编代码直接看到 flag Re 1s S0 C0OL Easy Re 题目链接
  • 查看淘宝镜像

    win R 打开输入cmd打开 查看node是否安装输入命令 node v 安装淘宝镜像输入命令 npm install g cnpm registry https registry npm taobao org 查看淘宝镜像输入命令 np
  • 场景题

    场景题 1 场景题汇总 1 情景题 如果一个外卖配送单子要发布 现在有200个骑手都想要接这一单 如何保证只有一个骑手接到单子 2 场景题 美团首页每天会从10000个商家里面推荐50个商家置顶 每个商家有一个权值 你如何来推荐 第二天怎么
  • 用Calendar.getInstance()后,set月份被加一问题

    一 问题描述 今天查询一个bug发现了这个问题 使用Calendar 中的before 和after方法比较日期是否在范围内 实际与代码不符 我就去查明原因 首先说下这两个方法吧 日期1 before 日期2 第一个日期在第二个日期之前的意
  • 将 Google Kubernetes Engine (GKE) 上稳定扩散的启动时间缩短 4 倍

    Cloud Ace 是 Google Cloud 全球战略合作伙伴 在亚太地区 欧洲 南北美洲和非洲拥有二十多个办公室 Cloud Ace 在谷歌专业领域认证及专业知识目前排名全球第一位 并连续多次获得 Google Cloud 各类奖项
  • Flutter 安装 填坑记录

    Flutter 安装过程中遇到的问题 安装参考文档 https flutterchina club Add the flutter tool to your path 不知如何在mac中添加环境变量的解决方法参照https jingyan
  • [491]pywin32模拟鼠标键盘操作

    keybd event bVk bScan dwFlags dwExtraInfo 第一个参数 虚拟键码 键盘键码对照表见附录 第二个参数 硬件扫描码 一般设置为0即可 第三个参数 函数操作的一个标志位 如果值为KEYEVENTF EXTE