keybd_event模拟键盘输入
Windows提供了一个模拟键盘API函数keybd_event(),该函数原型为:keybd_event(bVk, bScan, dwFlags, dwExtraInfo),其中:
- 第一个参数:虚拟键码(键盘键码对照表见附录);
- 第二个参数:硬件扫描码,一般设置为0即可;
- 第三个参数:函数操作的一个标志位,如果值为KEYEVENTF_EXTENDEDKEY则该键被按下,也可设置为0即可,如果值为KEYEVENTF_KEYUP则该按键被释放;
- 第四个参数:定义与击键相关的附加的32位值,一般设置为0即可。
比如模拟按下“Ctrl+C”和“A”键:
from win32api import keybd_event
from win32con import KEYEVENTF_KEYUP
import timedef press_a():keybd_event(65, 0, 0, 0)keybd_event(65, 0, KEYEVENTF_KEYUP, 0)def ctrl_c():keybd_event(17, 0, 0, 0)keybd_event(67, 0, 0, 0)keybd_event(67, 0, KEYEVENTF_KEYUP, 0)keybd_event(17, 0, KEYEVENTF_KEYUP, 0)if __name__ == '__main__':while True:ctrl_c()press_a()time.sleep(1)
当运行程序,并打开一个命令行界面时, 效果就是每隔1秒按一次组合键“Ctrl+C”和“A”键:
键盘键码对照表:
按键 |
键码 |
按键 |
键码 |
按键 |
键码 |
按键 |
键码 |
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 |
按键示例:
#Giant dictonary to hold key name and VK value
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,'`':0xC0,';':0xBA,'[':0xDB,'\\':0xDC,']':0xDD,"'":0xDE,'`':0xC0}def press(*args):'''one press, one release.accepts as many arguments as you want. e.g. press('left_arrow', 'a','b').'''for i in args:win32api.keybd_event(VK_CODE[i], 0,0,0)time.sleep(.05)win32api.keybd_event(VK_CODE[i],0 ,win32con.KEYEVENTF_KEYUP ,0)def pressAndHold(*args):'''press and hold. Do NOT release.accepts as many arguments as you want.e.g. pressAndHold('left_arrow', 'a','b').'''for i in args:win32api.keybd_event(VK_CODE[i], 0,0,0)time.sleep(.05)def pressHoldRelease(*args):'''press and hold passed in strings. Once held, releaseaccepts as many arguments as you want.e.g. pressAndHold('left_arrow', 'a','b').this is useful for issuing shortcut command or shift commands.e.g. pressHoldRelease('ctrl', 'alt', 'del'), pressHoldRelease('shift','a')'''for i in args:win32api.keybd_event(VK_CODE[i], 0,0,0)time.sleep(.05)for i in args:win32api.keybd_event(VK_CODE[i],0 ,win32con.KEYEVENTF_KEYUP ,0)time.sleep(.1)def release(*args):'''release depressed keysaccepts as many arguments as you want.e.g. release('left_arrow', 'a','b').'''for i in args:win32api.keybd_event(VK_CODE[i],0 ,win32con.KEYEVENTF_KEYUP ,0)def typer(string=None,*args):
## time.sleep(4)for i in string:if i == ' ':win32api.keybd_event(VK_CODE['spacebar'], 0,0,0)time.sleep(.05)win32api.keybd_event(VK_CODE['spacebar'],0 ,win32con.KEYEVENTF_KEYUP ,0)elif i == '!':win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)win32api.keybd_event(VK_CODE['1'], 0,0,0)time.sleep(.05)win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)win32api.keybd_event(VK_CODE['1'],0 ,win32con.KEYEVENTF_KEYUP ,0)elif i == '@':win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)win32api.keybd_event(VK_CODE['2'], 0,0,0)time.sleep(.05)win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)win32api.keybd_event(VK_CODE['2'],0 ,win32con.KEYEVENTF_KEYUP ,0)elif i == '{':win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)win32api.keybd_event(VK_CODE['['], 0,0,0)time.sleep(.05)win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)win32api.keybd_event(VK_CODE['['],0 ,win32con.KEYEVENTF_KEYUP ,0)elif i == '?':win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)win32api.keybd_event(VK_CODE['/'], 0,0,0)time.sleep(.05)win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)win32api.keybd_event(VK_CODE['/'],0 ,win32con.KEYEVENTF_KEYUP ,0)elif i == ':':win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)win32api.keybd_event(VK_CODE[';'], 0,0,0)time.sleep(.05)win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)win32api.keybd_event(VK_CODE[';'],0 ,win32con.KEYEVENTF_KEYUP ,0)elif i == '"':win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)win32api.keybd_event(VK_CODE['\''], 0,0,0)time.sleep(.05)win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)win32api.keybd_event(VK_CODE['\''],0 ,win32con.KEYEVENTF_KEYUP ,0)elif i == '}':win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)win32api.keybd_event(VK_CODE[']'], 0,0,0)time.sleep(.05)win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)win32api.keybd_event(VK_CODE[']'],0 ,win32con.KEYEVENTF_KEYUP ,0)elif i == '#':win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)win32api.keybd_event(VK_CODE['3'], 0,0,0)time.sleep(.05)win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)win32api.keybd_event(VK_CODE['3'],0 ,win32con.KEYEVENTF_KEYUP ,0)elif i == '$':win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)win32api.keybd_event(VK_CODE['4'], 0,0,0)time.sleep(.05)win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)win32api.keybd_event(VK_CODE['4'],0 ,win32con.KEYEVENTF_KEYUP ,0)elif i == '%':win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)win32api.keybd_event(VK_CODE['5'], 0,0,0)time.sleep(.05)win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)win32api.keybd_event(VK_CODE['5'],0 ,win32con.KEYEVENTF_KEYUP ,0)elif i == '^':win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)win32api.keybd_event(VK_CODE['6'], 0,0,0)time.sleep(.05)win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)win32api.keybd_event(VK_CODE['6'],0 ,win32con.KEYEVENTF_KEYUP ,0)elif i == '&':win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)win32api.keybd_event(VK_CODE['7'], 0,0,0)time.sleep(.05)win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)win32api.keybd_event(VK_CODE['7'],0 ,win32con.KEYEVENTF_KEYUP ,0)elif i == '*':win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)win32api.keybd_event(VK_CODE['8'], 0,0,0)time.sleep(.05)win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)win32api.keybd_event(VK_CODE['8'],0 ,win32con.KEYEVENTF_KEYUP ,0)elif i == '(':win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)win32api.keybd_event(VK_CODE['9'], 0,0,0)time.sleep(.05)win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)win32api.keybd_event(VK_CODE['9'],0 ,win32con.KEYEVENTF_KEYUP ,0)elif i == ')':win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)win32api.keybd_event(VK_CODE['0'], 0,0,0)time.sleep(.05)win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)win32api.keybd_event(VK_CODE['0'],0 ,win32con.KEYEVENTF_KEYUP ,0)elif i == '_':win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)win32api.keybd_event(VK_CODE['-'], 0,0,0)time.sleep(.05)win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)win32api.keybd_event(VK_CODE['-'],0 ,win32con.KEYEVENTF_KEYUP ,0)elif i == '=':win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)win32api.keybd_event(VK_CODE['+'], 0,0,0)time.sleep(.05)win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)win32api.keybd_event(VK_CODE['+'],0 ,win32con.KEYEVENTF_KEYUP ,0)elif i == '~':win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)win32api.keybd_event(VK_CODE['`'], 0,0,0)time.sleep(.05)win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)win32api.keybd_event(VK_CODE['`'],0 ,win32con.KEYEVENTF_KEYUP ,0)elif i == '<':win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)win32api.keybd_event(VK_CODE[','], 0,0,0)time.sleep(.05)win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)win32api.keybd_event(VK_CODE[','],0 ,win32con.KEYEVENTF_KEYUP ,0)elif i == '>':win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)win32api.keybd_event(VK_CODE['.'], 0,0,0)time.sleep(.05)win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)win32api.keybd_event(VK_CODE['.'],0 ,win32con.KEYEVENTF_KEYUP ,0)elif i == 'A':win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)win32api.keybd_event(VK_CODE['a'], 0,0,0)time.sleep(.05)win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)win32api.keybd_event(VK_CODE['a'],0 ,win32con.KEYEVENTF_KEYUP ,0)elif i == 'B':win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)win32api.keybd_event(VK_CODE['b'], 0,0,0)time.sleep(.05)win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)win32api.keybd_event(VK_CODE['b'],0 ,win32con.KEYEVENTF_KEYUP ,0)elif i == 'C':win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)win32api.keybd_event(VK_CODE['c'], 0,0,0)time.sleep(.05)win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)win32api.keybd_event(VK_CODE['c'],0 ,win32con.KEYEVENTF_KEYUP ,0)elif i == 'D':win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)win32api.keybd_event(VK_CODE['d'], 0,0,0)time.sleep(.05)win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)win32api.keybd_event(VK_CODE['d'],0 ,win32con.KEYEVENTF_KEYUP ,0)elif i == 'E':win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)win32api.keybd_event(VK_CODE['e'], 0,0,0)time.sleep(.05)win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)win32api.keybd_event(VK_CODE['e'],0 ,win32con.KEYEVENTF_KEYUP ,0)elif i == 'F':win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)win32api.keybd_event(VK_CODE['f'], 0,0,0)time.sleep(.05)win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)win32api.keybd_event(VK_CODE['f'],0 ,win32con.KEYEVENTF_KEYUP ,0)elif i == 'G':win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)win32api.keybd_event(VK_CODE['g'], 0,0,0)time.sleep(.05)win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)win32api.keybd_event(VK_CODE['g'],0 ,win32con.KEYEVENTF_KEYUP ,0)elif i == 'H':win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)win32api.keybd_event(VK_CODE['h'], 0,0,0)time.sleep(.05)win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)win32api.keybd_event(VK_CODE['h'],0 ,win32con.KEYEVENTF_KEYUP ,0)elif i == 'I':win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)win32api.keybd_event(VK_CODE['i'], 0,0,0)time.sleep(.05)win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)win32api.keybd_event(VK_CODE['i'],0 ,win32con.KEYEVENTF_KEYUP ,0)elif i == 'J':win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)win32api.keybd_event(VK_CODE['j'], 0,0,0)time.sleep(.05)win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)win32api.keybd_event(VK_CODE['j'],0 ,win32con.KEYEVENTF_KEYUP ,0)elif i == 'K':win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)win32api.keybd_event(VK_CODE['k'], 0,0,0)time.sleep(.05)win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)win32api.keybd_event(VK_CODE['k'],0 ,win32con.KEYEVENTF_KEYUP ,0)elif i == 'L':win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)win32api.keybd_event(VK_CODE['l'], 0,0,0)time.sleep(.05)win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)win32api.keybd_event(VK_CODE['l'],0 ,win32con.KEYEVENTF_KEYUP ,0)elif i == 'M':win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)win32api.keybd_event(VK_CODE['m'], 0,0,0)time.sleep(.05)win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)win32api.keybd_event(VK_CODE['m'],0 ,win32con.KEYEVENTF_KEYUP ,0)elif i == 'N':win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)win32api.keybd_event(VK_CODE['n'], 0,0,0)time.sleep(.05)win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)win32api.keybd_event(VK_CODE['n'],0 ,win32con.KEYEVENTF_KEYUP ,0)elif i == 'O':win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)win32api.keybd_event(VK_CODE['o'], 0,0,0)time.sleep(.05)win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)win32api.keybd_event(VK_CODE['o'],0 ,win32con.KEYEVENTF_KEYUP ,0)elif i == 'P':win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)win32api.keybd_event(VK_CODE['p'], 0,0,0)time.sleep(.05)win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)win32api.keybd_event(VK_CODE['p'],0 ,win32con.KEYEVENTF_KEYUP ,0)elif i == 'Q':win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)win32api.keybd_event(VK_CODE['q'], 0,0,0)time.sleep(.05)win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)win32api.keybd_event(VK_CODE['q'],0 ,win32con.KEYEVENTF_KEYUP ,0)elif i == 'R':win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)win32api.keybd_event(VK_CODE['r'], 0,0,0)time.sleep(.05)win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)win32api.keybd_event(VK_CODE['r'],0 ,win32con.KEYEVENTF_KEYUP ,0)elif i == 'S':win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)win32api.keybd_event(VK_CODE['s'], 0,0,0)time.sleep(.05)win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)win32api.keybd_event(VK_CODE['s'],0 ,win32con.KEYEVENTF_KEYUP ,0)elif i == 'T':win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)win32api.keybd_event(VK_CODE['t'], 0,0,0)time.sleep(.05)win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)win32api.keybd_event(VK_CODE['t'],0 ,win32con.KEYEVENTF_KEYUP ,0)elif i == 'U':win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)win32api.keybd_event(VK_CODE['u'], 0,0,0)time.sleep(.05)win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)win32api.keybd_event(VK_CODE['u'],0 ,win32con.KEYEVENTF_KEYUP ,0)elif i == 'V':win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)win32api.keybd_event(VK_CODE['v'], 0,0,0)time.sleep(.05)win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)win32api.keybd_event(VK_CODE['v'],0 ,win32con.KEYEVENTF_KEYUP ,0)elif i == 'W':win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)win32api.keybd_event(VK_CODE['w'], 0,0,0)time.sleep(.05)win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)win32api.keybd_event(VK_CODE['w'],0 ,win32con.KEYEVENTF_KEYUP ,0)elif i == 'X':win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)win32api.keybd_event(VK_CODE['x'], 0,0,0)time.sleep(.05)win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)win32api.keybd_event(VK_CODE['x'],0 ,win32con.KEYEVENTF_KEYUP ,0)elif i == 'Y':win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)win32api.keybd_event(VK_CODE['y'], 0,0,0)time.sleep(.05)win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)win32api.keybd_event(VK_CODE['y'],0 ,win32con.KEYEVENTF_KEYUP ,0)elif i == 'Z':win32api.keybd_event(VK_CODE['left_shift'], 0,0,0)win32api.keybd_event(VK_CODE['z'], 0,0,0)time.sleep(.05)win32api.keybd_event(VK_CODE['left_shift'],0 ,win32con.KEYEVENTF_KEYUP ,0)win32api.keybd_event(VK_CODE['z'],0 ,win32con.KEYEVENTF_KEYUP ,0)else: win32api.keybd_event(VK_CODE[i], 0,0,0)time.sleep(.05)win32api.keybd_event(VK_CODE[i],0 ,win32con.KEYEVENTF_KEYUP ,0)
参考:
keybd_event模拟键盘输入
Vitual keystroke example
keybd_event模拟键盘输入相关推荐
- Python win32api.keybd_event模拟键盘输入
Python win32api.keybd_event模拟键盘输入 win32api.keybd_event 该函数原型:keybd_event(bVk, bScan, dwFlags, dwExt ...
- python模拟键盘输入字符_Python | 根据关键字符串遍历窗口 模拟键盘输入操作
在自动化脚本测试某个程序的过程中,偶尔会因为文件读取操作弹出各种信息窗口,导致自动化脚本无法继续往下执行.为了解决这个问题,需要隔一段时间对信息窗口进行一次遍历,针对需要处理的窗口进行模拟键盘输入操作 ...
- python 模拟键盘_Python 模拟键盘输入 | 学步园
Python 模拟键盘输入,留着备用. #coding=utf-8 import win32gui,win32api,win32con import time import threading def ...
- vc++6.0 模拟鼠标点击代码 木马程序的编写 VC 模拟键盘输入
From: http://fengqing888.blog.163.com/blog/static/33011416201112124481/ MFC 工程 把以下代码放到你想要响应的函数里面就行 C ...
- python 模拟键盘输入组合键_Python 模拟键盘输入
Python 模拟键盘输入,留着备用. #coding=utf-8 import win32gui,win32api,win32con import time import threading def ...
- java中像scanf一样多个输入_VB模拟键盘输入的N种方法
VB模拟键盘输入的N种方法http://bbs.csdn.net/topics/90509805hd378发表于: 2006-12-24 14:35:39用VB模拟键盘事件的N种方法 键盘是我们使用计 ...
- C语言实现模拟键盘输入字符串
部分应用或网站开启了禁止粘贴功能,该代码可以通过模拟键盘输入的方式,将英文输入至输入框中 ,具体使用说明请见如下介绍: 用户键字符串粘贴至小黑屏后按回车启动模拟输入功能,当用户切换至不能直接粘贴的输入 ...
- c#语言模拟键盘输入,C#如何模拟真实的键盘输入
匿名用户 1级 2018-05-27 回答 //直接给你贴一个我自己写的类,模拟键盘输入字符 using System.Runtime.InteropServices; namespace lison ...
- Win下模拟键盘输入的三种办法
最近闲着没事,就随意浏览博客,突然发现了一种模拟键盘输入的办法(之前一直想破脑袋的都没有想到的),然后借此机会说明一下. 具体实现方法 1)借用粘贴板 这是比较容易想到的,也最受程序员鄙视的一种办法, ...
- 模拟键盘输入的keycode
今天有个弹出框的element一直找不到,换了种方法关掉,就是用模拟键盘输入,找到以下对应的keycode,先记录下来,说不定以后用得上/*--------------------edit by 20 ...
最新文章
- 解决Windows下Arm下Linux下Qt4程序的中文乱码问题
- Python 官方推荐的一款打包工具
- Spring MVC的DispatcherServlet – Java开发人员应该知道的10件事
- 问题 1066: 2004年秋浙江省计算机等级考试二级C 编程题(2)
- go语言 expected ; found a
- 小杜机器人线下店_阿里线下卖车已成事实,阿里造车还会远吗?
- SpringMvc-参数为数组
- puppeteer中如何复用启动中的浏览器
- matlab 集合操作
- java oracle连接数据库_Java 连接 Oracle 数据库
- R实战 Nomogram(诺莫图列线图)及其Calibration校准曲线绘制
- 特征工程——用转换器抽取特征
- [移动GIS] 4.1-TDOA定位
- 百加得改变生产方式,协助生产洗手液
- Java实现基于朴素贝叶斯的情感词分析
- IBM3650系列服务器前故障诊断面板灯显示含义
- 秉火429笔记之二寄存器
- html按住语音如何看前面内容,单音语音内容.html
- 【GIS】高分辨率遥感影像智能解译
- Linux系统引导过程及修复引导