Python win32api.keybd_event模拟键盘输入
win32api.keybd_event
该函数原型: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) #释放按键
# 按下ctrl+s
win32api.keybd_event(0x11, 0, 0, 0)
win32api.keybd_event(0x53, 0, 0, 0)
win32api.keybd_event(0x53, 0, win32con.KEYEVENTF_KEYUP, 0)
win32api.keybd_event(0x11, 0, win32con.KEYEVENTF_KEYUP, 0)
time.sleep(1)
# 按下回车
win32api.keybd_event(0x0D, 0, 0, 0)
win32api.keybd_event(0x0D, 0, win32con.KEYEVENTF_KEYUP, 0)
time.sleep(1)
# 按下ctrl+W
win32api.keybd_event(0x11, 0, 0, 0)
win32api.keybd_event(0x57, 0, 0, 0)
win32api.keybd_event(0x57, 0, win32con.KEYEVENTF_KEYUP, 0)
win32api.keybd_event(0x11, 0, win32con.KEYEVENTF_KEYUP, 0)
# 按下ctrl+a
win32api.keybd_event(0x11, 0, 0, 0)
win32api.keybd_event(0x41, 0, 0, 0)
win32api.keybd_event(0x41, 0, win32con.KEYEVENTF_KEYUP, 0)
win32api.keybd_event(0x11, 0, win32con.KEYEVENTF_KEYUP, 0)
time.sleep(1)
# 按下ctrl+v
win32api.keybd_event(0x11, 0, 0, 0)
win32api.keybd_event(0x56, 0, 0, 0)
win32api.keybd_event(0x56, 0, win32con.KEYEVENTF_KEYUP, 0)
win32api.keybd_event(0x11, 0, win32con.KEYEVENTF_KEYUP, 0)
time.sleep(1)
更多可参考:http://timgolden.me.uk/pywin32-docs/PyWin32.html
键盘键码对照表:
|
按键 |
键码 |
按键 |
键码 |
按键 |
键码 |
按键 |
键码 |
|
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
from selenium import webdriver
import win32api
import win32con
import win32clipboard
from ctypes import *
import time# 浏览器打开百度网页
browser = webdriver.Chrome()
browser.maximize_window()
browser.get("https://www.baidu.com/")
time.sleep(2)# 获取页面title作为文件名
title = browser.title
# 设置路径为:当前项目的绝对路径+文件名
path = (os.path.dirname(os.path.realpath(__file__)) + "\\" + title + ".html")
# 将路径复制到剪切板
win32clipboard.OpenClipboard()
win32clipboard.EmptyClipboard()
win32clipboard.SetClipboardText(path)
win32clipboard.CloseClipboard()
# 按下ctrl+s
win32api.keybd_event(0x11, 0, 0, 0)
win32api.keybd_event(0x53, 0, 0, 0)
win32api.keybd_event(0x53, 0, win32con.KEYEVENTF_KEYUP, 0)
win32api.keybd_event(0x11, 0, win32con.KEYEVENTF_KEYUP, 0)
time.sleep(1)
# 鼠标定位输入框并点击
windll.user32.SetCursorPos(700, 510)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
time.sleep(1)
# 按下ctrl+a
win32api.keybd_event(0x11, 0, 0, 0)
win32api.keybd_event(0x41, 0, 0, 0)
win32api.keybd_event(0x41, 0, win32con.KEYEVENTF_KEYUP, 0)
win32api.keybd_event(0x11, 0, win32con.KEYEVENTF_KEYUP, 0)
time.sleep(1)
# 按下ctrl+v
win32api.keybd_event(0x11, 0, 0, 0)
win32api.keybd_event(0x56, 0, 0, 0)
win32api.keybd_event(0x56, 0, win32con.KEYEVENTF_KEYUP, 0)
win32api.keybd_event(0x11, 0, win32con.KEYEVENTF_KEYUP, 0)
time.sleep(1)
# 按下回车
win32api.keybd_event(0x0D, 0, 0, 0)
win32api.keybd_event(0x0D, 0, win32con.KEYEVENTF_KEYUP, 0)
browser.close()
有个小问题...鼠标定位
windll.user32.SetCursorPos(700, 510)
Python win32api.keybd_event模拟键盘输入的更多相关文章
- Python模拟键盘输入和鼠标操作
Python模拟键盘输入和鼠标操作 一.Python键盘输入模拟: import win32api import win32con win32api.keybd_event(17,0,0,0) #c ...
- 模拟键盘输入 : SendMessage, keybd_event, PostKeybdMessage
转自模拟键盘输入 : SendMessage, keybd_event, PostKeybdMessage 目的 最近项目要求在Windows CE下模拟键盘输入,上网搜索了一下,发现有3个API可以 ...
- 模拟键盘输入首先要用到一个API函数:keybd_event
转自:http://www.cnblogs.com/cpcpc/archive/2011/02/22/2123055.html 模拟键盘输入首先要用到一个API函数:keybd_event. 模拟按键 ...
- C# keybd_event用法 模拟键盘输入
最近有业务需求,需要模拟键盘输入,所以了解了一下C#中keybd_event函数的用法.该函数能够产生WM_KEYUP或WM_KEYDOWN消息,即可以触发键盘事件. 函数引用如下: [DllImpo ...
- VC 模拟键盘输入
转载请注明来源:https://www.cnblogs.com/hookjc/ vc模拟键盘输入keybd_event(VK_LWIN, 0, 0 ,0);keybd_event('M', 0, 0 ...
- 使用C#模拟键盘输入、鼠标移动和点击、设置光标位置及控制应用程序的显示
1.模拟键盘输入(SendKeys) 功能:将一个或多个按键消息发送到活动窗口,就如同在键盘上进行输入一样. 语法:SendKeys.Send(string keys);SendKeys.SendWa ...
- VB模拟键盘输入的N种方法
VB模拟键盘输入的N种方法http://bbs.csdn.net/topics/90509805hd378发表于: 2006-12-24 14:35:39用VB模拟键盘事件的N种方法 键盘是我们使用计 ...
- 用Delphi模拟键盘输入
在Windows大行其道的今天,windows界面程序受到广大用户的欢迎.对这些程序的操作不外乎两种,键盘输入控制和鼠标输入控制.有时,对于繁杂的,或重复性的操作,我们能否通过编制程序来代替手工输入, ...
- Python+Selenium自动化-模拟键盘操作
Python+Selenium自动化-模拟键盘操作 0.导入键盘类Keys() selenium中的Keys()类提供了大部分的键盘操作方法:通过send_keys()方法来模拟键盘上的按键. # ...
随机推荐
- 三 Road
3—5年程序员的发展和出路在哪里? 是继续做技术人,还是向管理者发力?是继续留在大公司,还是转投潜力小公司?如果没有核心竞争力,入行一两年的新程序员朋友是可以替代你大部分工作的,而且薪资还低,要怎么办 ...
- swoole之任务和定时器
一.代码 <?php use Swoole\Server; /** * 面向对象的形式 + task + timer */ class WebSocket { public $server; p ...
- P1093 字符串A+B
1093 字符串A+B (20分) 给定两个字符串 A 和 B,本题要求你输出 A+B,即两个字符串的并集.要求先输出 A,再输出 B,但重复的字符必须被剔除. 输入格式: 输入在两行中分别给出 ...
- vs2010编译C++ 友元函数
// CTest.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> #include &l ...
- 云时代架构阅读笔记十一——数据库SQL优化
网上关于SQL优化的教程很多,但是比较杂乱.近日有空整理了一下,写出来跟大家分享一下,其中有错误和不足的地方,还请大家纠正补充. 1.对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 ...
- kali linux 添加源 及为firefox esr 添加 flash 插件 --2017
终端 输入 vim /etc/apt/sources.list 在文件内写入 #中科大deb http://mirrors.ustc.edu.cn/kali kali-rolling main non ...
- json字符串转java对象,json中字段名称与对象属性名称不一致
json字符串转java对象,json字段名称与对象属性名称不一致可以在对象属性上添加注解@SerializedName解决
- log4j配置文件——hibernate
log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.out log4j ...
- 【剑指Offer】面试题26. 树的子结构
题目 输入两棵二叉树A和B,判断B是不是A的子结构.(约定空树不是任意一个树的子结构) B是A的子结构, 即 A中有出现和B相同的结构和节点值. 例如: 给定的树 A: 3 / \ ...
- maven集成SSM项目,jetty部署运行——搭建maven项目部署jetty试运行(一)
今天闲来没事采用maven集成一个SSM框架来复习复习,下面开始我的复习之旅,慢慢来,不着急,哈哈,不忙时候敲两下,整起来. 工具为Eclipse,首先需要建立一个maven工程,file右键new- ...