Windows编程—获取操作系统默认浏览器路径

文章目录

前言

笔者有需求,需要获取当前的默认浏览器的路径。网上的其他方法笔者没有去试。这里笔者采用的方式在win10 下是可行的,win7、winXp 没有测试。笔者使用 QQ电脑管家—>工具箱—>上网—>浏览器保护 进行默认浏览器设置 是不成功的。所以还是到 Win10 设置—>默认应用—>Web浏览器 进行设置是可行。

在这里插入图片描述

分析

笔者这里那 QQ浏览器和Chrome浏览器 进行测试。

打开http或者https网站链接时的默认浏览器是在下面的注册表项中进行关联的

计算机\HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http
计算机\HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\https

一般切换默认浏览器后这2个都是一样的,当然你也可以手动改成不一样的。

具体默认浏览器的设置是在计算机\HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice 项下的ProgId键对应的值中。

在这里插入图片描述

在这里插入图片描述

ProgId是个啥呢?全称应该为program identifier程序名称信息。

QQBrowser默认是安装当前机器下的,所以它的ProgId在HKEY_LOCAL_MACHINE
计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Classes\QQBrowser.Protocol

在这里插入图片描述

Chrome默认是安装在当前用户下的,所以它的ProgId在HKEY_CURRENT_USER
计算机\HKEY_CURRENT_USER\Software\Classes\ChromeHTML.WVRE7ETNMLLK7SQAQPVF6OOAKA

在这里插入图片描述

所以我们通过注册表信息能得到当前默认浏览器的全路径。

代码

代码很简单,就是注册表的读取,代码笔者使用的MFC那一套。

CString CUtility::GetDefaultBrowser()
{
	// 计算机\HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http
	CString browserPath = _T("");
	CString browserCmd = _T("");
	CRegKey reg;
	if (reg.Open(HKEY_CURRENT_USER,
		_T("Software\\Microsoft\\Windows\\Shell\\Associations\\UrlAssociations\\http\\UserChoice"),
		KEY_READ) == ERROR_SUCCESS)
	{
		TCHAR szValue[512] = { 0 };
		DWORD dwSize = 512;
		if (reg.QueryStringValue(_T("ProgId"),szValue,&dwSize) == ERROR_SUCCESS)
		{
			// 计算机\HKEY_LOCAL_MACHINE\Software\Classes\ 或者 计算机\HKEY_CURRENT_USER\Software\Classes\ 下
			CString ProgId = szValue;
			
			browserCmd.Format(_T("SOFTWARE\\Classes\\%s\\shell\\open\\command"),ProgId);
			reg.Close();
			TCHAR szValue2[512] = { 0 };
			DWORD dwSize2 = 512;
			if(reg.Open(HKEY_LOCAL_MACHINE,browserCmd,KEY_READ) == ERROR_SUCCESS)
			{
				if (reg.QueryStringValue(_T(""),szValue2,&dwSize2) == ERROR_SUCCESS)
				{
					browserCmd = szValue2;
				}
			}
			else if( reg.Open(HKEY_CURRENT_USER,browserCmd,KEY_READ) == ERROR_SUCCESS )
			{
				if (reg.QueryStringValue(_T(""),szValue2,&dwSize2) == ERROR_SUCCESS)
				{
					browserCmd = szValue2;
				}
			}
			
		}
	}

	if(!browserCmd.IsEmpty())
	{
		int index = browserCmd.ReverseFind(L'.');
		browserPath = browserCmd.Mid(1,index+3);
	}
	
	return browserPath;
}

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值