mirror of
https://wget.la/https://github.com/Wxw-Gu/WechatExplorer
synced 2026-08-17 19:47:08 +08:00
42 lines
1.2 KiB
TypeScript
42 lines
1.2 KiB
TypeScript
import { execFile } from 'child_process'
|
|
import { promisify } from 'util'
|
|
|
|
const execFileAsync = promisify(execFile)
|
|
const WINDOWS_WECHAT_IMAGES = ['Weixin.exe', 'WeChat.exe']
|
|
|
|
export async function isWindowsWechatRunning(): Promise<boolean> {
|
|
if (process.platform !== 'win32') return false
|
|
|
|
for (const imageName of WINDOWS_WECHAT_IMAGES) {
|
|
try {
|
|
const { stdout } = await execFileAsync(
|
|
'tasklist',
|
|
['/FI', `IMAGENAME eq ${imageName}`, '/FO', 'CSV', '/NH'],
|
|
{ windowsHide: true }
|
|
)
|
|
if (stdout.toLowerCase().includes(`"${imageName.toLowerCase()}"`)) return true
|
|
} catch {
|
|
// Try the other supported WeChat executable name.
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
export async function isWechatRunning(): Promise<boolean> {
|
|
if (process.platform === 'win32') return isWindowsWechatRunning()
|
|
if (process.platform !== 'darwin') return false
|
|
|
|
for (const args of [
|
|
['-x', 'WeChat'],
|
|
['-f', 'WeChat.app/Contents/MacOS/WeChat']
|
|
]) {
|
|
try {
|
|
const { stdout } = await execFileAsync('/usr/bin/pgrep', args)
|
|
if (stdout.trim()) return true
|
|
} catch {
|
|
// Try the next macOS process lookup strategy.
|
|
}
|
|
}
|
|
return false
|
|
}
|