简介
node-localsdk 是一个用 C++实现的 Node.js 插件,将 Node.js 无法实现的系统底层功能
封装成 API 供 Node.js 调用。目前在三代机和五代机上使用不同的包,三代机是
@lastos/localsdk-x3
,五代机是 @lastos/localsdk
API 参数及返回值
node-localsdk 目前的所有 API 都是异步 API,每个 API 接受两个参数:
- 第一个参数是 JSON 字符串,格式为
'{key: value, ...}'
,如果没有参数,必须传递 一个空的 JSON:'{}'
。 - 第二个参数为回调函数,当底层接口执行完毕后调用此回调函数。回调函数有两个参数:
-
第一个参数是错误信息,当没有错误时,参数值为
undefined
。有错误,格式如下:key value 类型 说明 code number 错误码 message string 错误信息 所有错误码如下:
code 说明 300001 Json Key 无效 300002 Json Value 无效 300003 Json 格式错误 200001 出现标准异常 200002 出现未知异常 200003 Api 执行失败 200004 Api 没有实现 100001 RPC 服务不可用 100002 RPC 服务内部错误 100003 未知错误 -
第二个参数是接口返回值。格式如下:
-
{
"body": data
}
API 使用例子:
localsdk.api('{}', (err, data) => {
if (err) {
console.log(err)
} else {
console.log(data)
}
})
node-localsdk 初始化
在调用 node-localsdk 提供的 API 之前,需要调用 initConfig 。当 initConfig 成功返 回后才能调用其他 API。
initConfig 的参数如下:
key | value 类型 | 说明 |
---|---|---|
tempDir | string | 目录必须存在 |
logDir | string | 目录必须存在 |
appdataDir | string | 目录必须存在 |
mciDbPath | string | mci 数据库路径 |
networkAdaptor | string | 网卡硬件 ID,5 代机不需要 |
Example:
const sdk = require("@lastos/localsdk-x3")
const config = {
'tempDir': 'F:/InitConfig',
'logDir': 'F:/InitConfig',
'appdataDir': 'F:/InitConfig',
'mciDbPath': 'F:/InitConfig/mci.db',
'networkAdaptor': 'XXXXX'
}
localsdk.initConfig(JSON.stringify(config), (error, data) => {})
node-localsdk 事件通知
当底层有事件时,node-localsdk 提供了一个监听对象将事件通知到 js 层。使用方式如下:
const localsdk = require("@lastos/localsdk-x3")
global.notify = new localsdk.NotifyEventCore((name, message) => {
// process event
})
为了防止对象析构,需要将对象挂到 global
上。
也可以将 Node.js 中的 EventEmitter.emit
传到 NotifyEventCore
中。
const localsdk = require("@lastos/localsdk-x3")
const events = require('events')
const emitter = new events.EventEmitter;
global.notify = new localsdk.NotifyEventCore(emitter.emit.bind(emitter))
emitter.on('event.name', (event) => {
// process event
})
API
Activity
removeTopmostTask
关闭置顶窗口。
参数 key | 参数 value 类型 | 说明 |
---|---|---|
force | boolean | 为 true 时,强制杀死进程 |
setWindowsAsDesktop
设置桌面窗口
参数 key | 参数 value 类型 | 说明 |
---|---|---|
hwnd | number | 窗口的 hwnd |
unsetWindowsAsDesktop
设置桌面窗口
参数 key | 参数 value 类型 | 说明 |
---|---|---|
hwnd | number | 窗口的 hwnd |
isDesktopWindow
设置桌面窗口
参数 key | 参数 value 类型 | 说明 |
---|---|---|
hwnd | number | 窗口的 hwnd |
返回结果:
结果 key | 结果 value 类型 | 说明 |
---|---|---|
is_desktop_window | boolean | 是否是桌面窗口 |
hideAllTask
最小化所有窗口
showDock
设置 Dock 显示方式
参数 key | 参数 value 类型 | 说明 |
---|---|---|
status | boolean | true: 显示,false:隐藏 |
isDockHide
返回 dock 是否隐藏
返回结果:
结果 key | 结果 value 类型 | 说明 |
---|---|---|
is_dock_hide | boolean | Dock 是否隐藏 |
setWindowToBottom
将窗口置底
参数 key | 参数 value 类型 | 说明 |
---|---|---|
hwnd | number | 窗口的 hwnd |
ignoreZorderChangeSync
同步方法
Windows : 在 hookWindowMessage 中监听 WM_WINDOWPOSCHANGING 消息, 并在回调中使用这个方法。
参数为 json 字符串
参数 key | 参数 value 类型 | 说明 |
---|---|---|
w_param | TypedArray | hookWindowMessage 回调的第一个参数 |
l_param | TypedArray | hookWindowMessage 回调的第一个参数 |
Expamles:
win.hookWindowMessage(0x0046, (w_param, l_param) => {
message = { "w_param": w_param, "l_param": l_param }
localsdk.ignoreZorderChangeSync(JSON.stringify(message))
})
Linux :未实现
getTopmostWindowId
返回置顶窗口 ID
返回结果:
结果 key | 结果 value 类型 | 说明 |
---|---|---|
id | number | 置顶窗口 id |
RemoveAllTask
关闭所有任务
参数 key | 参数 value 类型 | 说明 |
---|---|---|
force | boolean | 为 true 时,强制杀死进程 |
Application
getAppList
获取 APP 列表
返回结果:
结果 key | 结果 value 类型 | 说明 |
---|---|---|
applist | array | 每个元素存储 APP 信息 |
APP:
key | 类型 | 说明 |
---|---|---|
name | string | 名字 |
package | string | 包名 |
binPath | string | 二进制路径 |
params | string | 参数 |
iconPath | string | 图标路径 |
platform | string | 平台 |
appid | string | AppId |
getDefaultAppList
获取指定APP 列表,如果系统中安装了 packages-name
中指定的 APP,返回 APP 的信息。返回结果和 getAppList
相同,
参数 key | 参数 value 类型 | 说明 |
---|---|---|
packages-name | array | 包名数组 |
openApp
打开一个程序
参数:
参数 key | 参数 value 类型 | 说明 |
---|---|---|
bin-path | string | 二进制路径 |
package-name | string | 包名 |
params | string | 启动参数 |
Channel [localsdk-x3]
getChannleList
获取通道列表
结果 key | 结果 value 类型 | 说明 |
---|---|---|
channellist | array | 每个元素存储 Channel 信息 |
Channel:
key | 类型 | 说明 |
---|---|---|
id | string | 通道 id |
type | number | 类型 |
state | number | 状态 |
/// 通道类型
enum class InputType {
/// 外接 PC 模块通道,三代机 SA06 和 PC 都共用这通道
kPcModule = 0,
/// Android 模块通道,用于区分二代机的 SA05 通道
kAndroidModule = 1,
/// HDMI 通道
kHDMI = 2,
/// VGA 通道
kVGA = 3,
/// ATV 通道
kATV = 4,
/// DTV 通道
kDTV = 5,
/// AV 通道
kAV = 6,
/// YPbPr 通道
kYPBPR = 7,
/// TV 系统通道,单 551 时 TV 通道,可理解成单 551 时 top-activity != tv-settings-activity 时候
kTVModule = 8,
};
/// 通道状态
enum class InputState {
/// 通道无插入
kUnPlugin = 0,
/// 通道插入且无信号
kPlugWithoutSignal = 1,
/// 通道插入且有信号
kPlugWithSignal = 2,
};
getCurrentChannel
获取当前通道
结果 key | 结果 value 类型 | 说明 |
---|---|---|
channel | object | 存储一个 Channel 信息 |
Channel:
key | 类型 | 说明 |
---|---|---|
id | string | 通道 id |
type | number | 类型 |
state | number | 状态 |
selectInputChannel
选择通道
参数 key | 参数 value 类型 | 说明 |
---|---|---|
channel-id | string | 通道 id |
Info [localsdk-x3]
getSN
获取设备 SN
结果 key | 结果 value 类型 | 说明 |
---|---|---|
sn | string | SN 号 |
getModuleVersion
获取设备副版本
结果 key | 结果 value 类型 | 说明 |
---|---|---|
version | string | 版本号 |
getMainVersion
获取主版本号
结果 key | 结果 value 类型 | 说明 |
---|---|---|
version | string | 版本号 |
Microphone [localsdk-x3][讲台]
microphoneIsMute
麦克风是否静音
参数 key | 参数 value 类型 | 说明 |
---|---|---|
id | string | 麦克风 id |
结果:
结果 key | 结果 value 类型 | 说明 |
---|---|---|
mute | boolean | true: 静音, false:非静音 |
getMicrophoneList
获取麦克风列表
结果 key | 结果 value 类型 | 说明 |
---|---|---|
microphones | array | Microphone |
Microphone: 字符串
screenshare [localsdk-x3]
getSenderList
获取传屏通道列表
返回结果:
结果 key | 结果 value 类型 | 说明 |
---|---|---|
senders | array | Sender |
Sender:
key | value 类型 | 说明 |
---|---|---|
type | number | 发送端类型 |
name | string | 发送端名称 |
id | string | 发送端 id |
/// 发送端的类型
enum class SenderType {
/// 未知类型
kUnknown = 0,
/// Dongle
kTransmitter = 1,
/// Windows 软件传屏
kWindowsSoftware = 2,
/// Mac 软件传屏
kMacSoftware = 3,
/// Android 手机
kAndroidPhone = 4,
/// Android 平板
kAndroidPad = 5,
/// iPhone
kIPhone = 6,
/// iPad
kIPad = 7,
};
fetchScreen
选择传屏通道
参数 key | 参数 value 类型 | 说明 |
---|---|---|
id | string | 传屏通道 id |
settings
getWallpaper [Windows]
获取壁纸
结果 key | 结果 value 类型 | 说明 |
---|---|---|
wallpaper-path | string | 路径 |
setWallpaper [Windows]
设置壁纸
参数 key | 参数 value 类型 | 说明 | |
---|---|---|---|
wallpaper-path | string | 路径 |
resetSystem [Linux]
重置系统
setExecutionState
使应用程序能够通知系统它正在使用,从而防止系统在应用程序运行时进入睡眠或关闭显示。
参数 key | 参数 value 类型 | 说明 | |
---|---|---|---|
state | number | 路径 |
state 是一个枚举值
kSystemRequired = 0x00000001; // 强制系统处于工作状态
kDisplayRequired = 0x00000002; // 禁止显示器关闭
kClear = 0x80000000; // 清除已经设置的状态
kAll = kSystemRequired | kDisplayRequired // 同时设置
getSystemVolume
返回系统音量
结果 key | 结果 value 类型 | 说明 |
---|---|---|
volume | int | 音量 |
volume => [0, 1]
如果 volume
等于-1
表示获取音量失败
setSystemVolume
设置系统音量
参数 key | 参数 value 类型 | 说明 | |
---|---|---|---|
volume | number | 音量大小 |
volume => [0, 1]
getSystemMute
返回系统是否静音
结果 key | 结果 value 类型 | 说明 |
---|---|---|
mute | boolean | 是否静音 |
setSystemMute
设置系统是否静音
参数 key | 参数 value 类型 | 说明 | |
---|---|---|---|
mute | boolen | 是否静音 |
maxhub.localsdk.node.event.setting.SystemVolumeChanged
音量变化事件
参数 key | 参数 value 类型 | 说明 | |
---|---|---|---|
muted | boolen | true: 变为静音; false: 变为非静音 | |
volume | float | 0 - 1, 变化后的音量值 |
getOffDisplayTime
获取屏幕关闭时间
结果 key | 结果 value 类型 | 说明 |
---|---|---|
time | int | 时间,单位 s |
返回 0 表示从不关闭 返回 -1 表示获取失败
MCI
mciGetConfig
获取配置
参数 key | 参数 value 类型 | 说明 |
---|---|---|
module | string | 模块名称 |
key | string | 键 |
defaul_value | string | 默认值 |
返回结果:
结果 key | 结果 value 类型 | 说明 |
---|---|---|
value | string | 配置值 |
mciContainsModule
判断是否包括某个模块
参数 key | 参数 value 类型 | 说明 |
---|---|---|
module | string | 模块名称 |
返回结果:
结果 key | 结果 value 类型 | 说明 |
---|---|---|
contains | boolean | true: 存在,false:不存在 |
mciGetResource
获取 MCI 图片资源
参数 key | 参数 value 类型 | 说明 |
---|---|---|
module | string | 模块名称 |
id | string | 图片 id |
返回结果:
结果 key | 结果 value 类型 | 说明 |
---|---|---|
resource | string | 以 base64 返回资源内容 |
mciObserve
监听某个键的变化
参数 key | 参数 value 类型 | 说明 |
---|---|---|
module | string | 模块名称 |
key | string | 键 |
mciUnObserve
取消监听某个键的变化
参数 key | 参数 value 类型 | 说明 |
---|---|---|
module | string | 模块名称 |
key | string | 键 |
USB
getUsbDiskList
获取 usb 列表
返回结果:
结果 key | 结果 value 类型 | 说明 |
---|---|---|
usb-disk-list | array | UsbDiskInfo 数组 |
UsbDiskInfo:
key | 类型 | 说明 |
---|---|---|
usbDiskName | string | usb label |
usbDiskPath | string | 访问路径 |
remainSize | number | 剩余空间 |
totalSize | number | 总空间 |
事件列表
name | 说明 |
---|---|
maxhub.localsdk.node.event.system.channel.currentChannelChanged | 通道变化 [localsdk-x3] |
maxhub.localsdk.node.event.system.channel.channelStateChanged | 通道状态变化 [localsdk-x3] |
maxhub.localsdk.node.event.system.mci.changed | mci 改变 |
maxhub.localsdk.node.event.system.microphone.mute | 麦克风静音 [localsdk-x3 讲台] |
maxhub.localsdk.node.event.screenshare.senderConnect | 传屏连接 [localsdk-x3] |
maxhub.localsdk.node.event.screenshare.senderDisconnect | 传屏断开连接 [localsdk-x3] |
maxhub.localsdk.node.event.system.setting.wallpaperchanged | 墙纸改变 [Windows] |
maxhub.localsdk.node.event.system.usb.pullin | USB 插入 |
maxhub.localsdk.node.event.system.usb.pullout | USB 拔出 |
maxhub.localsdk.node.event.setting.SystemVolumeChanged | 系统音量变化 |