为什么 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获取不到剪贴板。
请看图片:
密码是:
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获取不到剪贴板。