在Python中调用win32api.keybd_event函数时尽量不要使用KEYEVENTF_EXTENDEDKEY参数,为什么呢?因为使用这个参数后,那个键一直处于被按下的状态,使用“KEYEVENTF_KEYUP”好象都无效。
win32api.keybd_event的功能是模拟键盘输入
该函数原型:keybd_event(bVk, bScan, dwFlags, dwExtraInfo)
第一个参数:虚拟键码(键盘键码对照表见附录);
第二个参数:硬件扫描码,一般设置为0即可;
第三个参数:函数操作的一个标志位,如果值为KEYEVENTF_EXTENDEDKEY则该键一直被按下(EXTENDED意思就是延长)。所以建议大家一定要设置为0,表示按下(我不明白为什么不使用KEYDOWN)。如果值为KEYEVENTF_KEYUP则该按键被释放;
第四个参数:定义与击键相关的附加的32位值,一般用不到,都设置为0。
例子:
import win32gui,win32api,win32con
hwnd = win32gui.FindWindow('#32770', '另存为') #以一个“另存为”窗口为例
win32gui.SetForegroundWindow(hwnd) #激活窗口至前端
win32api.keybd_event(18, 0, 0, 0) #按下Alt
win32api.keybd_event(83, 0, 0, 0) # 按下S
win32api.keybd_event(83, 0, win32con.KEYEVENTF_KEYUP, 0) #松开s
win32api.keybd_event(18, 0, win32con.KEYEVENTF_KEYUP, 0) #松开Alt