3

在我的系统上,.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的相同代码按预期使用记事本打开它。

文档假装不应该与SEE_MASK_FLAG_NO_UI.

那么我该怎么做ShellExecuteEx才不会弹出任何消息,而是返回错误代码呢?

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

4

1 回答 1

2

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

于 2019-03-08T15:16:57.427 回答