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、これは「ファイル拡張子に関連付けられたアプリケーションがない」ことを意味します。
上記の観察から、64 ビット アプリケーション情報を取得しようとすると、この API が失敗する可能性があると思います。
だから私の質問は:
AssocQueryString の無視または間違った使用法はありますか?
32 ビット アプリから 64 ビット アプリ情報を取得する別の方法はありますか?
ところで、私は自分のアプリを 64 ビット アプリとしてコンパイルしたくありません。
いつもお世話になっております。