You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何判断进程当前是否正被用户主动使用

记事本进程主动输入状态判断方案

psutil仅能获取进程的基础运行属性,无法判断进程和用户的交互状态,需要结合Windows平台的窗口、输入相关原生API实现需求,可行方案如下:

方案1:前台窗口聚焦检测(最常用)

核心逻辑:用户主动输入时,目标程序窗口必然是系统当前的前台聚焦窗口,仅需匹配前台窗口对应的进程是否为notepad即可完成初步判断

  • 依赖工具:Python环境下可使用pywin32库调用Windows API
  • 实现步骤:
    1. 调用win32gui.GetForegroundWindow()获取当前前台窗口的句柄
    2. 调用win32process.GetWindowThreadProcessId()获取该窗口关联的进程PID
    3. 用psutil匹配PID对应的进程名称是否为notepad.exe,匹配成功即可判定记事本处于前台可输入状态

方案2:输入事件关联检测(更精准)

如果需要排除“记事本挂在前台但用户未输入”的场景,可结合输入事件监听实现判断:

  • 依赖工具:pynput库监听全局键盘输入事件
  • 实现逻辑:每次监听到键盘按下事件时,执行一次方案1的前台进程匹配逻辑,如果匹配成功则判定为用户正在主动使用记事本输入

方案3:输入空闲时间检测

可通过Windows API获取系统最后一次用户输入的时间,结合前台进程匹配结果进一步缩小判断范围:

  • 调用win32api.GetLastInputInfo()获取系统最后输入时间,和当前时间做差值,差值小于你设定的阈值(比如1秒)且前台进程为notepad时,判定为活跃输入状态

简化实现示例代码

import psutil
import win32gui
import win32process
import time

def is_notepad_in_active_input():
    # 获取当前前台窗口句柄
    foreground_hwnd = win32gui.GetForegroundWindow()
    # 获取窗口对应的进程PID
    _, process_pid = win32process.GetWindowThreadProcessId(foreground_hwnd)
    try:
        target_process = psutil.Process(process_pid)
        if target_process.name().lower() == "notepad.exe":
            # 可在此处添加GetLastInputInfo的时间差判断逻辑,进一步提高准确率
            return True
    except psutil.NoSuchProcess:
        return False
    return False

# 测试:每秒轮询一次状态
if __name__ == "__main__":
    while True:
        if is_notepad_in_active_input():
            print("记事本处于用户主动输入状态")
        time.sleep(1)

注意事项

  • 上述所有方案仅适用于Windows平台,相关API为Windows系统专属
  • 如果需要判断的是UWP版本的记事本,需额外调整窗口匹配逻辑,适配UWP应用的窗口标识规则

内容的提问来源于stack exchange,提问作者Noob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 05:15:03