ShellExecuteEx与SEE_MASK_FLAG_NO_UI仍然显示消息

时间:2019-03-08 13:44:17

标签: windows winapi windows-10 shellexecuteex

在我的系统上,.xyz扩展名根本未注册。因此,当我在资源管理器中双击.xyz文件时,Windows 10会弹出标准的“您想如何打开此文件”对话框。

现在,当我运行此简短代码段时,即使我将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上的行为。

1 个答案:

答案 0 :(得分:2)

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