shellexecuteがC ++のファイル関連のために失敗した場合、ウィンドウのデフォルトダイアログを開く方法?
-
28-10-2019 - |
解決
文書化 仕方 ダイアログを示すことは、Openas動詞を使用することです。
CoInitializeEx(NULL, COINIT_APARTMENTTHREADED|COINIT_DISABLE_OLE1DDE);
SHELLEXECUTEINFO sei = { sizeof(sei) };
sei.fMask = SEE_MASK_NOASYNC;
sei.nShow = SW_SHOWNORMAL;
sei.lpVerb = "openas";
sei.lpFile = "C:\\yourfile.ext";
ShellExecuteEx(&sei);
下をチェックする場合 HKEY_CLASSES_ROOT\Unknown\shell\openas
これは、shell32で(文書化されていない)openas_rundllエクスポートを呼び出すことと同じであることがわかります。
他のヒント
実行する RUNDLL32 Shell32,OpenAs_RunDLL path/to/file/to/open
明示的な動詞を使用しないでください。 「オープン」のような特定の動詞を使用することは大きな間違いです。
- 「Open」はデフォルトの動詞ではない場合があります(たとえば、「プレイ」、「編集」、「実行」)
- 「オープン」は存在しない場合があります
それはより正しい方法です 動詞としてnullを渡すだけです. 。システムは、最も適切な動詞を自動的に選択します。
- 設定されている場合、デフォルトの動詞が使用されます
- デフォルトの動詞が設定されていない場合、「開く」動詞が使用されます
- デフォルトと「開いた」動詞が利用できない場合、最初の動詞が使用されます
- 動詞が割り当てられていない場合 - システムは「オープン」ダイアログをもたらします
言い換えれば、シンプルです
ShellExecute(0, NULL, 'C:\MyFile.StrangeExt', ...);
「Open with」ダイアログが表示されます。
aのみを使用します 明確な 動詞aが必要な場合 明確な アクション。たとえば、「印刷」、「探検」、「ranas」。それ以外の場合は、nilを渡すだけです。
所属していません StackOverflow