有时候我们需要使用python执行一些脚本,可能需要让程序自动按键或自动点击鼠标,来模拟人操作键盘、鼠标,这里推荐使用pywin32库,安装方式如下:
输入:pip install pywin32
win32api.keybd_event()
该函数原型:keybd_event(bVk, bScan, dwFlags, dwExtraInfo)
第一个参数:虚拟键码(键盘键码建议网上搜下);
第二个参数:硬件扫描码,一般设置为0即可;
第三个参数:函数操作的一个标志位,如果值为KEYEVENTF_EXTENDEDKEY则该键被按下,也可设置为0即可,如果值为KEYEVENTF_KEYUP则该按键被释放;
第四个参数:定义与击键相关的附加的32位值,一般设置为0即可。
例1:输出键盘字符f
import win32con
import win32api
import time
#函数功能:按下按键
**点击键盘的f键,其中70是f虚拟键码**
win32api.keybd_event(70,0,0,0) #代表按下f键
time.sleep(0.02)
win32api.keybd_event(70, 0, win32con.KEYEVENTF_KEYUP, 0) #释放f键
输出结果:f
例2:输出换行(enter)、向下箭头(down)
import win32con
import win32api
import time
#13为虚拟键码,是enter对应的键盘码值
win32api.keybd_event(13,0,0,0)
time.sleep(0.02)
win32api.keybd_event(13, 0, win32con.KEYEVENTF_KEYUP, 0)
输出结果:
>>>
#向下箭头(down),40代表down
win32api.keybd_event(40,0,0,0)
win32api.keybd_event(40,0,win32con.KEYEVENTF_KEYUP,0) #向下箭头(down),40代表down
例3:
模拟键盘全选,复制、粘贴。
import win32con
import win32api
import time
#按下ctrl+a,全选
#17为ctrl键码值,65为a的键码值
win32api.keybd_event(17,0,0,0)
win32api.keybd_event(65,0,0,0)
win32api.keybd_event(17, 0, win32con.KEYEVENTF_KEYUP, 0)
win32api.keybd_event(65, 0, win32con.KEYEVENTF_KEYUP, 0)
time.sleep(1)
#按下ctrl+c,67键码值为c
win32api.keybd_event(17,0,0,0)
win32api.keybd_event(67,0,0,0)
win32api.keybd_event(17, 0, win32con.KEYEVENTF_KEYUP, 0)
win32api.keybd_event(67, 0, win32con.KEYEVENTF_KEYUP, 0)
time.sleep(1)
#按下ctrl+v
win32api.keybd_event(17,0,0,0)
win32api.keybd_event(86,0,0,0)
win32api.keybd_event(17, 0, win32con.KEYEVENTF_KEYUP, 0)
win32api.keybd_event(86, 0, win32con.KEYEVENTF_KEYUP, 0)
time.sleep(1)
win32gui.GetCursorPos()
获取当前鼠标坐标,它获取的是鼠标相对屏幕的左上角的距离,单位是像素。
pos = win32gui.GetCursorPos() #鼠标现在屏幕上方的位置
print(pos)
#输出结果
(655, 445)
调用函数win32api.mouse_event()
#鼠标事件
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,0,0,0) #左键按下
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,0,0,0) #左键抬起
其中鼠标左键点击也可以这样写
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN | win32con.MOUSEEVENTF_LEFTUP,0,0,0,0)
将所标移到指定位置然后左键点击
#x,y指代鼠标将要移动的位置,也即坐标
win32api.SetCursorPos((x,y))
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN | win32con.MOUSEEVENTF_LEFTUP,0,0,0,0)
win32api.mouse_event(win32con.MOUSEEVENTF_RIGHTDOWN | win32con.MOUSEEVENTF_RIGHTUP,0,0,0,0) #右键点击
win32api.SetCursorPos((x,y))
for i in range(5):
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN | win32con.MOUSEEVENTF_LEFTUP,0,0,0,0)