将击键发送到 PowerPoint 窗口

Posted

技术标签:

【中文标题】将击键发送到 PowerPoint 窗口【英文标题】:Send keystrokes to powerpoint windows 【发布时间】:2021-02-03 20:21:52 【问题描述】:

我正在尝试将击键发送到 Python 中的 PowerPoint 幻灯片,以便自动推进幻灯片。我想发送VK_RIGHTVK_LEFT 消息。

我正在使用win32gui.FindWindow 通过标题找到 Powerpoint 窗口,然后尝试使用以下命令向窗口句柄发送消息:

win32api.SendMessage(windowhandle, win32con.WM_KEYDOWN, win32con.VK_RIGHT, 0))

虽然这适用于记事本等其他应用程序,但它似乎不适用于主窗口。对于记事本,它实际上适用于其子窗口,因此我尝试使用 Powerpoint 子窗口:

win32gui.EnumChildWindows

我循环它们以向每个子窗口发送相同的消息,但它似乎也不起作用。

win32api.SendMessageLRESULT 始终为 0(记事本为 1)。

知道为什么会这样吗?

【问题讨论】:

【参考方案1】:

另一种(可能更好的)解决方案是使用 COM32,它恰好包含在 win32api 中。

您可以使用this library for office作为参考。

打开PowerPoint并查看下一张幻灯片的示例:

app = win32com.client.Dispatch("PowerPoint.Application")
objCOM = app.Presentations.Open(FileName="path_to_file", WithWindow=1)
objCOM.SlideShowWindow.View.Next()

来源:https://medium.com/@chasekidder/controlling-powerpoint-w-python-52f6f6bf3f2d

【讨论】:

谢谢@OskarZyg。我实际上已经看过中篇文章并尝试过这种方法。它错过了一步,因为您必须先开始幻灯片放映(我不知道该怎么做)。但最重要的是,我必须控制将在线播放的演示文稿的窗口,而不是具有传统幻灯片窗口的那个。我不明白这个库是否涵盖了这个“罕见”的功能。所以对我来说,目前最好的选择仍然是将键盘输入发送到幻灯片窗口。 该库中实际上似乎有一个广播模型:link我可能会尝试一下 广播对象记录不充分。虽然我可以在本地开始幻灯片放映,但广播要求一个 serverUrl。无论我尝试给它什么 URL,它都不起作用。 Office 演示服务实际上应该向您返回演示 URL,至少当您开始在 powerpoint 桌面应用程序中播放幻灯片时会发生这种情况。

以上是关于将击键发送到 PowerPoint 窗口的主要内容,如果未能解决你的问题,请参考以下文章

Python 将击键发送到非活动应用程序

通过 JNA 向隐藏窗口发送击键

Vbscript从批处理文件运行而不将击键发送到批处理文件

将快速文本输入发送到另一个进程(窗口)

使用 VBA 激活打开的 MS Access 文件以发送密钥

关于Windows更新窗口内容的问题(作为一个实验,效果很明显)