【发布时间】:2020-08-27 21:09:40
【问题描述】:
我的键盘包含一排用于各种非标准键盘任务的按钮。这些键包含修改音量、播放或暂停、跳过曲目等功能。如何使用 Python 模拟基本的播放/暂停?顺便说一句,我在 Windows 上。
【问题讨论】:
我的键盘包含一排用于各种非标准键盘任务的按钮。这些键包含修改音量、播放或暂停、跳过曲目等功能。如何使用 Python 模拟基本的播放/暂停?顺便说一句,我在 Windows 上。
【问题讨论】:
我会使用pywin32。与安装捆绑在一起的是大量 API 文档(通常放置在类似 C:\Python32\Lib\site-packages 的位置。)它本质上将很多东西包装在 Win32 库中,用于 Windows 中的许多低级任务。
安装后,您可以使用keybd_event 的包装器。
您也可以使用SendInput 代替keybd_event,但它似乎没有被PyWin32 包装。 SendMessage 也是一种选择,但比较麻烦。
您需要查找这些特殊按钮的虚拟扫描代码,因为我怀疑字符到代码的映射功能会帮助您。你可以找到参考here。
那么调用函数就很简单了。下面的 sn-p 在我的计算机上暂停 Chuck Berry。
>>> import win32api
>>> VK_MEDIA_PLAY_PAUSE = 0xB3
>>> hwcode = win32api.MapVirtualKey(VK_MEDIA_PLAY_PAUSE, 0)
>>> hwcode
34
>>> win32api.keybd_event(VK_MEDIA_PLAY_PAUSE, hwcode)
MapVirtualKey 为我们提供了keybd_event 需要的硬件扫描码(或者更有可能是键盘驱动程序。)
请注意,所有这些都被键盘驱动程序抢购一空,因此您实际上无法控制击键的发送位置。使用SendMessage,您可以将它们发送到特定窗口。媒体密钥通常无关紧要,因为它们会被音乐播放器等拦截。
【讨论】:
KEYEVENTF_EXTENDEDKEY 标志传递给 MapVirtualKey。
在安装了所有最新更新的 Windows 10 64 上这对我不起作用。在它起作用之前我需要这个(第三个参数 2)。
win32api.keybd_event(0xB3,0,2,0)
没有费心去研究为什么它可以工作,但把它扔在那里,因为这篇文章和其他类似的帖子让我很沮丧,因为某种原因不能在我的电脑上工作。
这成功地在我的电脑上暂停/播放了 Amazon Music。
【讨论】:
您可以使用pyautogui。该库包含许多键盘和鼠标模拟。
在 cmd 中安装运行 pip install pyautogui。
为了模拟播放/暂停按键,您应该使用pyautogui.press("playpause")。
在https://pyautogui.readthedocs.io/en/latest/keyboard.html 上查看他们的文档以查看支持的按键列表和其他一些键盘功能。
【讨论】: