[Share Experiences] 【V23】Chrome PWA 应用 快捷键显隐窗口(2025-08-18)
Tofloor
poster avatar
NoahLiu
deepin
2025-08-18 14:42
Author

之前有写过一个 《微信快捷键显隐窗口的》,最近又让我发现了 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

里面 Chrome 启动 PWA 的命令使用了绝对地址,这个可能不通用,请各位遇到启动不了的问题时,去 chrome 的 .desktop 中找找你自己电脑上的启动命令

假设你的 node 有一个 全局的快捷连接 在 /usr/bin/node 这个位置,上面的js 文件在 /home/user/chromeapp.js

/usr/bin/node ~/chromeapp.js 

快捷键绑定请参考上一篇 [经验分享] 【V23】微信Linux 版本快捷键显隐窗口 (2025-3-14 更新)

Reply Favorite View the author
All Replies

No replies yet