如何在使用Python打开webppages时覆盖Windows 7中的默认浏览器选择

2024-10-03 15:21:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个在Windows上用Python 3.7.4编写的程序,可以在浏览器中打开网页。它显示默认浏览器,并允许用户更改要用于打开程序的浏览器

当使用this technique初始化程序时,会检测到默认浏览器:

from winreg import HKEY_CURRENT_USER, OpenKey, QueryValueEx

import webbroswer

reg_path = r'Software\Microsoft\Windows\Shell\Associations\UrlAssociations\https\UserChoice'
chrome_path = 'C:/Program Files (x86)/Google/Chrome/Application/chrome.exe %s'
firefox_path = 'C:/Program Files (x86)/Mozilla Firefox/firefox.exe %s'

with OpenKey(HKEY_CURRENT_USER, reg_path) as key:
    print(QueryValueEx(key, 'ProgId'))
    thedefaultbrowser = (QueryValueEx(key, 'ProgId'))
    thedefaultbrowser = (thedefaultbrowser[0])
    thedefaultbrowser = (thedefaultbrowser[0:2])
    if thedefaultbrowser == "Fi":
        browser_path = firefox_path
    if thedefaultbrowser == "Ch":
        browser_path = chrome_path

链接是这样打开的,作为程序后面发生的无限循环的一部分:

while True:

    # [lots of GUI code that isn't relevant]

    event = input()

    if event == 'pleasegetmealinknao':
        x=open("C:/folder/atextfilewithalinkinit.txt", "r")
        the_url1 = x.read()
        webbrowser.get(browser_path).open(the_url1)
        x.close()     

在同一循环中,可以接受用户的输入以更改浏览器类型:

    elif event == "Firefox":
        browser_path = firefox_path
        continue
    elif event == "Chrome":
        browser_path = chrome_path
        continue       

所以我可以用这个打开一个网页。然后我可以很好地更改浏览器类型,然后在新用户选择的浏览器中打开另一个网页,但-仅在Windows 10中

在Windows7中,Firefox和Chrome都能很好地协同工作,但只有在程序运行之前将Chrome设置为默认浏览器时才能运行。但是,如果在程序启动之前将Firefox设置为默认浏览器,只要我切换到Chrome,然后尝试打开Chrome中的任何内容,程序就会非常不安并停止运行。没有崩溃,没有错误消息或回溯,它只是完全冻结,需要硬重启。有时,我可以通过关闭刚刚打开的新浏览器窗口将程序从冻结状态中解救出来,但这当然违背了程序的目的

但是-如果我放弃所有这些花哨的业务,只接受默认浏览器,就像这样:

    if event == 'pleasegetmealinknao':
        x=open("C:/folder/atextfilewithalinkinit.txt", "r")
        the_url1 = x.read()
        webbrowser.open(the_url1)
        x.close()  

然后,无论系统默认浏览器是什么,无论是Firefox、Chrome、Internet Explorer还是其他任何浏览器,所选链接都将愉快地打开

那么,为什么会发生这种情况,我该如何解决?还是我必须埋葬我对浏览器的梦想

我的猜测是,这可能与Chrome检测到它不是默认浏览器并要求用户更改默认浏览器设置有关,这是有意义的。然而,问题是,如何使Python程序忽略这种行为。与此相关的弹出窗口并不总是出现

编辑:进一步的测试,有时Windows7的行为模式也发生在Windows10中。。。但似乎并非一直如此。这让我更加认为它与浏览器相关,而不是严格的操作系统相关,并且与要求默认状态的Chrome有很大关系,但我仍然不知道该怎么做


Tags: thepath用户程序browsereventif浏览器
1条回答
网友
1楼 · 发布于 2024-10-03 15:21:15

有一种更便宜、更容易实现的方法:使用剪辑。帆布clipRect()就足够了。你的解决方案消耗了大量的填充率。使用SRC_IN而不是DST_IN可以获得想要的效果。但要小心:它只能在透明位图或图层中工作。当您直接在屏幕上绘制时,目的地已经被窗口背景填充

相关问题 更多 >