SEE_MASK_FLAG_NO_UI 的 ShellExecuteEx 仍然显示消息

ShellExecuteEx with SEE_MASK_FLAG_NO_UI displays message anyway

在我的系统上,.xyz 扩展名根本没有注册。因此,当我在资源管理器中双击 .xyz 文件时,Windows 10 会弹出预期的标准 "How do you want to open this file" 对话框。

现在,当我 运行 这个简短的片段时,会显示与上面相同的对话框,即使我将 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); 

documentation 假装 SEE_MASK_FLAG_NO_UI 不应该显示任何错误消息。

那我该怎么办 ShellExecuteEx 不弹出任何消息而是 returns 一个错误代码?

我只在 Windows 10 上检查过这个,我不知道旧 Windows 版本的行为是什么。

在调用 ShellExecute() 之前使用 FindExecutable() or AssocQueryString()。这允许检查关联是否存在。 SEE_MASK_FLAG_NO_UI 防止错误显示,但是这种情况不被视为错误。