如何调用浏览器打开“about:blank”

问题描述 投票:0回答:2

使用C代码,如何调用默认浏览器打开“about:blank”(空白页面)?

我尝试了很多方法,以下是一些不起作用的方法:

  1. 调用
    <Windows.h>
    ShellExecuteW
    ShellExecute
    传递
    "open"
    作为其第二个参数
  2. 同方法 1,但使用
    http:about:blank
    代替

结果:

  1. 由于“about:blank”不包含“http:”或“https:”,因此Windows不知道调用浏览器。
  2. 浏览器将打开,但会显示默认页面而不是空白页面

此外,使用诸如

http:about:blank
http://about:blank
之类的内容可能不正确。

也许指向空白的唯一有效网址是

about:blank

c++ c windows winapi
2个回答
1
投票

这不久前对我有用,可能仍然有效

ShellExecute(nullptr, "open", "http:", nullptr, nullptr, SW_SHOWNORMAL);

0
投票

我发现

AssocQueryString
有帮助(需要链接到
shlwapi.dll
):

这是

C++
代码的一种可能版本:


#include<shlwapi.h>

#pragma comment(lib, "Shlwapi.lib")
#pragma comment(lib, "Shell32.lib")

#define F_ASSOC ASSOCF_NONE // ASSOCF_NOFIXUPS|ASSOCF_VERIFY
#define assoc(buffer, sizep) ::AssocQueryStringW(F_ASSOC, ASSOCSTR_EXECUTABLE,\
   L"http", L"open", (buffer), (sizep))

DWORD getDefaultBrowser(LPWSTR &pszPath){
    DWORD size = 0;
    assoc(NULL, &size); // get required buffer size, returns S_FALSE
    pszPath = new WCHAR[size];
    HRESULT hr = assoc(pszPath,&size); // assert(hr==S_OK);
    return size;
    // remember `delete[]pszPath;`
}

int main(){
    LPWSTR browserPath;
    DWORD len = getDefaultBrowser(browserPath);
    if (len == 0)return -1;

    ShellExecuteW(NULL, L"open", browserPath, L"about:blank", NULL, SW_SHOW);

    delete[] browserPath;
}

另外,对应的

C
代码:

#include<stdlib.h>
#include<Windows.h>
#include<shlwapi.h>

#pragma comment(lib, "Shlwapi.lib")
#pragma comment(lib, "Shell32.lib")

#define F_ASSOC ASSOCF_NONE
#define assoc(buffer, sizep) AssocQueryStringW(F_ASSOC, ASSOCSTR_EXECUTABLE, \
    L"http", L"open", (buffer), (sizep));
DWORD getDefaultBrowser(LPWSTR* pOut){
    DWORD size = 0;
    assoc(NULL, &size); // get required buffer size, returns S_FALSE
    *pOut = (LPWSTR)malloc(size * sizeof(WCHAR));
    HRESULT hr = assoc(*pOut,&size); // assert(hr==S_OK);
    return size;
    // remember `free(pOut);`
}
int main(){
    //Get default web browser path
    LPWSTR browserPath;
    DWORD len = getDefaultBrowser(&browserPath); 
    if(len == 0) return -1;

    ShellExecuteW(NULL, L"open", browserPath, L"about:blank", NULL, SW_SHOW);

    free(browserPath);
}
© www.soinside.com 2019 - 2024. All rights reserved.