我正在尝试在Windows上设置默认浏览器。我确实让它工作了,然后由于某种原因它停止了我重构我的代码而我无法解决原因(并且我不能遗漏旧代码)。
这是我写的一个测试,我认为应该有效:
#include <windows.h>
#include <Shobjidl.h>
void test()
{
// Included because they aren't defined in mingw for some reason.
const GUID CLSID_ApplicationAssociationRegistration =
{ 0x591209c7, 0x767b, 0x42b2, {0x9f,0xba,0x44,0xee,0x46,0x15,0xf2,0xc7} };
const IID IID_ApplicationAssociationRegistration =
{ 0x4e530b0a, 0xe611, 0x4c77, {0xa3,0xac,0x90,0x31,0xd0,0x22,0x28,0x1b} };
CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
IApplicationAssociationRegistration* pAAR;
HRESULT hr = CoCreateInstance(CLSID_ApplicationAssociationRegistration,
NULL,
CLSCTX_INPROC,
IID_ApplicationAssociationRegistration,
(void**)&pAAR);
if (FAILED(hr))
{
qDebug() << "CoCreateInstance failed: " << hr;
return;
}
hr = pAAR->SetAppAsDefault(L"IE.HTTP", L"http", AT_URLPROTOCOL);
if (FAILED(hr))
{
qDebug() << "SetAppAsDefault failed: " << hr;
pAAR->Release();
return;
}
pAAR->Release();
qDebug() << "Success";
return;
}
我得到"SetAppAsDefault failed: -2147024894"
(0x80070002)。请注意CoCreateInstance
工作(或至少声称)。
有什么想法吗?我尝试将COINT_APARTMENTTHREADED
更改为其他各种值,CLSCTX_INPROC
也是如此。他们都没有工作。请解释一下你的答案,好像我之前从未使用过COM,并且不想用它填满我的大脑!即我不知道编组,公寓等是什么。
我80%确定与此非常相似的工作......
更新:对不起,我之前说过它给了E_NOINTERFACE这是完全错误的 - 不知道为什么我这么认为。 0x80070002似乎没有任何东西......
更新2 :0x80070002表示“系统找不到指定的文件”。根据FormatMessage。我不知道在这种情况下这有什么意义。
答案 0 :(得分:0)
使用默认浏览器时,请遵循Microsoft的指导原则,因为在许多操作系统版本上会遇到许多问题。
http://msdn.microsoft.com/en-us/library/windows/desktop/cc144154(v=vs.85).aspx#browser