98 lines
2.3 KiB
TypeScript
98 lines
2.3 KiB
TypeScript
import { app, BrowserWindow, globalShortcut } from "electron";
|
|
import { AppsMain } from "../app/main";
|
|
|
|
const eventListeners = {};
|
|
|
|
// 连续点击的快捷键
|
|
let continuousKeys = [];
|
|
const addKeyInput = (key: string, expire = 1000) => {
|
|
let now = Date.now();
|
|
continuousKeys.push({ key, expire: now + expire });
|
|
continuousKeys = continuousKeys.filter((item) => item.expire > now);
|
|
for (let i = continuousKeys.length - 1; i >= 0; i--) {
|
|
const key = continuousKeys
|
|
.filter((o, oIndex) => oIndex >= i)
|
|
.map((o) => o.key)
|
|
.join("|");
|
|
if (eventListeners[key]) {
|
|
eventListeners[key]();
|
|
break;
|
|
}
|
|
}
|
|
};
|
|
|
|
const addMultiKeyListener = (keys: string[], callback: Function) => {
|
|
if (!Array.isArray(keys)) {
|
|
keys = [keys];
|
|
}
|
|
const key = keys.join("|");
|
|
eventListeners[key] = callback;
|
|
};
|
|
|
|
const createKeyInputListener = (key: string) => {
|
|
return () => {
|
|
addKeyInput(key);
|
|
};
|
|
};
|
|
|
|
const keyMap = {
|
|
"CommandOrControl+Shift+H": createKeyInputListener(
|
|
"CommandOrControl+Shift+H",
|
|
),
|
|
};
|
|
|
|
const ready = () => {
|
|
register();
|
|
};
|
|
|
|
const destroy = () => {
|
|
globalShortcut.unregisterAll();
|
|
};
|
|
|
|
const register = () => {
|
|
globalShortcut.unregisterAll();
|
|
|
|
app.on("browser-window-focus", () => {
|
|
for (let key in keyMap) {
|
|
globalShortcut.register(key, keyMap[key]);
|
|
}
|
|
});
|
|
|
|
app.on("browser-window-blur", () => {
|
|
for (let key in keyMap) {
|
|
globalShortcut.unregister(key);
|
|
}
|
|
});
|
|
|
|
addMultiKeyListener(
|
|
[
|
|
"CommandOrControl+Shift+H",
|
|
"CommandOrControl+Shift+H",
|
|
"CommandOrControl+Shift+H",
|
|
],
|
|
() => {
|
|
let focusedWindow = BrowserWindow.getFocusedWindow();
|
|
if (focusedWindow) {
|
|
if (focusedWindow.webContents.isDevToolsOpened()) {
|
|
focusedWindow.webContents.closeDevTools();
|
|
} else {
|
|
focusedWindow.webContents.openDevTools({
|
|
mode: "detach",
|
|
activate: false,
|
|
title: "FocusedWindow",
|
|
});
|
|
}
|
|
}
|
|
},
|
|
);
|
|
};
|
|
|
|
export const KeysMain = {
|
|
register,
|
|
};
|
|
|
|
export default {
|
|
ready,
|
|
destroy,
|
|
};
|