Основы программирования на 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 "Диспетчер задач", откройте вкладку "Процессы" и снова запустите программу. Пронаблюдайте как на вкладке отображается появление и исчезновение созданных процессов.