zoukankan      html  css  js  c++  java
  • 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)
  • 相关阅读:
    页式管理
    Chord算法(原理)
    php实现反转链表(链表题一定记得画图)(指向链表节点的指针本质就是一个记录地址的变量)($p->next表示的是取p节点的next域里面的数值,next只是p的一个属性)
    js进阶ajax的XMLHttpRequest对象的status和statustext属性(如果ajax和php联合使用的话:open连接服务器的第二个参数文件路径改成请求php的url即可)
    js进阶ajax基本用法(创建对象,连接服务器,发送请求,获取服务器传过来的数据)
    js进阶课程ajax简介(ajax是浏览器来实现的)
    php面试题四
    heredoc(实现模板与代码的分离)
    如何查看计算机所连接的打印机
    php面试题三
  • 原文地址:https://www.cnblogs.com/chenxi188/p/11642006.html
Copyright © 2011-2022 走看看