Создание нового процесса (отдельно 23223q1614x 81; задачи)
Windows API CreateProcess
BOOL CreateProcess(LPCSTR lpszName,
LPCSTR lpszComLine,
LPSECURITY_ATTRIBUTES lpProcAttr,
LPSECURITY_ATTRIBUTES lpThreadAttr,
BOOL InheritAttr, DWORD How,
LPVOID lpEnv, LPSTR lpszDir,
LPSTARTUPINFO lpStartInfo,
LPPROCESS_INFORMATION lpPInfo);
lpszName lpszComLine lpszName NULL lpszComLine lpszName NULL lpszComLine
lpProcAttr lpThreadAttr NULL Windows XP
InheritAttr TRUE FALSE TRUE FALSE являются макросами, определенными в стандартно 23223q1614x 84; файле определений Windows h
How Windows
lpEnv NULL
lpszDir NULL
lpStartInfo STARTUPINFO STARTUPINFO
typedef struct STARTUPINFO
STARTUPINFO;
Windows Windows dwX dwY dwXSize dwYSize dwXCountChars dwYCountChars dwFillAtribute dwShowWindow dwFlags dwFlags
dwFlags
START USESHOWWINDOW |
dwShowWindow |
|
STARTF_USESIZE |
dwXSize dwYSize |
|
STARTF_USEPOSITION |
dwX dwY |
|
STARTF_USECOUNTCHARS |
dwXCountChars dwYCount-Chars |
|
STARTF_USEFILLATTRIBUTE |
dwFillAttribute |
|
STARTF_USESTDHANDLES |
hStdInput |
|
STARTF FORCEONFEEDBACK | ||
STARTF FORCEOFFFEEDBACK | ||
STARTF SCREENSAVER |
screen saver |
STARTUPINFO cb NULL STARTUPINFO
STARTUPINFO startin
startin.cb = sizeof(STARTUPINFO);
startin.lpReserved = NULL;
startin.lpDesktop = NULL;
startin.lpTitle = NULL;
startin.dwFlags = STARTF_USESHOWWINDOW;
startin.cbReserved2 = 0;
startin.lpReserved2 = NULL;
startin. wShowWindow = SW_SHOWMINIMIZED;
dwFlags STARTF USESHOW WINDOW wShowWindow Windows
CreateProcess lpPInfo PROCESS INFORMATION
typedef struct _PROCESS_INFORMATION
PROCESS INFORMATION
hProcess hThread dwProcessId dwThreadId
CreateProcess
API TerminateProcess()
BOOL TerminateProcess(HANDLE hProcess, UINT status);
hProcess hProcess lpPInfo CreateProcess status
Следующая программа демонстрирует создание и завершение процессов. Эта программа предоставляет возможность создавать до пяти порожденных процессов одновременно. Она также позволяет завершать порожденные процессы в порядке, обратно 23223q1614x 84; их созданию. Порождаемый в ней процесс будет иметь имя Test exe Test exe Windows
В приведенной ниже программе, как и в других примерах главы, используется технология виртуально 23223q1614x 75;о окна для отображения и обновления содержимого реально 23223q1614x 75;о окна.
// с использованием виртуально 23223q1614x 75;о окна
#include <Windows.h>
#include <String.h>
#include <Stdio.h>
#include "Proc.h"
#define Procmax 5
LRESULT CALLBACK WindowFunc(HWND,UINT,WPARAM,LPARAM);
char szWinName[] = " "; //
char str[255]; // Буфер строки вывода
int X=0, Y=0; // Текущие координаты строки
int procnum=0; // Количество активных процессов
int maxX, maxY; // Размеры экрана
HDC memdc; // DC виртуально 23223q1614x 75;о окна
HBITMAP hbit; // Растр - это виртуально 23223q1614x 77; окно
HBRUSH hbrush; //
PROCESS_INFORMATION pinfo[Procmax];
int WINAPI WinMain (HINSTANCE hThisInst,
HINSTANCE hPrevInst,
LPSTR lpszArgs,
int nWinMode)
return msg. wParam;
}
// Windows и получает в качестве параметров сообщения
LRESULT CALLBACK WindowFunc(HWND hwnd,
UINT message,
WPARAM wParam,
LPARAM lParam)
// Не более чем Procmax
// Получить метрики текста */
GetTextMetrics(memdc, &tm);
sprintf(str, "Порождается процесс %d",
procnum);
TextOut(memdc, X, Y, str, strlen(str));
Y = Y+tm.tmHeight+tm.tmExternalLeading;
InvalidateRect(hwnd,NULL,1); //Сообщить
// Порождение нового процесса
startin.cb=sizeof(STARTUPINFO);
startin.lpReserved = NULL;
startin.lpDesktop = NULL;
startin.lpTitle = NULL;
startin.dwFlags =STARTF_USESHOWWINDOW;
startin.cbReserved2 = 0;
startin.lpReserved2 = NULL;
startin.wShowWindow = SW_SHOWMINIMIZED;
CreateProcess(NULL, "Test.exe", NULL,
NULL, FALSE, 0, NULL,
NULL, &startin,
&(pinfo[procnum]));
procnum++;
break;
case ID_KILLPROC:
if(procnum)
procnum--;
else
// Получить метрики текста
GetTextMetrics(memdc, &tm);
TerminateProcess
(pinfo[procnum].hProcess, 0);
sprintf(str, " %d ",
procnum);
TextOut(memdc, X, Y, str, strlen(str));
Y = Y+tm.tmHeight+tm.tmExternalLeading;
InvalidateRect(hwnd,NULL,1); //
break;
case ID_HELP:
MessageBox(hwnd,
"F2: Новый процесс\n"
"F3: Завершить процесс",
" :", MB_OK);
InvalidateRect(hwnd,NULL,1); //
break;
}
break;
case WM_PAINT: //
hdc=BeginPaint(hwnd,&paintstruct); // DC
// Теперь копируем растр из памяти на экран
BitBlt(hdc,0,0,maxX,maxY,memdc,0,0,SRCCOPY);
EndPaint(hwnd,&paintstruct); // DC
break;
case WM_DESTROY: // Завершение программы
DeleteDC(memdc); // Удалить виртуально 23223q1614x 77; окно
PostQuitMessage(0);
break;
default:
// Все сообщения, не обрабатываемые в данной
// функции, направляются на обработку по
// умолчанию
return DefWindowProc(hwnd,message,
wParam,lParam);
return 0;
}
Proc h
#define ID_PROCESS 100
#define ID_KILLPROC 101
define ID HELP 103
Process rc
#include <Windows.h>
#include "Proc.h"
MYMENU MENU
MENUITEM " ", ID_HELP
}
MYMENU ACCELERATORS
|