Основы программирования на Win32

Создание процесса

Для иллюстрации того, как используется программный интерфейс API WIN32, создадим приложение на C++, использующее системный вызов для создания процесса внутри процесса.

Создайте новый проект типа Win32 Empty Project с именем, например CreateProc, и поместите в него файл crproc.cpp, содержащий следующий программный код:

#include <windows.h>
#include <stdio.h>
#include <locale.h>
void main( VOID )
{
    STARTUPINFO StartupInfo;
    PROCESS_INFORMATION ProcInfo;
    TCHAR CommandLine[] = TEXT("sleep");

	setlocale(LC_ALL, "rus_rus.1251");

	ZeroMemory( &StartupInfo, sizeof(StartupInfo) );
    StartupInfo.cb = sizeof(StartupInfo);
    ZeroMemory( &ProcInfo, sizeof(ProcInfo) );
     
	printf("Работает только основной процесс в течение 10000 мс\n");
    Sleep(10000);

    if( !CreateProcess( NULL, // Не используется имя модуля 
        CommandLine,          // Командная строка
        NULL,                 // Дескриптор процесса не наследуется. 
        NULL,                 // Дескриптор потока не наследуется. 
        FALSE,                // Установка описателей наследования
        0,                    // Нет флагов создания процесса
        NULL,                 // Блок переменных окружения родительского процесса
        NULL,                 // Использовать текущий каталог родительского процесса
        &StartupInfo,         // Указатель на структуру  STARTUPINFO.
        &ProcInfo )           // Указатель на структуру информации о процессе.
      )
    
	printf( "CreateProcess failed.\n" );
  
    // Ждать окончания дочернего процесса
    WaitForSingleObject( ProcInfo.hProcess, INFINITE );

	printf( "Окончание дочернего процесса.\n" );

    Sleep(10000);

	// Закрыть описатели процесса и потока 
    CloseHandle( ProcInfo.hProcess );
    CloseHandle( ProcInfo.hThread );
}

Кроме того, в этом же решении создайте еще один проект с именем, например sleep. Для этого в окне Solution Explorer щелкните правой кнопкой мыши на самом верхнем пункте Solution 'CreateProc' и в появившемся контекстном меню выберите пункты Add - New Project. Во второй проект добавьте файл sleep.cpp с кодом:

#include <windows.h>
#include <stdio.h>
#include <locale.h>
void main( VOID )
{
    setlocale(LC_ALL, "rus_rus.1251");
    printf("Данная программа будет спать в течение 10000 мс\n");
    Sleep(10000);
}

Окно Solution Explorer должно иметь примерно такой вид:

Запустите программу на исполнение и убедитесь, что у вас сначала запускается основной процесс, затем, спутя некоторое время дочерний, который через определенное время заканчивается, после чего спустя еще некоторое время заканчивается основной процесс. Соответствующая информация выдается процессами в консольное окно, как показано на рисунке.

После этого запустите с помощью комбинации клавиш Ctrl+Alt+Del "Диспетчер задач", откройте вкладку "Процессы" и снова запустите программу. Пронаблюдайте как на вкладке отображается появление и исчезновение созданных процессов.

Hosted by uCoz