V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
madaosan
V2EX  ›  Python

windows 下判断一个进程是否为前台进程?

  •  
  •   madaosan · 2018-11-11 15:28:29 +08:00 · 3836 次点击
    这是一个创建于 2202 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题 想用 python 判断一个进程是前台进程还是后台进程但是不知道怎么做 求各位大佬给个思路

    11 条回复    2018-11-11 19:38:56 +08:00
    geelaw
        1
    geelaw  
       2018-11-11 15:47:48 +08:00 via iPhone   ❤️ 1
    不要问 X/Y 问题,从本来的问题开始问,并告诉我们你是如何想到需要判断进程是不是“前台”的。
    madaosan
        2
    madaosan  
    OP
       2018-11-11 16:12:18 +08:00
    @geelaw 我写了一个脚本会定时弹窗 但是不希望我打开某些应用时也弹窗 虽然可以通过遍历所有的进程来查看对应的进程是否存在 但是我觉得每次遍历所有的进程实在是太麻烦了 所以我就想到能不能根据进程是否为前台进程来减少遍历的次数呢
    ysc3839
        3
    ysc3839  
       2018-11-11 16:30:52 +08:00 via Android
    我觉得遍历所有进程没什么问题,为什么说太麻烦?
    geelaw
        4
    geelaw  
       2018-11-11 16:44:22 +08:00   ❤️ 2
    @madaosan #2 听起来你的“坏方案”是:遍历所有进程,查看它是否符合条件。

    “好方案”是:遍历所有“前台进程”,查看它是否符合条件。

    然而你似乎没有提出如何取出所有的“前台进程”,你的问题的答案(如果存在)只能帮你如此提取前台进程:遍历所有进程,并丢掉不是“前台”的。如果你的“条件”不是很复杂,是否过滤“前台”似乎没有什么改善。

    Windows 自己并不记录一个进程是不是“前台”(你可以发现我一直给“前台”打引号,因为这不是 Windows 固有的概念,是 app 自己想象的概念),所以过滤是否“前台”总是要查看进程的。如果你是根据进程名字过滤,那么你大可不必考虑这么复杂的事情。
    madaosan
        5
    madaosan  
    OP
       2018-11-11 16:52:22 +08:00
    @ysc3839 因为实际使用时前台的进程的数量常常比后台进程的数量要少得多 所以如果能只遍历前台进程的话就能大大减少遍历的次数 虽然对现在的计算机的性能来说减少的这几次遍历并不算什么 但是我还是希望能够采取一种更高效的遍历方式 同时加深自己的 windows 进程的理解 这也算是一种对自己编程能力的提升吧
    madaosan
        6
    madaosan  
    OP
       2018-11-11 16:58:50 +08:00
    @geelaw
    > Windows 自己并不记录一个进程是不是“前台”

    真的是一语惊醒梦中人啊 感谢 我懂了 看样子是我的牛角尖钻错位置了
    pwrliang
        7
    pwrliang  
       2018-11-11 17:12:24 +08:00 via Android
    Windows 提供获取当前活跃窗口的 API,能获取 PID。或者你调用 Windows API 枚举所有带窗口的进程…
    madaosan
        8
    madaosan  
    OP
       2018-11-11 17:27:08 +08:00
    @pwrliang 嗯 刚刚看完 geelaw 大佬的回复我就想到了 所谓 windows 下的“前台进程”其实就是带窗口的进程而已..
    annoy1309
        9
    annoy1309  
       2018-11-11 18:27:35 +08:00
    我不是 win 软件开发者, [不是杠] 好奇一下楼主是怎么定义 win 下面 [前台进程] 的?对 win 开发不熟悉
    线程优先级判断? UMS 判断?
    比如我一个软件,我大量运算在后台,但是我会在屏幕上有个 1px 的像素表示运算结果(或者有个无关紧要的程序),这算是前台进程吗?
    还是 win 有一种规则判断?
    Wicked
        10
    Wicked  
       2018-11-11 19:28:14 +08:00 via iPhone
    你还是要遍历进程,然后获取它们的窗口句柄,再通过句柄查询窗口状态,过滤掉最小化的窗口…
    stephen9357
        11
    stephen9357  
       2018-11-11 19:38:56 +08:00
    Windows 没有前台进程的概念,你可以尝试遍历进程,也可以遍历窗口来解决你的问题。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2944 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 14:25 · PVG 22:25 · LAX 06:25 · JFK 09:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.