首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >电子js在desktopCapture外使用main.js

电子js在desktopCapture外使用main.js
EN

Stack Overflow用户
提问于 2022-05-29 13:21:15
回答 1查看 551关注 0票数 0

我有一个应用程序,我需要捕捉按钮点击桌面。所有关于YouTube的相关教程都有1-2年的历史.desktopCapturer模块仅在主组件中可用,我不知道如何使用它来捕获按钮单击并开始录制。正如我之前听说的,desktopCapturer模块在呈现组件中也是可用的,但现在它只在主组件上可用。

EN

回答 1

Stack Overflow用户

发布于 2022-05-30 09:25:21

看看这个:https://www.electronjs.org/docs/latest/api/desktop-capturer

您可以通过将ipc消息从呈现程序进程(使用调用/异步发送和事件)发送到主进程来触发桌面捕获。

下面的示例将捕获电子应用程序窗口:

您的主要流程中的

代码语言:javascript
复制
ipcMain.handle('get-sources', () => {
 return desktopCapturer.getSources({ types: ['window', 'screen'] }).then(async sources => {
   for (const source of sources) {
     if (source.name === 'YOUR ELECTRON APP NAME' && mainWindow) {
       return source.id;
     }
   }
 })
});

web应用程序中的

  1. (呈现程序):

代码语言:javascript
复制
  const handleStream = (stream: any) => {
      const video = document.querySelector('video')
      video!.srcObject = stream
      video!.onloadedmetadata = () => video!.play()
    }

    const handleError = (e: any) => {
      console.log(e)
    }

    const getResource = async () => {
      const sourceId = await window.electron.getSources();
      try {
        const stream = await navigator.mediaDevices.getUserMedia({
          audio: false,
          video: {
            mandatory: {
              chromeMediaSource: 'desktop',
              chromeMediaSourceId: sourceId,
              minWidth: 1280,
              maxWidth: 1280,
              minHeight: 720,
              maxHeight: 720
            }
          }
        })
        handleStream(stream)
      } catch (e) {
        handleError(e)
      }
    }

    getResource();

  1. 确保您的DOM:

中有一个视频html标记

代码语言:javascript
复制
      <video width="750" height="500" controls >
        <source src="" type="video/mp4"/>
      </video>

  1. 不要忘记在你的电子和网络应用程序中更新你的预加载文件。例如:

代码语言:javascript
复制
declare global {
  interface Window {
    electron: {
      getSources: () => Promise<string>,
    };
  }
}

和电子

代码语言:javascript
复制
contextBridge.exposeInMainWorld('electron', {
  getSources: () => ipcRenderer.invoke('get-sources'),
});
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72424013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档