我尝试使用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位应用程序。
感谢您的帮助。
答案 0 :(得分:0)
<强> 1。有没有我忽略或错误使用AssocQueryString?
1)ASSOCSTR_COMMAND替换为ASSOCSTR_EXECUTABLE
你可以得到“C:\ Windows \ system32 \ mspaint.exe”
2)SUCCEEDED是非负数表示真实
<(>(((HRESULT)(hr))&gt; = 0)因此,如果您检查成功,请检查结果是否等于零
<强> 2。还有另一种方法可以从32位应用程序获取64位应用程序信息吗?
1)如果您的Windows x64,文件夹C:\ Windows \ system32 \适用于64位文件。
CF&GT; http://www.samlogic.net/articles/32-64-bit-windows-folder-x86-syswow64.htm C:\ Windows \ System32用于64位文件的Windows系统文件夹(系统目录) C:\ Windows \ SysWOW64用于32位文件的Windows系统文件夹(系统目录)
2)只检查结果等于零,然后打印出来。 在这种情况下不要使用SUCCEEDED(h)。
AssocQueryString的返回值S_OK(0),E_POINTER,S_FALSE(1)