使用C代码,如何调用默认浏览器打开“about:blank”(空白页面)?
我尝试了很多方法,以下是一些不起作用的方法:
<Windows.h>
的 ShellExecuteW
或 ShellExecute
传递 "open"
作为其第二个参数http:about:blank
代替结果:
此外,使用诸如
http:about:blank
或 http://about:blank
之类的内容可能不正确。
也许指向空白的唯一有效网址是
about:blank
这不久前对我有用,可能仍然有效
ShellExecute(nullptr, "open", "http:", nullptr, nullptr, SW_SHOWNORMAL);
我发现
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);
}