Windows 10下如何识别程序处理的URL来自哪个调用应用?
获取触发链接的源应用并实现智能浏览器跳转
完全可以实现!你可以通过获取父进程信息来确定触发链接的源应用,结合链接规则就能自动在不同浏览器/配置文件打开链接,具体方法如下:
获取源应用:通过父进程查询
你的Python程序被调用时,自身进程的父进程就是触发它的程序(或中间进程),用psutil库就能轻松拿到父进程名称:- 先安装psutil:
pip install psutil - 在代码里加这段逻辑:
import psutil import os def get_source_app(): current_pid = os.getpid() parent_pid = psutil.Process(current_pid).ppid() try: return psutil.Process(parent_pid).name() except (psutil.NoSuchProcess, psutil.AccessDenied): return "未知应用" # 调用后就能拿到触发应用的进程名,比如Discord.exe、Steam.exe source_app = get_source_app()
要是遇到explorer.exe这类系统中间进程,可以再遍历上层进程树,找到真正的触发应用。
- 先安装psutil:
实现智能跳转:结合链接和源应用判断
拿到链接和源应用后,写判断逻辑调用对应浏览器就行,用subprocess启动浏览器进程:import subprocess def open_url(url, browser_cmd): # browser_cmd是浏览器路径,带启动参数的话直接加进去,比如Chrome指定配置文件 subprocess.Popen(browser_cmd + [url]) # 示例判断逻辑 target_url = "命令行传入的链接参数" source_app = get_source_app() if "app.slack.com" in target_url: # 工作浏览器,比如带特定配置文件的Chrome open_url(target_url, ["C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe", "--profile-directory=Work"]) elif source_app == "Steam.exe": # 测试浏览器路径 open_url(target_url, ["C:\\Path\\To\\TestBrowser\\browser.exe"]) else: # 常规默认浏览器 open_url(target_url, ["C:\\Path\\To\\DefaultBrowser\\browser.exe"])小提示
- 不同浏览器的启动参数不一样,比如Firefox用
-P "ProfileName"指定配置文件,提前查好对应参数就行。 - 处理异常情况,比如浏览器路径不存在、权限不够,避免程序崩溃。
- 不同浏览器的启动参数不一样,比如Firefox用
内容的提问来源于stack exchange,提问作者wolfinabox
相关产品推荐
相关产品推荐

