在我的系统上,.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上的行为。
答案 0 :(得分:2)
在调用ShellExecute()之前使用FindExecutable()或AssocQueryString()。这样可以检查是否存在关联。 SEE_MASK_FLAG_NO_UI可以防止显示错误,但是这种情况不会被视为错误。