Уроки Iczelion'а




Урок 21. Пайп - часть 4


  • wShowWindow управляет тем, как будет отображаться основное окно. Hам не нужно, что окно консоли отображалось на экран, поэтому мы приравняем этот параметр к SW_HIDE.
  • Вызов Createрrocess, чтобы загрузить дочернее приложение. После того, как вызов прошел успешно, дочерний процесс все еще находится в спящем состоянии. Он загружается в память, но не запускается немедленно.
  • Закройте конец хэндл конца записи пайпа. Это необходимо, так как родительский процессу нет нужды использовать этот хэндл, а пайп не будет работать, если открыть более чем один конец записи. Следовательно, мы должны закрыть его прежде, чем считывать данные из пайпа. тем не менее, не закрывайте этот конец до вызова Createрrocess, иначе ваш пайп будет сломан. Вам следует закрыть конец записи после того, как будет и вызванна функция Createprocess, и до того, как вы считаете данные из конца чтения пайпа.
  • Теперь вы можете читать данные из конца чтения с помощью ReadFile. С ее помощью вы запускаете дочерний процесс, который начнет выполняться, а когда он запишет что-нибудь в стандартный хэндл вывода, данные будут посланы на конец чтения пайпа. Вы должны последовательно вызывать ReadFile, пока она не возвратит ноль, что будет означать, что больше данных нет. С полученной информацией вы можете делать все, что хотите, в нашем случае я вывожу их в edit control.
  • Закроем хэндл чтения пайпа.
  • Пpимеp:

    .386 .model flat,stdcall option casemap:none include \masm32\include\windows.inc

    include \masm32\include\user32.inc include \masm32\include\kernel32.inc include \masm32\include\gdi32.inc includelib \masm32\lib\gdi32.lib

    includelib \masm32\lib\user32.lib includelib \masm32\lib\kernel32.lib

    WinMain pROTO :DWORD,:DWORD,:DWORD,:DWORD

    .const IDR_MAINMENU equ 101 ; the ID of the main menu

    IDM_ASSEMBLE equ 40001

    .data

    ClassName db "pipeWinClass",0 AppName db "One-way pipe Example",0 EditClass db "EDIT",0 CreatepipeError db "Error during pipe creation",0

    CreateprocessError db "Error during process creation",0 CommandLine db "ml /c /coff /Cp test.asm",0




    Содержание  Назад  Вперед