需求背景
公司要求对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 通信告诉其他应用程序,其他程序接收到消息后执行自身的业务。