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);
文件 "C:\Users\Test\Documents\temp\Temp.xyz"
存在。
与 sei.lpFile
指向现有 .txt 的相同代码打开它
按预期使用记事本。
documentation 假装 SEE_MASK_FLAG_NO_UI
不应该显示任何错误消息。
那我该怎么办 ShellExecuteEx
不弹出任何消息而是 returns 一个错误代码?
我只在 Windows 10 上检查过这个,我不知道旧 Windows 版本的行为是什么。
在调用 ShellExecute() 之前使用 FindExecutable() or AssocQueryString()。这允许检查关联是否存在。 SEE_MASK_FLAG_NO_UI 防止错误显示,但是这种情况不被视为错误。
在我的系统上,.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);
文件
"C:\Users\Test\Documents\temp\Temp.xyz"
存在。与
sei.lpFile
指向现有 .txt 的相同代码打开它 按预期使用记事本。
documentation 假装 SEE_MASK_FLAG_NO_UI
不应该显示任何错误消息。
那我该怎么办 ShellExecuteEx
不弹出任何消息而是 returns 一个错误代码?
我只在 Windows 10 上检查过这个,我不知道旧 Windows 版本的行为是什么。
在调用 ShellExecute() 之前使用 FindExecutable() or AssocQueryString()。这允许检查关联是否存在。 SEE_MASK_FLAG_NO_UI 防止错误显示,但是这种情况不被视为错误。