Хорошо, вероятно, у этого есть действительно простой ответ, но я никогда не пробовал это делать раньше: как запустить веб-страницу из приложения? Вы знаете, «нажмите здесь, чтобы перейти к нашему FAQ», и когда они это сделают, они запустят свой веб-браузер по умолчанию и перейдут на вашу страницу. Я работаю на C / C++ в Windows, но если есть более широкий и переносимый способ сделать это, я тоже хотел бы знать об этом.





Я считаю, что вы хотите использовать функцию ShellExecute (), которая должна учитывать выбор пользователем браузера по умолчанию.
#include <windows.h>
void main()
{
ShellExecute(NULL, "open", "http://yourwebpage.com",
NULL, NULL, SW_SHOWNORMAL);
}
Вы можете использовать функцию ShellExecute. Образец кода:
ShellExecute( NULL, "open", "http://stackoverflow.com", "", ".", SW_SHOWDEFAULT );
Внимательно прочтите документы для ShellExecute. Чтобы действительно обезопасить ваш код, они рекомендуют инициализировать COM. См. Документацию здесь и найдите часть, в которой говорится: «COM следует инициализировать, как показано здесь». Краткий ответ - сделать это (если вы еще не запустили COM):
CoInitializeEx (NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE)
Для записи (поскольку вы просили кроссплатформенный вариант), в Linux хорошо работает следующее:
#include <unistd.h>
#include <stdlib.h>
void launch(const std::string &url)
{
std::string browser = getenv("BROWSER");
if (browser == "") return;
char *args[3];
args[0] = (char*)browser.c_str();
args[1] = (char*)url.c_str();
args[2] = 0;
pid_t pid = fork();
if (!pid)
execvp(browser.c_str(), args);
}
Использовать как:
launch("http://example.com");
По какой-то причине ShellExecute иногда не работает, если приложение собирается завершить работу сразу после его вызова. Мы добавили Sleep (5000) после ShellExecute, и это помогает.
BROWSER env не установлен в Ubuntu. Этот код вылетает, когда getenv возвращает NULL:
terminate called after throwing an instance of 'std::logic_error' what(): basic_string::_S_construct null not valid.