C++打开默认浏览器

编程知识 更新时间:2023-04-22 11:40:36

转载两篇方法,一个是Win7,一个是WinXP, 如果哪位实验了Vista 和 Win8,请告知结果~

XP:

    HKEY hkRoot,hSubKey; //定义注册表根关键字及子关键字
    char ValueName[256];
    unsigned char DataValue[256];
    unsigned long cbValueName=256;
    unsigned long cbDataValue=256;
    char ShellChar[256]; //定义命令行
    DWORD dwType;

    //打开注册表根关键字
    if(RegOpenKey(HKEY_CLASSES_ROOT,NULL,&hkRoot)==ERROR_SUCCESS)
    {
    //打开子关键字
        if(RegOpenKeyEx(hkRoot,
        "htmlfile//shell//open//command",
                    0,
                    KEY_ALL_ACCESS,
                    &hSubKey)==ERROR_SUCCESS)
        {
            //读取注册表,获取默认浏览器的命令行     
            RegEnumValue(hSubKey, 
                0,
                        ValueName,
                        &cbValueName,
                        NULL,
                        &dwType,
                        DataValue,
                        &cbDataValue);
            // 调用参数(主页地址)赋值
            strcpy(ShellChar,(char *)DataValue);
            strcat(ShellChar," www.neaase/~xiaohui");
            // 启动浏览器
            WinExec(ShellChar,SW_SHOW);

        }
        else
            MessageBox("WEB浏览器打开错误!","错误",MB_OK);
    }
    else
        MessageBox("WEB浏览器打开错误!","错误",MB_OK);
    //关闭注册表
    RegCloseKey(hSubKey);
    RegCloseKey(hkRoot);


Win7:

void LaunchDefaultBrowser()
{
	HKEY hDefBrowserPos = NULL;
	wstring wstrDefBrowserPath = L"iexplore.exe";
	WCHAR wszBuffer[MAX_PATH + 1] = {0};
	DWORD dwDataSize = sizeof(wszBuffer);
	if (ERROR_SUCCESS == ::RegGetValueW(
		HKEY_CURRENT_USER,
		L"Software\\Microsoft\\Windows\\Shell\\Associations\\UrlAssociations\\Ftp\\UserChoice\\",
		L"Progid",
		RRF_RT_REG_SZ,
		0,
		wszBuffer,
		&dwDataSize
		))
	{
		wstring wstrDefBrowserPos = wszBuffer;
		wstrDefBrowserPos += L"\\shell\\open\\command\\";
		dwDataSize = sizeof(wszBuffer);
		if (ERROR_SUCCESS == ::RegGetValueW(
			HKEY_CLASSES_ROOT,
			wstrDefBrowserPos.c_str(),
			NULL,
			RRF_RT_REG_SZ,
			0,
			wszBuffer,
			&dwDataSize
			))
		{
			// 解出exe 路径.
			wstrDefBrowserPath = wszBuffer;
			wstring::size_type leftQuotation = wstrDefBrowserPath.find(L'"');
			if (leftQuotation != wstring::npos)
			{
				wstring::size_type rightQuotation = wstrDefBrowserPath.find(L'"', leftQuotation + 1);
				if (rightQuotation != wstring::npos)
				{
					wstrDefBrowserPath.assign(
						wstrDefBrowserPath.begin() + leftQuotation + 1,
						wstrDefBrowserPath.begin() + rightQuotation
						);
				}
			}
		}
	}
	::ShellExecuteW( NULL, L"open",	wstrDefBrowserPath.c_str(),	NULL, NULL,	SW_NORMAL);
}



更多推荐

C++打开默认浏览器

本文发布于:2023-04-17 03:16:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/3d7a541d52155fadb8476b4b842eddfd.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:浏览器

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!

  • 82373文章数
  • 6870阅读数
  • 0评论数