linux/windows wps node.js插件对PPT状态监听并且通知其他应用

需求背景

公司要求对Window系统,和国产操作系统(UOS)的wps 软件在 PPT开始播放 结束播放,和播放中翻页 上一页 下一页 等状态进行监听,并通知到我们桌面应用。

技术方案

  • 开发WPS插件,使用node.JS 插件开发,同时支持了window / linux
  • 对WPS 消息进行监听
  • 通知到其他应用程序

实现过程

  • 开发WPS插件

这里不做过多讲解,请查看我前面的文章,wps linux node.js 加载项开发,和离线部署方案,说得比较清楚了!

这里详细说下WPS事件的监听和通知到其他应用程序

按照我前面的文章(wps linux node.js 加载项开发,和离线部署方案)在创建好的目录下面,有个JS文件夹里面的ribbon.js文件函数:OnAddinLoad是启动入口,如下图所示:
在OnAddinLoad函数里面我调用了自己实现的InitWebSocket和RegisterCommand

  • InitWebSocket 函数代码完整实现
js 复制代码
var planWebsocket = null;
var planIP = "127.0.0.1"; // IP地址
var planPort = "9800";    // 端口号


/*
 * 摘要提示:Lv
 * 初始化websocket   
 */
function InitWebSocket() {
        if ('WebSocket' in window) {
            planWebsocket = new WebSocket('ws://'+ planIP +':' + planPort + '/PPTController'); // 通信地址
            planWebsocket.onopen = function (event) {
                console.log('建立连接');
                let sendData = {
                    "command": "getplans", "data": [{"planid": 0}]
                }
                planWebsocket.send(JSON.stringify(sendData)); // 发送获取数据的接口
            }
 
            planWebsocket.onmessage = function (event) {
                // console.log('收到消息:' + event.data)
                let data = JSON.parse(event.data);
                if (data.command == "getplans") {
                    var planData = data.data;//返回的数据
                    console.log(planData);
                } else if (data.command == "getscenes") {
                    // 其他命令
                }
            }
 
            planWebsocket.onclose = function (event) {
                console.log('连接关闭');
            }
 
            planWebsocket.onerror = function () {
                alert('websocket通信发生错误!');
            }
        } else {
            alert('该浏览器不支持websocket!');
        }
    }
  • RegisterCommand 函数代码完整实现
js 复制代码
/*
 * 摘要提示:Lv
 * 注册PPT播放状态的事件 
 */
function RegisterCommand()
{
    wps.ApiEvent.AddApiEventListener('SlideShowBegin', Application_SlideShowBegin);
    wps.ApiEvent.AddApiEventListener('SlideShowEnd', SlideShowEndCommand);
    wps.ApiEvent.AddApiEventListener('SlideShowNextSlide',SlideShowNextSlideCommand);
    wps.ApiEvent.AddApiEventListener('SlideShowOnPrevious',SlideShowOnPreviousCommand);
}

function Application_SlideShowBegin(Wn) {
    alert("开始播放");
    
    //调用SendMsg发送消息,示例:
    SendMsg("SlideShowBegin","开始播放");
}

function SlideShowEndCommand(Wn)
{
    alert("结束播放");
}

function SlideShowNextSlideCommand(Wn)
{
    alert("准备播放下一页");
}

function SlideShowOnPreviousCommand(Wn)
{
    alert("上一页");
}


function SendMsg(type,msg)
{
    let sendData = {
        "command": type, "data": msg
    }
    planWebsocket.send(JSON.stringify(sendData));
}

如上代码描述:

我在我wps 启动node.js 插件时,首先我实例化了一个WebSocket服务,且注册了ppt相关的事件回调。在回调函数内,我使用WebSocket 通信告诉其他应用程序,其他程序接收到消息后执行自身的业务。

相关推荐
Hello_Pyhx39 分钟前
NWinfo 导出 Windows 硬件信息:从 JSON 报告到缺项排查
windows·json
无人生还别怕1 小时前
如何搭建docker仓库(轻量级)registry
linux·运维·docker·云原生·容器·registry·openanolisos
无足鸟ICT1 小时前
【RHCA+】agedu命令(查看磁盘使用情况)
linux
StarsGreen1 小时前
Android 启动流程详解
android·linux·单片机·嵌入式硬件
zhengfei6112 小时前
CVE-2026-98432:Linux 内核 TCP 释放后重用漏洞,CVSS 9.8 但补丁覆盖极不均衡
linux·运维·tcp/ip
叼烟扛炮2 小时前
Linux 学习笔记(六十一):网络编程毕业设计——Reactor 反应堆模式
linux·网络·笔记·学习·课程设计
xyzzklk2 小时前
变相解决华为Mate 8锁屏后无法建立入站网络连接
linux·运维·服务器·网络·华为·go·安卓
叼烟扛炮4 小时前
Linux 学习笔记(五十九):epoll 的生死抉择——LT 与 ET 模式
linux·运维·服务器·网络·笔记·学习·php
David猪大卫11 小时前
【Linux修炼】环境变量、进程地址空间
linux·c语言·经验分享·笔记·学习·ubuntu·centos
叼烟扛炮12 小时前
Linux 学习笔记(五十六):IO 多路复用初探——select 的“三宗罪”
linux·服务器·数据库·笔记·学习·php