如何判断内存中的进程是否是用户正在使用的进程?

jixiang1983 2018-12-18 11:26:15
想写一个监控内存中进程的程序,希望对后台非用户使用的进程做一些处理,不知道如何识哪些进程是当前用户正在使用的?
...全文
666 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
蒋晟 2018-12-28
  • 打赏
  • 举报
回复
都跟你说了,这就是个巨坑。 比如用户表面上在用SQL Server Management Studio或者Visual Studio,实际上真正的任务(执行查询、编译代码等等)都是后台进程在做。你让界面变流畅,降低后台进程使用的资源(例如缓存大小)实际上是降低系统性能。再比如浏览器的界面进程并不做什么事情,页面渲染啥的都是后台进程在做,你去降低后台进程使用的资源是拖慢网页渲染速度。 要了解一个软件到底是前台进程还是后台进程在干活的话,你需要去反向工程这个软件。但是就算你现在人力无穷大,反向工程完了市面上所有软件(几万美金一份的软件也不例外),随便流行个新软件你就要去重新做兼容。更别提你敢动游戏的反作弊引擎进程的话,运营商分分钟封号给你看。你这需求的坑度深不可测,产品经理一定要你做的话,还是赶快跳槽算了。
jixiang1983 2018-12-28
  • 打赏
  • 举报
回复
引用 12 楼 蒋晟 的回复:
无法判断。”正在使用“这玩意没有个大家都同意的定义。 举几个简单的例子 IE每个标签页一个进程,那么非当前标签页的进程算不算用户正在使用?要说在使用吧,那个标签页的内容的确是不显示的。要是说没在使用吧,你去杀掉那个进程,用户是会生气的。 Chrome每个扩展一个进程,那么adblock这个扩展的进程算不算用户正在使用?要说在使用吧,还有个问题,你怎么知道哪个chrome.exe进程在跑adblock而不是其他用户暂时没用到的扩展,例如chrome remote desktop? 不知道你为什么有这个需求,“用户不需要”这玩意就是个巨坑,用户可能需要一个程序,但是并不知道这个程序具体需要些什么。有的时候程序作者都不知道自己的进程是不是依赖于其他的进程(比如在调用打印机/显卡驱动或者输入法的时候)。微软社区里有很多很多被清理软件坑到只能重做系统的用户。
最终需求就是希望优化系统资源分配(我们想做一个提升用户体验的软件,类似管家),把与用户当前所使用应用程序不相关的进程进行限制(如降低优先级等),减少其占有的资源,以便用户正在使用的程序运行时能更好地获取CPU等资源,运行更流畅。比如当用户使用浏览器时,我们的软件要对其他的应用程序进行限制。 请问大神,win10的任务管理器里的后台进程是如何界定的,或者如何读取微软给出的后台程序列表,在不能准确判断用户当前需要使用的进程的时候,对后台进程进行限制也是一个方案。
蒋晟 2018-12-28
  • 打赏
  • 举报
回复
无法判断。”正在使用“这玩意没有个大家都同意的定义。

举几个简单的例子

IE每个标签页一个进程,那么非当前标签页的进程算不算用户正在使用?要说在使用吧,那个标签页的内容的确是不显示的。要是说没在使用吧,你去杀掉那个进程,用户是会生气的。

Chrome每个扩展一个进程,那么adblock这个扩展的进程算不算用户正在使用?要说在使用吧,还有个问题,你怎么知道哪个chrome.exe进程在跑adblock而不是其他用户暂时没用到的扩展,例如chrome remote desktop?

不知道你为什么有这个需求,“用户不需要”这玩意就是个巨坑,用户可能需要一个程序,但是并不知道这个程序具体需要些什么。有的时候程序作者都不知道自己的进程是不是依赖于其他的进程(比如在调用打印机/显卡驱动或者输入法的时候)。微软社区里有很多很多被清理软件坑到只能重做系统的用户。
「已注销」 2018-12-27
  • 打赏
  • 举报
回复
引用 6 楼 jixiang1983 的回复:
win10的任务管理器下有一个后台进程列表,求问程序如果获取这些进程的ID或句柄?
引用 1 楼 jha334201553 的回复:
首先,人工怎么判断?
枚举窗口,然后IsWindowVisible判断是否可见,最后过滤几个系统的就可以了
zgl7903 2018-12-27
  • 打赏
  • 举报
回复
命令行下运行 tasklist 看看是否能满足需求
jixiang1983 2018-12-27
  • 打赏
  • 举报
回复
win10的任务管理器下有一个后台进程列表,求问程序如果获取这些进程的ID或句柄?
引用 1 楼 jha334201553 的回复:
首先,人工怎么判断?
「已注销」 2018-12-27
  • 打赏
  • 举报
回复
你用spy++对比就知道了。好了,再不懂我也帮不了你了
jixiang1983 2018-12-27
  • 打赏
  • 举报
回复
引用 8 楼 jha334201553 的回复:
引用 6 楼 jixiang1983 的回复:
win10的任务管理器下有一个后台进程列表,求问程序如果获取这些进程的ID或句柄? [quote=引用 1 楼 jha334201553 的回复:] 首先,人工怎么判断?
枚举窗口,然后IsWindowVisible判断是否可见,最后过滤几个系统的就可以了[/quote] 如何枚举窗口?用哪个函数? 另外这个IsWindowVisiable函数什么时候返回真? 我使用google浏览器打开多个页面,一个被(win10的任务管理器)认为是前台进程,其他的都被视作后台进程,在所有的页面都最小化时也是如此,这时候使用IsWindowsVisiable能准确判断吗?
jixiang1983 2018-12-27
  • 打赏
  • 举报
回复
tasklist 查到的是所有的进程,我想要找到后台进程,然后对他做些限制
引用 7 楼 zgl7903 的回复:
命令行下运行 tasklist 看看是否能满足需求
zgl7903 2018-12-18
  • 打赏
  • 举报
回复
「已注销」 2018-12-18
  • 打赏
  • 举报
回复
首先,人工怎么判断?
「已注销」 2018-12-18
  • 打赏
  • 举报
回复
用 GetWindowThreadProcessId 获取界面所在线程,然后判断这个线程是哪个进程的,然后,该干嘛干嘛
「已注销」 2018-12-18
  • 打赏
  • 举报
回复
那 GetForegroundWindow 、 GetFocus 不就完事??
jixiang1983 2018-12-18
  • 打赏
  • 举报
回复
引用 1 楼 jha334201553 的回复:
首先,人工怎么判断?
正在使用的就是焦点在这个页面上了,就像你正浏览网页,浏览器就是正在使用的,其他暂未使用的可看做后台非用户进程。

15,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧