Я создал приложение, которое копирует файлы с жесткого диска на дисковод гибких дисков с помощью API CopyFile ().
В середине процесса копирования большого файла, если дискета удалена с диска, то окна
всплывающее системное сообщение об ошибке.
Я хочу подавить это сообщение об ошибке, которое выдается системой. Я погуглил и прочитал об используемом API SetErrorMode ()
многими приложениями для решения аналогичных проблем и пытался использовать его со всеми возможными вариантами флагов, но это не удается. Пример кода -
UINT uOldErrorMode = SetErrorMode (SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX);
:: CopyFile ("C: \ text.dat", "A: \ text.dat", FALSE);
SetErrorMode (uOldErrorMode);
API SetErrorMode () не может подавить сообщение об ошибке. Может ли кто-нибудь помочь мне понять, почему он не работает с моим приложением?
Затем я наткнулся на ссылку ниже: http://support.microsoft.com/kb/128642, в которой говорится о ключе
HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Windows \ ErrorMode
, значение которого может быть установлено на 0,1 или 2 для подавления или отображения сообщений об ошибках. Это решение работает для моего приложения, но я чувствую, что
а. Это не хорошая практика программирования для прямого доступа к системному ключу? должен быть API, который должен это делать.
б. Такой код должен давать сбой UAC при выполнении в Windows Vista или Windows 7.
Может ли кто-нибудь помочь с вышеуказанным вопросом?
С уважением,
Felix