@lastos/localsdk
v7.0.21
Published
localsdk bindings for Node.js
Downloads
34
Readme
简介
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 | 系统音量变化 |