使用Python检测Windows应用启动并触发程序运行的实现方法
可行性结论
这个需求完全可实现,不需要修改目标应用的原有代码,依托Windows提供的系统级进程感知能力就能完成触发逻辑。
具体实现方案
你可以根据自己的场景选下面三种方案:
方案1:WMI轮询监控(实现门槛最低)
核心逻辑是定时遍历系统当前运行的所有进程,匹配到目标应用的进程名、且是第一次检测到该进程时,就执行你写好的Python逻辑。
先安装依赖库:pip install wmi pywin32
参考实现代码:import wmi import time # 替换成你要监控的目标程序进程名,比如微信是WeChat.exe,记事本是notepad.exe TARGET_PROCESS_NAME = "notepad.exe" # 存已经触发过逻辑的进程ID,避免同一个进程运行期间重复触发 triggered_pid_set = set() wmi_conn = wmi.WMI() print(f"监控已启动,等待{TARGET_PROCESS_NAME}启动...") while True: # 筛选出当前运行的所有目标进程 for proc in wmi_conn.Win32_Process(name=TARGET_PROCESS_NAME): pid = proc.ProcessId if pid not in triggered_pid_set: triggered_pid_set.add(pid) # 这里替换成你自己的Python业务逻辑 print(f"检测到目标程序启动,进程ID:{pid},开始执行自定义逻辑") # 轮询间隔建议设1-2秒,平衡响应速度和资源占用 time.sleep(1)这个方案的优点是代码量小、调试简单、普通用户权限就能跑,缺点是存在1-2秒的检测延迟,适合对响应速度要求不高的个人自用场景。
方案2:WMI事件订阅(实时触发,无轮询开销)
核心逻辑是直接向Windows WMI服务注册进程创建事件的监听回调,系统在新进程启动的瞬间会主动推送通知,不需要定时扫描进程列表,响应延迟在毫秒级。
参考实现代码:import wmi import pythoncom TARGET_PROCESS_NAME = "notepad.exe" def process_start_callback(event): if event.NewEvent.ProcessName == TARGET_PROCESS_NAME: pid = event.NewEvent.ProcessID # 这里替换成你自己的Python业务逻辑 print(f"实时检测到目标程序启动,进程ID:{pid},开始执行自定义逻辑") if __name__ == "__main__": pythoncom.CoInitialize() wmi_conn = wmi.WMI() # 注册进程启动事件监听器 proc_watcher = wmi_conn.Win32_ProcessStartTrace.watch_for() proc_watcher.on_created = process_start_callback print(f"实时监控已启动,等待{TARGET_PROCESS_NAME}启动...") # 阻塞等待系统事件 while True: pythoncom.PumpWaitingMessages()注意这个方案需要用管理员权限运行脚本,优点是实时性好、没有轮询的资源浪费,适合需要快速响应的场景。
方案3:IFEO注册表劫持(无需后台常驻进程)
核心逻辑是通过Windows内置的镜像文件执行选项配置,让系统启动目标程序前先拉起你写的程序,不需要提前跑监控进程。
操作步骤:- 用PyInstaller把你的Python脚本打包成独立exe文件,命令参考:
pyinstaller -F your_script.py - 打开注册表编辑器,定位到路径
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options - 在该路径下新建项,名称和目标程序的进程名完全一致,比如
notepad.exe - 选中新建的项,在右侧窗口新建字符串值,名称设为
Debugger,值填你打包好的exe文件的完整绝对路径
注意:这个方案会直接拦截目标程序的启动流程,你的逻辑执行完如果需要正常打开目标应用,需要主动加代码拉起原目标程序;另外修改IFEO属于敏感操作,大概率会被安全软件告警拦截,仅适合完全可控的个人设备使用。
- 用PyInstaller把你的Python脚本打包成独立exe文件,命令参考:
部署提示
- 如果用前两种监控方案,需要让监控脚本开机自启:可以把脚本的快捷方式放到当前用户启动文件夹(路径
%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup),也可以注册成Windows服务实现后台无窗口运行。 - 不想运行时弹出黑色控制台窗口的话,可以把脚本后缀改成
.pyw,或者打包exe时选择无控制台模式。 - 如果怕同名进程误触发,可以在检测到进程后,进一步读取进程的可执行文件完整路径做二次校验,确认是你要监控的目标程序再执行逻辑。
内容的提问来源于stack exchange,提问作者user18465514
相关产品推荐
相关产品推荐

