Electron——如何检测应用程序的为响应状态
2021/10/13 11:44:24
本文主要是介绍Electron——如何检测应用程序的为响应状态,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
前言
我们如何通过Electron来检测一些应用程序的状态呢,如:未响应;
- 文档地址
EnumWindows
IsHungAppWindow
GetWindowThreadProcessId
NodeJs——如何获取Windows电脑指定应用进程信息
内容
获取指定应用程序PID
通过exec
执行cmd命令查询指定应用的PID,并通过electron-store
存储获取到的PID,可参考NodeJs——如何获取Windows电脑指定应用进程信息;
/** * 获取指定应用程序的PID | 只考虑win和linux * @param exeName */ export function cmdFindPidList (exeName, callbackFun) { const cmd = process.platform === 'win32' ? `tasklist -V|findstr "${exeName}" ` : `ps aux | grep ${exeName}`; let pids = []; exec(cmd, (err, stdout, stderr) => { if (err) { callbackFun(pids); return } stdout.split('\n').filter(item => { const p = item.trim().split(/\s+/) // p[0] 应用程序名称 p[1] 应用程序PID if (p[0] && p[1]) { pids.push(p[1]); } }) callbackFun(pids); }) } // 调用 cmdFindPidList('App.exe', (pids) => { // 封装的`electron-store`存储 setStore('AppPids', pids) })
调用user32.dll方法
const User32 = ffi.Library('user32.dll', { EnumWindows: ['bool', ['pointer', 'long']], GetWindowThreadProcessId: ['int', ['long', 'pointer']], IsHungAppWindow: ['bool', ['long']] }) const EnumWindowsProc = ffi.Callback('bool', ['long', 'int32'], function (hwnd, lParam) { let pids = getStore('AppPids') let pid = Buffer.alloc(255) let threadId = User32.GetWindowThreadProcessId(hwnd, pid) if (pids.includes(pid) && User32.IsHungAppWindow(hwnd)) { // TODO 检测到程序窗口未响应处理方法 } return true }) // 调用 User32.EnumWindows(EnumWindowsProc, 0)
这篇关于Electron——如何检测应用程序的为响应状态的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享