【发布时间】:2019-03-08 13:44:16
【问题描述】:
在我的系统上,.xyz 扩展名根本没有注册。因此,当我在资源管理器中双击 .xyz 文件时,Windows 10 会弹出标准的“你想如何打开此文件”对话框,这是预期的。
现在当我运行这个简短的 sn-p 时,会显示与上面相同的对话框,即使我将 SEE_MASK_FLAG_NO_UI 标志放在 sei.fMask 中:
SHELLEXECUTEINFO sei = { 0 };
sei.cbSize = sizeof(SHELLEXECUTEINFO) ;
sei.fMask = SEE_MASK_FLAG_NO_UI;
sei.hwnd = AfxGetMainWnd()->GetSafeHwnd();
sei.lpVerb = _T("open");
sei.lpFile = _T("C:\\Users\\Test\\Documents\\temp\\Temp.xyz");
sei.lpParameters = NULL;
sei.lpDirectory = appdir;
sei.nShow = SW_SHOW;
ShellExecuteEx(&sei);
文件
"C:\\Users\\Test\\Documents\\temp\\Temp.xyz"存在。sei.lpFile指向现有 .txt 的相同代码将打开它 按预期使用记事本。
documentation 假装不应该与SEE_MASK_FLAG_NO_UI 一起显示错误消息。
那我该怎么办,ShellExecuteEx 不会弹出任何消息,而是返回错误代码?
我只在 Windows 10 上检查过这个,我不知道旧 Windows 版本的行为是什么。
【问题讨论】:
-
我猜这不是错误对话框吧。这是一个允许用户形成关联的对话框,以便 shell 可以尝试调用动词。
-
@DavidHeffernan,确切地说,这不是错误消息。无论如何,我不希望显示任何 UI。也许我应该简单地检查注册表中 HKEY_CLASSES_ROOT 下是否存在“.xyz”键,如果不存在,则将
ShellExecuteExalltogether 短路。
标签: windows winapi windows-10 shellexecuteex