屏幕

Screen是个单例对象,使用前需要调用一次 nw.Screen.Init()进行启动,Screen.on(...)可对屏幕事件进行监听

示例

  1. //启动时必须进行一次调用,之后便可调用任何nw.Screen函数了
  2. nw.Screen.Init();
  3.  
  4. var screenCB = {
  5. onDisplayBoundsChanged: function(screen) {
  6. console.log('displayBoundsChanged', screen);
  7. },
  8. onDisplayAdded: function(screen) {
  9. console.log('displayAdded', screen);
  10. },
  11. onDisplayRemoved: function(screen) {
  12. console.log('displayRemoved', screen)
  13. }
  14. };
  15.  
  16. //监听屏幕边界与增删
  17. nw.Screen.on('displayBoundsChanged', screenCB.onDisplayBoundsChanged);
  18. nw.Screen.on('displayAdded', screenCB.onDisplayAdded);
  19. nw.Screen.on('displayRemoved', screenCB.onDisplayRemoved);

Screen.Init()

用途:启动时初始屏幕单例对象,只需要调用一次

Screen.screens

用途:获取连接到本机的屏幕数量

屏幕具有以下结构:

  1. screen {
  2. // 屏幕的唯一ID
  3. id: int,
  4.  
  5. //物理屏幕分辨率,不一定从0开始也可以是负数,这取决于屏幕排列
  6. bounds: {
  7. x: int,
  8. y: int,
  9. width: int,
  10. height: int
  11. },
  12.  
  13. // 屏幕范围内的可用区域
  14. work_area: {
  15. x: int,
  16. y: int,
  17. width: int,
  18. height: int
  19. },
  20.  
  21. scaleFactor: float,
  22. isBuiltIn: bool,
  23. rotation: int,
  24. touchSupport: int
  25. }

Screen.chooseDesktopMedia (sources, callback) Windows Linux

用途:选择屏幕进行共享

  • sources String[] - 源类型数组,可选: "screen""window".
  • callback Function - 已选streamId的回调函数. streamId为 false即意味着执行失败或现有session存活.

示范:

  1. nw.Screen.Init(); // 启动一次
  2. nw.Screen.chooseDesktopMedia(["window","screen"],
  3. function(streamId) {
  4. var vid_constraint = {
  5. mandatory: {
  6. chromeMediaSource: 'desktop',
  7. chromeMediaSourceId: streamId,
  8. maxWidth: 1920,
  9. maxHeight: 1080
  10. },
  11. optional: []
  12. };
  13. navigator.webkitGetUserMedia({audio: false, video: vid_constraint}, success_func, fallback_func);
  14. }
  15. );

事件: displayBoundsChanged(screen)

触发:更改屏幕分辨率时,可带有screen(Screen.screens)的进行回调

事件: displayAdded (screen)

触发:添加新屏幕时,可带有screen(Screen.screens)的进行回调

事件: displayRemoved (screen)

触发:移除新屏幕时,可带有screen(Screen.screens)的进行回调

Screen.DesktopCaptureMonitor

用途:使用此API监视桌面上的屏幕和窗口的更改,并实现自己的UI

该API与 Screen.chooseDesktopMedia类似的功能,但它没有GUI.

Screen.DesktopCaptureMonitor是个 EventEmitter实例. 可通过 Screen.DesktopCaptureMonitor.on()进行监听.

示例

  1. var dcm = nw.Screen.DesktopCaptureMonitor;
  2. nw.Screen.Init();
  3. dcm.on("added", function (id, name, order, type) {
  4. //选择第一个stream并关闭
  5. var constraints = {
  6. audio: {
  7. mandatory: {
  8. chromeMediaSource: "system",
  9. chromeMediaSourceId: dcm.registerStream(id)
  10. }
  11. },
  12. video: {
  13. mandatory: {
  14. chromeMediaSource: 'desktop',
  15. chromeMediaSourceId: dcm.registerStream(id)
  16. }
  17. }
  18. };
  19.  
  20. //用约束调用getUserMedia之类的后续操作
  21.  
  22. dcm.stop();
  23. });
  24.  
  25. dcm.on("removed", function (id) { });
  26. dcm.on("orderchanged", function (id, new_order, old_order) { });
  27. dcm.on("namechanged", function (id, name) { });
  28. dcm.on("thumbnailchanged", function (id, thumbnail) { });
  29. dcm.start(true, true);

Screen.DesktopCaptureMonitor.started

用途:判断 DesktopCaptureMonitor桌面捕获监视器是否已启动( Boolean)

Screen.DesktopCaptureMonitor.start(should_include_screens, should_include_windows)

用途:使DesktopCaptureMonitor桌面捕获监视器开始监视系统并触发事件

  • should_include_screens Boolean - 是否包括屏幕
  • should_include_windows Boolean - 是否包括窗口

如果 DesktopCaptureMonitor桌面捕获监视器正在运行,屏幕可能会闪烁

Screen.DesktopCaptureMonitor.stop()

用途:使DesktopCaptureMonitor桌面捕获监视器停止始监视系统

当选择了stream后 DesktopCaptureMonitor桌面捕获监视器应该被停止.

Screen.DesktopCaptureMonitor.registerStream(id)

用途:注册并返回在 getUserMedia约束中传递给 chromeMediaSourceId的有效stream ID

相关细节,请参阅 Synopsis

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

触发:添加源的时候

  • id String - 媒体ID. 使用 registerStream(id)可获取与 getUserMedia()一同使用的有效stream ID. 详细参阅上文registerStream
  • name String -窗口或屏幕的标题
  • order Integer - 窗口的z顺序
  • type String - 流的类型,可选值: screen, window, otherunknown
  • primary Boolean - Windows 如果源是主监视器时,该项为 true

事件: removed (order)

触发:删除源的时候

  • order Integer - 媒体源的顺序

事件: orderchanged (id, new_order, old_order)

触发:变更源的Z顺序的时候

  • id String - 更改了z顺序的屏幕或窗口的媒体ID
  • new_order Integer - 新的z顺序
  • old_order Integer - 旧的z顺序

事件: namechanged (id, name)

触发:变更源的名称(如窗口更改了标题时)的时候

  • id String - 更改了名称的屏幕或窗口的媒体ID
  • name String - 屏幕或窗口的新名称

事件: thumbnailchanged (id, thumbnail)

触发:变更源的缩略图的时候

  • id String - 更新了缩略图的屏幕或窗口的媒体ID
  • thumbnail String - 缩略图png的base64编码