之前有写过一个 《微信快捷键显隐窗口的》,最近又让我发现了 PWA 窗口的特殊之处,对于热爱快捷键和PWA的我来说,必须让它们牵上红线。以后就请叫我月老吧~,老规矩,我还是只会Nodejs 的前端切图仔,shell 版本请各位自己转译我就上个 Nodejs 脚本:
const { execSync } = require('child_process'); (async () => { let id = process.argv[2]; let str = execSync('wmctrl -l -x').toString(); let windows = str.split("\n").filter(item => !!item).map(item => { let itemMatch = [...item.match(/[\S]+/g)]; return { windowId: itemMatch[0], desktopId: itemMatch[1], windowClass: itemMatch[2], hostname: itemMatch[3], windowTitle: itemMatch.splice(4).join(" ") }; }); let acitveWindow = windows.find(item => item.windowClass === `crx_${id}.Google-chrome`); if (acitveWindow) { let activeWindowId = await getActivateWindow(); if (parseInt(activeWindowId, 10) === parseInt(acitveWindow.windowId, 16)) { await deactivateWindow(activeWindowId); } else { await activateWindow(parseInt(acitveWindow.windowId, 16)); } } else { if (id) { execSync(`/opt/apps/cn.google.chrome-pre/files/google/chrome/google-chrome "--profile-directory=Profile 1" --app-id=${id}`); } } })(); async function activateWindow (id) { execSync(`xdotool windowactivate ${id}`); } async function deactivateWindow (id) { execSync(`xdotool windowminimize ${id}`); } async function getActivateWindow () { return execSync(`xdotool getactivewindow`).toString().replace('\n', ''); }
这次因为要获取 window-class 所以引入了 wmctrl
window-class
wmctrl
里面 Chrome 启动 PWA 的命令使用了绝对地址,这个可能不通用,请各位遇到启动不了的问题时,去 chrome 的 .desktop 中找找你自己电脑上的启动命令
假设你的 node 有一个 全局的快捷连接 在 /usr/bin/node 这个位置,上面的js 文件在 /home/user/chromeapp.js
node
/usr/bin/node
/home/user/chromeapp.js
/usr/bin/node ~/chromeapp.js
快捷键绑定请参考上一篇 [经验分享] 【V23】微信Linux 版本快捷键显隐窗口 (2025-3-14 更新)
No replies yet
Featured Collection
Popular Ranking
Popular Events
之前有写过一个 《微信快捷键显隐窗口的》,最近又让我发现了 PWA 窗口的特殊之处,对于热爱快捷键和PWA的我来说,必须让它们牵上红线。以后就请叫我月老吧~,老规矩,我还是只会Nodejs 的前端切图仔,shell 版本请各位自己转译我就上个 Nodejs 脚本:
这次因为要获取
window-class所以引入了wmctrl假设你的
node有一个 全局的快捷连接 在/usr/bin/node这个位置,上面的js 文件在/home/user/chromeapp.js快捷键绑定请参考上一篇 [经验分享] 【V23】微信Linux 版本快捷键显隐窗口 (2025-3-14 更新)