屏幕


Screen 是 EventEmitter 对象的一个实例,您可以使用 Screen.on(...) 来响应原生屏幕的事件。

Screen 是一个单例对象,需要通过调用 nw.Screen.Init() 初始化一次。

概要

//init must be called once during startup, before any function to nw.Screen can be called
nw.Screen.Init();

var screenCB = {
  onDisplayBoundsChanged: function(screen) {
    console.log('displayBoundsChanged', screen);
  },

  onDisplayAdded: function(screen) {
    console.log('displayAdded', screen);
  },

  onDisplayRemoved: function(screen) {
    console.log('displayRemoved', screen)
  }
};

// listen to screen events
nw.Screen.on('displayBoundsChanged', screenCB.onDisplayBoundsChanged);
nw.Screen.on('displayAdded', screenCB.onDisplayAdded);
nw.Screen.on('displayRemoved', screenCB.onDisplayRemoved);

Screen.Init()

初始化 Screen 单例对象,您只需要调用一次。

Screen.screens

获取屏幕数组(连接到计算机的屏幕数量)。

屏幕具有以下结构

screen {
// unique id for a screen
  id: int,

// physical screen resolution, can be negative, not necessarily start from 0,depending on screen arrangement
  bounds: {
    x: int,
    y: int,
    width: int,
    height: int
  },

// useable area within the screen bound
  work_area: {
    x: int,
    y: int,
    width: int,
    height: int
  },

  scaleFactor: float,
  isBuiltIn: bool,
  rotation: int,
  touchSupport: int
}

Screen.chooseDesktopMedia (sources, callback)

  • sources {String[]} 源类型数组。此 API 支持两种类型:"screen""window"
  • callback {Function} 带有选定 streamId 的回调函数。如果执行失败或现有会话处于活动状态,则 streamId 将为 false

注意

通过选择进行屏幕共享;目前仅在 Windows 和 OSX 以及某些 Linux 发行版中有效。

示例

nw.Screen.Init(); // you only need to call this once
nw.Screen.chooseDesktopMedia(["window","screen"], 
  function(streamId) {
    var vid_constraint = {
      mandatory: {
        chromeMediaSource: 'desktop', 
        chromeMediaSourceId: streamId, 
        maxWidth: 1920, 
        maxHeight: 1080
      }, 
      optional: []
    };
    navigator.webkitGetUserMedia({audio: false, video: vid_constraint}, success_func, fallback_func);
  }
);

事件: displayBoundsChanged(screen)

当屏幕分辨率、排列发生变化时发出,回调将使用 1 个参数 screen 调用。有关格式,请参见 Screen.screens

事件: displayAdded (screen)

当添加新屏幕时发出,回调函数将使用 1 个参数 screen 调用。有关格式,请参阅 Screen.screens

事件: displayRemoved (screen)

当删除现有屏幕时发出,回调函数将使用 1 个参数 screen 调用。有关格式,请参阅 Screen.screens

Screen.DesktopCaptureMonitor

此 API 的行为类似于 Screen.chooseDesktopMedia 函数。但它没有 GUI。您可以使用此 API 监控桌面上的屏幕和窗口的变化,并实现您自己的 UI。

Screen.DesktopCaptureMonitorEventEmitter 的一个实例。您可以使用 Screen.DesktopCaptureMonitor.on() 监听事件。

概要

var dcm = nw.Screen.DesktopCaptureMonitor;
nw.Screen.Init();
dcm.on("added", function (id, name, order, type) {
   //select first stream and shutdown
   var constraints = {
      audio: {
         mandatory: {
             chromeMediaSource: "system",
             chromeMediaSourceId: dcm.registerStream(id)
          }
      },
      video: {
         mandatory: {
             chromeMediaSource: 'desktop',
             chromeMediaSourceId: dcm.registerStream(id)
         }
      }
  };

  // TODO: call getUserMedia with contraints

  dcm.stop();
});

dcm.on("removed", function (id) { });
dcm.on("orderchanged", function (id, new_order, old_order) { });
dcm.on("namechanged", function (id, name) { });
dcm.on("thumbnailchanged", function (id, thumbnail) { });
dcm.start(true, true);

Screen.DesktopCaptureMonitor.started

DesktopCaptureMonitor 是否已启动的布尔值。

Screen.DesktopCaptureMonitor.start(should_include_screens, should_include_windows)

  • should_include_screens {Boolean} 是否应包含屏幕
  • should_include_windows {Boolean} 是否应包含窗口

DesktopCaptureMonitor 将开始监控系统并触发事件。如果 DesktopCaptureMonitor 正在运行,屏幕可能会闪烁。

Screen.DesktopCaptureMonitor.stop()

DesktopCaptureMonitor 将停止监控系统。在选择流后应停止 DesktopCaptureMonitor

Screen.DesktopCaptureMonitor.registerStream(id)

注册并返回一个有效的流 ID,该 ID 传递到 getUserMedia 约束中的 chromeMediaSourceId。有关用法,请参阅 概要

事件: added (id, name, order, type, primary)

行为变更

此功能在 0.13.0 中已更改。请参阅 从 0.12 迁移到 0.13 的迁移说明

  • id {String} 是媒体 ID。使用 registerStream(id) 获取与 getUserMedia() 一起使用的有效流 ID。请参阅 registerStream
  • name {String} 是窗口或屏幕的标题
  • order {Integer} 是窗口的 Z 轴顺序,如果选择了屏幕,它们将首先出现
  • type {String} 流的类型:“screen”、“window”、“other” 或 “unknown”
  • primary {Boolean} 仅限 Windows 操作系统 如果源是主监视器,则此值为 true

当添加新源时发出。

事件: removed (order)

  • order {Integer} 是不再可捕获的媒体源的顺序

当删除源时发出。

事件: orderchanged (id, new_order, old_order)

行为变更

此功能在 0.13.0 中已更改。请参阅 从 0.12 迁移到 0.13 的迁移说明

  • id {String} 是已更改 Z 轴顺序的屏幕或窗口的媒体 ID
  • new_order {Integer} 是新的 Z 轴顺序
  • old_order {Integer} 是旧的 Z 轴顺序

当源的 Z 轴顺序发生变化时发出(当其他窗口获得焦点时,窗口的 Z 轴顺序可能会发生变化)。

事件: namechanged (id, name)

行为变更

此功能在 0.13.0 中已更改。请参阅 从 0.12 迁移到 0.13 的迁移说明

  • id {String} 是已更改名称的屏幕或窗口的媒体 ID
  • name {String} 是屏幕或窗口的新名称

当源名称更改时发出。这可能发生在窗口更改标题时。

事件: thumbnailchanged (id, thumbnail)

行为变更

此功能在 0.13.0 中已更改。请参阅 从 0.12 迁移到 0.13 的迁移说明

  • id {String} 是具有更新缩略图的屏幕或窗口的媒体 ID
  • thumbnail {String} 是缩略图的 base64 编码 png

当源的缩略图更改时发出。