MinGW Windows API バインディング ファイル shlobj.h には、次の行があります。
#define CMIC_VALID_SEE_FLAGS SEE_VALID_CMIC_FLAGS
ヘッダーのどこにも SEE_VALID_CMIC_FLAGS が定義されていません。MSDN で検索しても何もわかりません。
この行の目的は何ですか?
SEE_SHELLEXECUTEINFOプレフィックスは、構造内のフラグを参照します(明らか
ShellExecuteExにそれが使用されている場所から)。
CMIC_prefix はCMINVOKECOMMANDINFO構造体のフラグ用です( によって使用されIContextMenu::InvokeCommandます)。
それらの定義を確認すると、基本的に相互にミラーリングしていることがわかります。私の推測ではIContextMenu::InvokeCommand、フラグを構造体にコピーしてSHELLEXECUTEINFO呼び出すだけShellExecuteExです。
CMIC_VALID_SEE_FLAGS/の値はSEE_VALID_CMIC_FLAGS、現在の Win32 ヘッダーのいずれにも定義されていませんが、MinGW の作成者が独自のヘッダーを作成していたときに古い SDK に存在していたと思います。名前から、 と の両方 SHELLEXECUTEINFOで有効なフラグのセットのようですIContextMenu::InvokeCommand。私の推測では、これは次のIContextMenu::InvokeCommandような実装で内部的に使用されています。
if ( pici->fMask & ~CMIC_VALID_SEE_FLAGS )
{
// unsupported flags present. do some extra work
}
else
{
// we can use it as-is
SHELLEXECUTEINFO sei;
sei.cbSize = sizeof(SHELLEXECUTEINFO);
sei.fMask = pici->fMask;
// ... etc
ShellExecuteEx(&sei);
}
要するに、この定義を気にしないでください。MSDN の文書化されたフラグを使用するだけです。