最近有个需求,希望一次性可以打开多个网页,网址自由指定,这个需求的实现非常简单,使用基本的c++代码调用system函数即可,都不需要MFC相关的东西。
但是我实测一些工具后发现一个问题,当打开超过大约3个网址的时候,有可能调用失败,而尤其是当打开的是相同的网址,则即时你一次性只打开两个网址(相同),也会大概率被判定成一次调用,我猜想可能是接口函数进行了一定的去重处理。如果是相同的网页进行去重处理倒也没问题,但是不同的网址,也会有极大概率打开失败,这自然是我不想看到的,我经过测试,发现加入一定的延时处理,即可正常调用,目前实测8个网页一次性打开也没问题。
于是我自己编写了一个小工具,实现一次性打开多个网页。
下面是主要代码:
//author:autumoon
//联系邮箱:9506#163.com
//日期:2023-04-06
// batWebsites.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <iostream>
#include <thread>
#include "../../Common/often/StdStrFile.h"
int main()
{
//读取配置文件
_tstring stWebPath = L"urls.txt";
std::vector<_tstring> vUrls;
size_t nLineCount = CStdFile::ParseTXTFile(stWebPath, vUrls);
if (nLineCount <= 0 || nLineCount > 100)
{
CStdFile::SaveTXTLine(stWebPath, L"www.baidu.com");
system("start www.baidu.com");
return -1;
}
for (size_t i = 0; i < nLineCount; i++)
{
_tstring stCmd = L"start " + CStdStr::AddQuoteIfContains(vUrls[i]);
if (i % 3 == 0)
{
std::this_thread::sleep_for(std::chrono::milliseconds(200));
}
std::string sCmd = CStdStr::ws2s(stCmd);
system(sCmd.c_str());
}
return 0;
}
// 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单
// 调试程序: F5 或调试 >“开始调试”菜单
// 入门使用技巧:
// 1. 使用解决方案资源管理器窗口添加/管理文件
// 2. 使用团队资源管理器窗口连接到源代码管理
// 3. 使用输出窗口查看生成输出和其他消息
// 4. 使用错误列表窗口查看错误
// 5. 转到“项目”>“添加新项”以创建新的代码文件,或转到“项目”>“添加现有项”以将现有代码文件添加到项目
// 6. 将来,若要再次打开此项目,请转到“文件”>“打开”>“项目”并选择 .sln 文件
关键代码为1个for循环,每三次调用加入延时。
Win10x64系统下成品下载:batWebsites.rar - 蓝奏云
欢迎交流与讨论。