Com 无法使IAApplicationAssociationRegistration::QueryAppIsDefault正常工作
所以我尝试使用Windows Vista中引入的。我使用的是Windows7x64 但是,每个接收ProgId(又名AppRegistryName,例如“FirefoxHTML”)的调用都会返回一个HRESULT 0x80070002,这意味着“系统找不到指定的文件”。 像QueryCurrentDefault这样的调用不需要/接收ProgId,而是返回一个ProgId,可以完美地工作。 我完全不知道这里找不到什么样的文件,我也不知道还会发生什么 因为我不太喜欢COM的东西,所以我可能错过了一些非常愚蠢的东西。谢谢你的建议 以下是一个屏幕截图: 下面是供大家尝试/复制的原始独立代码,别忘了设置断点:Com 无法使IAApplicationAssociationRegistration::QueryAppIsDefault正常工作,com,winapi,windows-vista,Com,Winapi,Windows Vista,所以我尝试使用Windows Vista中引入的。我使用的是Windows7x64 但是,每个接收ProgId(又名AppRegistryName,例如“FirefoxHTML”)的调用都会返回一个HRESULT 0x80070002,这意味着“系统找不到指定的文件”。 像QueryCurrentDefault这样的调用不需要/接收ProgId,而是返回一个ProgId,可以完美地工作。 我完全不知道这里找不到什么样的文件,我也不知道还会发生什么 因为我不太喜欢COM的东西,所以我可能错过了一些
#include <windows.h>
#include <tchar.h>
#include <shobjidl.h>
HRESULT CheckStuff(__out BOOL* pfHasDotHTM)
{
IApplicationAssociationRegistration* pAAR;
HRESULT hr = CoCreateInstance(CLSID_ApplicationAssociationRegistration,
NULL, CLSCTX_INPROC,
__uuidof(IApplicationAssociationRegistration),
(void**)&pAAR);
if (SUCCEEDED(hr))
{
hr = pAAR->QueryAppIsDefault(L".html",
AT_FILEEXTENSION, AL_EFFECTIVE,
L"FirefoxHTML",
pfHasDotHTM);
pAAR->Release();
}
return hr;
}
int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPTSTR lpCmdLine, int nCmdShow)
{
CoInitializeEx(NULL, COINIT_MULTITHREADED);
BOOL bx = FALSE;
CheckStuff(&bx);
CoUninitialize();
return 0;
}
我重新编程(Win7 x86),我认为主要的问题是FirefoxHTML实际上不是一个ProgID。ProgID的一个基本子键是CLSID键,它指向关联的HKCR\Classes子键。Firefox是完全不可知论的。嘿,谢谢,但不要说这样的话:o不过,我会考虑添加一个GUID/CLSID,看看它是否会改变什么。顺便说一下,FirefoxHTML只是一个例子,我们将使用特定于我们的应用程序的ProgId。也许你应该给出一个更好的例子。
hr = pAAR->QueryAppIsDefault(L".html",
AT_FILEEXTENSION,
AL_EFFECTIVE,
L"Firefox",
pfHasDotHTM);