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

示例2
# 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)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM