AppleScriptでもいいですが、JXAだとワンライナーで完結していい感じです。
isAppRunning.js
const promisify = require("util").promisify;
const exec = require("child_process").exec;
const execp = promisify(exec);
const appName = "Slack";
(async () => {
const { stdout } = await execp(
`osascript -l JavaScript -e "Application('${appName}').running()"`
);
console.log({ stdout });
})();
注意点としては、返り値がBooleanっぽいけどStringだと言うことです。
上の書き方だと {stdout: 'true\n'}
のような感じになります。
返り値を return stdout === "true\n"
にして、Promise<boolean>
として扱うのがいいかもですね。
他にもいい方法があったらぜひ教えて下さい。
調べてもあんまり見つからないんですよね。
たぶんSwiftが使えればもっとつおくなれる。