我尝试使用 AssocQueryString 来获取关联信息,myapp.exe 是 32 位可执行文件。这是我的代码。
WCHAR commandline[_MAX_PATH];
DWORD size = _MAX_PATH;
HRESULT h = AssocQueryStringW(ASSOCF_OPEN_BYEXENAME, ASSOCSTR_COMMAND, execName, 0, commandline, &size);
if (SUCCEEDED(h))
{
...
}
我发现如果“execName”是一个 32 位应用程序,这个 api 就可以完美运行。例如,
WCHAR *execName = L"mspaint.exe";
我们可以得到 command = "C:\Windows\system32\mspaint.exe" "%1"
但如果提供 64 位应用程序(例如:PaintDotNet.exe),SUCCEEDED(h) 将返回 FALSE。变量 h = 0x80070483,表示“没有应用程序与文件扩展名关联”。
由于上述观察,我猜想这个 api 在尝试获取 64 位应用程序信息时可能会失败。
所以我的问题是:
有什么我忽略或错误使用 AssocQueryString 的吗?
还有其他方法可以从 32 位应用程序获取 64 位应用程序信息吗?
顺便说一句,我不想将我的应用程序编译为 64 位应用程序。
谢谢你的帮助。