а также три дополнительных флага STARTF_FORCEONFEEDBACK, STARTF_FORCEOFFFEEDBACK и STARTF_SCREENSAVER.
Создайте еще одно приложение.
Обеспечьте запуск данного приложения как дочернего процесса.
Подсказка: при этом нужно сформировать путь к исполняемому файлу дочернего процесса =>
в CreateProcess() можно указать путь (лучше относительный)
Задача: в родительском процессе создать объект – файл и передать дочернему процессу этот файл для записи в качестве стандартного потока вывода. В дочернем процессе сформировать текст и записать этот текст в поток вывода – при этом на самом деле запись будет осуществляться в открытый в родительском процессе файл)
Для этого:
1) в родительском процессе открыть файл (объект должен быть наследуемым дочерним процессом!!!). Для этого а) создать и проинициализировать структуру SECURITY_ATTRIBUTES (объект должен быть наследуемым!) б) создать файл с помощью CreateFile
2) Создать и проинициализировать структуру STARTUPINFO (Замечание: порождаемому процессу перенаправляем стандартный вывод в открытый в родительском процессе файл): а) si.dwFlags = STARTF_USESTDHANDLES; б) si.hStdOutput =hFile;
3) при создании дочернего процесса «унаследовать» все наследуемые объекты.
4) можно (необязательно) «подождать» окончания дочернего процесса
5) закрыть все открытые дескрипторы
Подсказка:
HANDLE CreateFile(
LPCTSTR lpFileName, //указатель на строку с именем файла (при необходимости с путем)
DWORD dwAccess, //нужный Вам режим доступа: если файл будет открыт только для чтения – GENERIC_READ, только запись - GENERIC_WRITE а если и запись, и чтение - GENERIC_READ | GENERIC_WRITE. 0-содержимое файла нельзя считывать или записывать. Применяется, если Вы хотите всего лишь получить атрибуты файла
DWORD dwShareMode, //режим совместного использования файла (как могут другие этот файл использовать): 0 – совместный доступ запрещен, то есть файл не подлежит открытию «со стороны» (любой другой CreateFile для этого файла завершится INVALID_HANDLE_VALUE), более того – даже этот же процесс не сможет «открыть» данный файл еще раз FILE_SHARE_READ – попытка другим процессом открыть файл с GENERIC_WRITE не удастся (защита на время чтения), то есть другие процессы могут открывать данный файл только для чтения FILE_SHARE_WRITE– попытка другим процессом открыть файл с GENERIC_READ не удастся (защита на время записи), но разрешается параллельная запись в файл FILE_SHARE_READ | FILE_SHARE_WRITE – другой процесс может открывать файл без ограничений.
LPSECURITY_ATTRIBUTES lpSecurityAttributes, // указатель на структуру SECURITY_ATTRIBUTES или 0 (дескриптор не будет наследуемым + защита по умолчанию)
DWORD dwCreation, //параметры создания – определяет: надо ли создавать новый файл, заменять существующий… Следующие флаги можно объединять «|» CREATE_NEW – завершится неудачей, если указанный файл уже существует, иначе создается новый файл CREATE_ALWAYS – существующий файл заменяется новым OPEN_EXISTING – неудача, если файл не существует OPEN_ALWAYS – файл открывается и создается, если не существует TRUNCATE_EXISTING – устанавливается нулевая длина файла, при этом в dwAccess должен быть по крайней мере GENERIC_WRITE
DWORD dwFlagsAndAttributes, //Обычно FILE_ATTRIBUTE_NORMAL Замечание: атрибуты - это характеристики самого файла, а не способа его открытия, => имеют смысл только при создании файла => они игнорируются, если открывается существующий файл: FILE_ATTRIBUTE_NORMAL – используется только если не установлены никакие другие атрибуты (однако флаги могут быть установлены) флаги: FILE_ATTRIBUTE_READONLY – нельзя ни писать в файл, ни удалять его FILE_FLAG_DELETE_ON_CLOSE – полезен для временных файлов. Файл удаляется, когда закрывается его последний открытый дескриптор FILE_FLAG_OVERLAPPED – важен для асинхронного ввода/вывода …
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.