windows - 如何不显示 UI?
问题描述
此链接上的MSDN声明有一个标志
CMIC_MASK_FLAG_NO_UI
The system is prevented from displaying user interface elements (for example, error messages) while carrying out a command.
然而,这也表明该结构具有
nShow
Type: int
A set of SW_ values to pass to the ShowWindow function if the command displays a window or starts an application.
我认为这相互矛盾,因为没有迹象表明我可以将后一个参数设置为 0 并且ShowWindow
文档中没有 SW_NOSHOW 参数。
甚至有可能抑制那个窗口吗?如果是 - 如何?
蒂亚!!
解决方案
关于我们在这里讨论的 UI 存在一些歧义。
有一些与调用命令相关的 UI 内容(询问网络共享密码、失败时的错误消息等),CMIC_MASK_FLAG_NO_UI
当然也适用于这里。我不知道有多大的相关nShow
性。调用者不知道可能会显示哪个 UI,并且被调用者允许其错误MessageBox
最大化等是零意义的。尊重SW_HIDE
可能最终会卡住等待用户与他们看不到的窗口进行交互。
另一个 UI 实际上是被执行的东西。在启动新进程的情况下,我们正在查看ShellExecuteEx
调用。CMIC_MASK_FLAG_NO_UI
作为(相同的整数值)传递SEE_MASK_FLAG_NO_UI
,MSDN 只是为此标志说“如果发生错误,请不要显示错误消息框”。然而,这里nShow
是相关的,可以一直渗透到CreateProcess
.
这是我个人处理这种情况的方式:
- 设置
CMIC_MASK_FLAG_NO_UI
是否要在出现故障时显示自己的错误 UI,或者如果您在静默/自动执行模式下运行。 - 仅在您控制正在执行的操作时设置
nShow
为其他值。SW_SHOW
例如,您知道 cmd.exe 正在被调用,您需要使用SW_HIDE
.
重要的是要记住,它CMINVOKECOMMANDINFO
是由各种 shell 对象(文件、控制面板等)的默认IContextMenu
shell32 实现和第 3 方上下文菜单处理程序解析的。你不能假设他们会尊重你的意愿。
推荐阅读
- python - 如何使用 if 和 for 循环 django 创建分页
- python - 有人可以向我解释为什么 '\n' 在与函数一起使用时不注册吗?
- selenium - Selenium Gradle - Github Actions 构建失败
- visual-studio-code - 调试时如何使用相同/现有的外部终端(会话)?
- docker - docker_compose.yml 中 restart 和 restart_policy 的区别
- azure - castorage.common.StorageInputStream : 流已经关闭
- python - 在 python 中创建具有正确内容的 json
- elasticsearch - 通过 Elastic Search 中的逗号分隔值字段获取计数数据
- javascript - 角料分拣台不工作
- c# - 在通过 COM 从 VB6 应用程序调用的 .NET DLL 中调用 Crystal Reports 时出现 COM 类工厂错误。在 .NET 应用程序中运行良好