Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Can';无法理解ElectronJS中WebContent中的“sendInputEvent”_Javascript_Node.js_Electron - Fatal编程技术网

Javascript Can';无法理解ElectronJS中WebContent中的“sendInputEvent”

Javascript Can';无法理解ElectronJS中WebContent中的“sendInputEvent”,javascript,node.js,electron,Javascript,Node.js,Electron,在Gmail中,compose的快捷方式是c,我使用forcedWindow.webContents.sendInputEvent({type:'keyDown',keyCode:'c')要调用功能compose,但它不起作用,我应该添加keyUp和char,然后它就会起作用 forcedWindow.webContents.sendInputEvent({type: 'keyDown', keyCode: 'c'}); forcedWindow.webContents.sendInputEve

在Gmail中,
compose
的快捷方式是
c
,我使用
forcedWindow.webContents.sendInputEvent({type:'keyDown',keyCode:'c')
要调用功能
compose
,但它不起作用,我应该添加
keyUp
char
,然后它就会起作用

forcedWindow.webContents.sendInputEvent({type: 'keyDown', keyCode: 'c'});
forcedWindow.webContents.sendInputEvent({type: 'char', keyCode: 'c'});
forcedWindow.webContents.sendInputEvent({type: 'keyUp', keyCode: 'c'});
以下是我的问题

  • char
    代表什么

  • 如果我调用
    转到任务
    快捷方式
    g+k
    ,我应该如何更新代码

  • 谢谢

    更新:这里是完整的代码

     {
    label: 'Edit',
    submenu: [
      {
        label: 'Compose',
        accelerator: 'CmdOrCtrl+N',
        click(menuItem, forcedWindow, options) {
          if (forcedWindow) {
            forcedWindow.webContents.sendInputEvent({type: 'keyDown', keyCode: 'c'});
            forcedWindow.webContents.sendInputEvent({type: 'char', keyCode: 'c'});
            forcedWindow.webContents.sendInputEvent({type: 'keyUp', keyCode: 'c'});
          }
        }
      }
     ]
    }
    
    如果我像这样更改代码

    {
    label: 'Edit',
    submenu: [
      {
        label: 'Compose',
        accelerator: 'CmdOrCtrl+N',
        click(menuItem, forcedWindow, options) {
          if (forcedWindow) {
            forcedWindow.webContents.sendInputEvent({type: 'keyDown', keyCode: 'c'});
          }
        }
      }
     ]
    }
    
    {
    label: 'Edit',
    submenu: [
      {
        label: 'Compose',
        accelerator: 'CmdOrCtrl+N',
        click(menuItem, forcedWindow, options) {
          if (forcedWindow) {
            forcedWindow.webContents.sendInputEvent({type: 'char', keyCode: 'c'});
          }
        }
      }
     ]
    }
    
    {
    label: 'Edit',
    submenu: [
      {
        label: 'Compose',
        accelerator: 'CmdOrCtrl+N',
        click(menuItem, forcedWindow, options) {
          if (forcedWindow) {
            forcedWindow.webContents.sendInputEvent({type: 'keyUp', keyCode: 'c'});
          }
        }
      }
     ]
    }
    
    还是像这样

    {
    label: 'Edit',
    submenu: [
      {
        label: 'Compose',
        accelerator: 'CmdOrCtrl+N',
        click(menuItem, forcedWindow, options) {
          if (forcedWindow) {
            forcedWindow.webContents.sendInputEvent({type: 'keyDown', keyCode: 'c'});
          }
        }
      }
     ]
    }
    
    {
    label: 'Edit',
    submenu: [
      {
        label: 'Compose',
        accelerator: 'CmdOrCtrl+N',
        click(menuItem, forcedWindow, options) {
          if (forcedWindow) {
            forcedWindow.webContents.sendInputEvent({type: 'char', keyCode: 'c'});
          }
        }
      }
     ]
    }
    
    {
    label: 'Edit',
    submenu: [
      {
        label: 'Compose',
        accelerator: 'CmdOrCtrl+N',
        click(menuItem, forcedWindow, options) {
          if (forcedWindow) {
            forcedWindow.webContents.sendInputEvent({type: 'keyUp', keyCode: 'c'});
          }
        }
      }
     ]
    }
    
    还是像这样

    {
    label: 'Edit',
    submenu: [
      {
        label: 'Compose',
        accelerator: 'CmdOrCtrl+N',
        click(menuItem, forcedWindow, options) {
          if (forcedWindow) {
            forcedWindow.webContents.sendInputEvent({type: 'keyDown', keyCode: 'c'});
          }
        }
      }
     ]
    }
    
    {
    label: 'Edit',
    submenu: [
      {
        label: 'Compose',
        accelerator: 'CmdOrCtrl+N',
        click(menuItem, forcedWindow, options) {
          if (forcedWindow) {
            forcedWindow.webContents.sendInputEvent({type: 'char', keyCode: 'c'});
          }
        }
      }
     ]
    }
    
    {
    label: 'Edit',
    submenu: [
      {
        label: 'Compose',
        accelerator: 'CmdOrCtrl+N',
        click(menuItem, forcedWindow, options) {
          if (forcedWindow) {
            forcedWindow.webContents.sendInputEvent({type: 'keyUp', keyCode: 'c'});
          }
        }
      }
     ]
    }
    

    它们都不起作用,为什么?

    我认为你的思路是对的,但是在for
    sendInputEvent
    中,它说
    keyCode
    需要是一个有效的加速键

    从文档中:

    keyCode
    String(必需)-将作为键盘事件发送的字符。应仅使用加速器中的有效钥匙代码

    如果你看这些字母,上面写着字母必须大写

    因此,代码中的
    c
    的大写形式如下:

    forcedWindow.webContents.sendInputEvent({type: 'keyDown', keyCode: 'C'});
    


    从Electron手动发送时,我们可以在HTML页面上发出以下事件:

    • keydown
      :发送
      keydown
    • keypress
      :发送
      keyDown+char
    • keyup
      :发送
      keyup
    char
    事件,表示所按下的键包含字符值,以便通常与匹配

    当一个键产生一个字符值时,将触发keypress事件 被按下。生成字符值的键的示例包括 字母、数字和标点符号键。不允许使用的键的示例 通过修改键(如Alt、Shift、Ctrl、, 或元

    当按键盘上的字母键时,它会立即产生
    keydown
    keypress
    事件,因此从网站上收听
    keypress
    事件是合理的(Gmail似乎就是这么做的)

    要手动激活这些侦听器,至少应发送
    keyDown+char
    。这里有一个你的例子

    const{app,BrowserWindow}=require('electron'))
    app.one('ready',()=>{
    const win=新浏览器窗口()
    win.loadURL('https://gmail.com')
    win.webContents.once('did-finish-load',()=>{
    //谱写
    设置超时(()=>{
    console.log('compose…'))
    win.webContents.sendInputEvent({type:'keyDown',keyCode:'c'})
    win.webContents.sendInputEvent({type:'char',keyCode:'c'})
    }, 1000)
    //取消撰写
    设置超时(()=>{
    console.log('cancel…')
    win.webContents.sendInputEvent({type:'keyDown',keyCode:'escape'})
    win.webContents.sendInputEvent({type:'char',keyCode:'escape'})
    }, 2000)
    //执行任务
    设置超时(()=>{
    console.log('转到任务…')
    win.webContents.sendInputEvent({type:'keyDown',keyCode:'g'})
    win.webContents.sendInputEvent({type:'char',keyCode:'g'})
    win.webContents.sendInputEvent({type:'keyDown',keyCode:'k'})
    win.webContents.sendInputEvent({type:'char',keyCode:'k'})
    }, 3000)
    })
    })
    
    为确保完整性,如果要避免在以后的每个
    char
    中发出
    keypress
    ,则应在每次
    keypup+char
    后发送
    s。但这似乎是Gmail所能听到的最低要求



    相关的铬代码,如果你感兴趣的话:

    谢谢,但让我明确一点,小写的
    c
    是Gmail中的快捷方式,而不是在electronjs中,我使用
    WebContent.sendInputEvent
    要将
    c
    发送到Gmail Webview,请在更新中查看我的完整代码。