Javascript Can';无法理解ElectronJS中WebContent中的“sendInputEvent”
在Gmail中,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
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,请在更新中查看我的完整代码。