最后,我找到了一种使用 Python 以一种优雅且简单的方式解决此问题的方法。我没有使用库或 API,而是使用套接字连接到 Impress 并对其进行控制。
在文章的末尾,您可以阅读全文,说明如何以这种方式控制 Impress。这很简单,而且很棒。
您使用 Python 向 Impress 发送消息(正在侦听某个端口),它会接收消息并根据您的请求执行操作。
您必须在应用程序中启用此“远程控制”功能。我用这个解决了我的问题。
感谢您的回复!
LibreOffice Impress 远程协议规范
通过 UTF-8 编码的字符流进行通信。
(在 LibreOffice 部分使用 RTL_TEXTENCODING_UTF8。)
TCP
关于设置和初始握手的更多 TCP 特定细节
写的,但实际的消息协议与蓝牙相同。
消息格式
一条消息由一行或多行组成。第一行是消息描述,
更多的行可以添加任何必要的数据。空行结束消息。
即"MESSAGE\n\n" 或 "MESSAGE\nDATA\nDATA2...\n\n"
您必须一直阅读消息,直到出现空行(即双
new-line) 以允许将来的协议扩展。
初始化
一旦连接,服务器就会发送“LO_SERVER_SERVER_PAIRED”。
(即“LO_SERVER_SERVER_PAIRED\n\n”通过流发送。)
随后,如果幻灯片正在运行,服务器将发送 slideshow_started,
如果没有幻灯片正在运行,则为 slideshow_finished。 (详情见下文。)
然后,当前服务器实现继续发送所有幻灯片注释和预览
给客户。 (这应该更改以防止内存问题,并预览
请求机制已实现。)
命令(客户端到服务器)
客户端不应该假设服务器的状态发生了变化。
命令已发送。所有更改都将被发回给客户端。
(这是为了允许多个客户端请求不同的更改等情况。)
[方括号]中的任何行都是可选的,如果不需要,应该省略。
从 gsoc2013 开始,这些命令扩展为现有协议,由于服务器端可以容忍未知命令,这些扩展不会破坏向后兼容性
- pointer_started // 在屏幕的初始位置 (x,y) 创建一个红点
initial_x // 这应该在用户第一次触摸屏幕时调用
initial_y // 注意 x, y 是相对于幻灯片大小的百分比(从 0.0 到 1.0)
- pointer_dismissed // 关闭屏幕上的指针红点,应该在用户停止触摸屏幕时调用
- pointer_coordination // 这会将指针的位置更新为当前 (x,y)
current_x // 注意 x, y 是相对于幻灯片大小的百分比(从 0.0 到 1.0)
current_y // 除非screenupdater的性能有明显提升,否则我们应该考虑限制更新频率
// 远程端
状态/数据(服务器到客户端)
slideshow_finished //(如果启动时没有幻灯片运行,也会传输。)
slideshow_started //(如果幻灯片在启动时运行,也会传输。)
幻灯片数
当前幻灯片编号
slide_notes
幻灯片编号
[Notes] // 注释是一个 html 文档,可能还包含 \n 换行符,
// 即客户端应该一直读到空行为止。
slide_updated // 服务器上的幻灯片已更改
当前幻灯片编号
slide_preview // 为幻灯片提供预览图像。
幻灯片编号
image // Base 64 编码的 png 图像。
从 gsoc2013 开始,这些命令被扩展到现有协议,因为远程端也忽略所有未知命令(这是 gsoc2012 android 实现的情况),保持向后兼容性。
- slideshow_info //一旦配对,服务器端将返回当前演示的标题
标题