【问题标题】:How to suppress windows system message如何抑制windows系统消息
【发布时间】:2011-05-18 12:19:15
【问题描述】:

我创建了一个应用程序,它使用 CopyFile() API 将文件从硬盘复制到软盘驱动器。 在大文件的复制过程中,如果软盘从驱动器中取出,则 windows 系统弹出错误消息。

我想抑制系统弹出的这个错误信息。我用谷歌搜索并阅读了有关使用的 SetErrorMode() API 由许多应用程序来解决类似的问题,并尝试将它与所有可能的标志选项一起使用,但它失败了。示例代码 -

UINT uOldErrorMode = SetErrorMode (SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX); ::CopyFile("C:\text.dat","A:\text.dat", FALSE); 设置错误模式(uOldErrorMode);

SetErrorMode() API 无法抑制错误消息。谁能帮助我理解为什么它不适用于我的应用程序?

然后我发现了下面的链接:http://support.microsoft.com/kb/128642 讨论了密钥

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Windows\ErrorMode

其值可以设置为 0,1 或 2 以抑制或显示错误消息。此解决方案适用于我的应用程序,但我觉得

一个。直接访问系统密钥不是一个好的编程习惯吗?应该有一个 API 可以做到这一点。 湾。这样的代码在 Windows Vista 或 Windows 7 上执行时会导致 UAC 失败。

任何人都可以就上述问题提供一些帮助。

问候, 费利克斯

【问题讨论】:

    标签: visual-c++


    【解决方案1】:

    我不确定这是否可行,但是尝试使用 SHFileOperationFOF_NOERRORUI 标志怎么样?

    【讨论】:

      【解决方案2】:

      这不是一个完整的答案,而是根据我的经验提供的更多信息。我发现 SetErrorMode 似乎适用于 Windows Vista 和 Windows 7。它在 Windows XP 中不起作用。 XP 仍然会弹出简单的错误消息...内存无法“读取”...崩溃。这是我在分布式处理无人值守情况下使用的杀手锏。问题中引用的文章通过修复保存了我的培根。

      我仍然受到有关以编程方式修改注册表的部分问题的困扰。对于我的情况,我不需要担心,因为 SetErrorMode 在 7 和 vista 中工作(还),但如果没有,我会测试看看让 windows 在虚拟商店中设置它是否也会给出正确的行为。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-01-26
        • 2019-03-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多