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