为什么 Python 的 win32api.keybd_event 与 win32clipboard.OpenClipboard() 冲突?

Why do Python's win32api.keybd_event conflict with win32clipboard.OpenClipboard()?

请看图片:

密码是:

import win32con
import win32clipboard
import win32api

win32api.keybd_event(win32con.VK_SNAPSHOT, 0, 0, 0)
win32api.keybd_event(win32con.VK_SNAPSHOT, 0, win32con.KEYEVENTF_KEYUP, 0)

win32clipboard.OpenClipboard()
win32clipboard.CloseClipboard()

更奇怪的是,我在Python的交互环境下写代码时,一切正常,如下图:

结论:如果我将代码保存在.py文件和python xxx.py中,则出现错误,但如果我在交互式环境中编写代码,则一切正常。

如果我需要在.py文件中编写代码,请告诉我为什么以及如何解决问题。非常感谢。

问题已解决。 解决方案非常简单。就多一行代码。

import win32con
import win32clipboard
import win32api
import time

win32api.keybd_event(win32con.VK_SNAPSHOT, 0, 0, 0)
win32api.keybd_event(win32con.VK_SNAPSHOT, 0, win32con.KEYEVENTF_KEYUP, 0)

#this is the solution
time.sleep(1)

win32clipboard.OpenClipboard()
win32clipboard.CloseClipboard()

这是因为在win32api.keybd_event发送截屏键的时候,不会等到截屏完成。相反,它将继续 运行 后续代码。但是此时正在打印屏幕,正在使用剪贴板,所以win32clipboard获取不到剪贴板。