Professional Documents
Culture Documents
Кравченко гр2 лаб2
Кравченко гр2 лаб2
Звіт
До лабораторної роботи № 2
На тему «Вивчення основних команд WinApi,
створення процесів»
Виконав:
Студент групи КС-20-2
Кравченко В.О.
Перевірив:
доц. Дерев’янко О.І.
Дніпро
2021
Мета: Навчитися запускати виконані файли з власних програм.
Вивчити функції, які можна застосовувати для цього. Вивчити основні
WinApi функції, що застосовуються для роботи з процесами.
Хід роботи
int main() {
setlocale(LC_ALL, "");
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
string prov;
cout << "Хотите ожидать завершение процесса?\n";
cin >> prov;
system("dir");
if (prov == "нет") {
int msgbox = MessageBox(
NULL,
(LPCWSTR)L"Вы уверены что хотите продолжить без ожидания завершения
процесса?",
(LPCWSTR)L"Еще раз спрашиваю!",
MB_ICONWARNING | MB_YESNO
);
switch (msgbox)
{
case IDYES:
prov = "нет";
break;
case IDNO:
prov = "да";
break;
}
if (prov == "нет") {
cout << "Без ожидания завершения:\n ";
_spawnl(P_OVERLAY, "C:\\cpp\\Project1\\Debug\\Project1.exe", "C:\\
cpp\\Project1\\Debug\\Project1.exe", NULL);
}
}
if (prov == "да") {
cout << "С ожиданием завершения: \n";
_spawnl(P_WAIT, "C:\\cpp\\Project1\\Debug\\Project1.exe", "C:\\cpp\\
Project1\\Debug\\Project1.exe", NULL);
}
else {
cout << "wrong";
}
string args;
switch (msgboxID)
{
case IDYES:
args = "да";
break;
case IDNO:
args = "нет";
break;
}
STARTUPINFO ci;
PROCESS_INFORMATION pi;
ZeroMemory(&ci, sizeof(STARTUPINFO));
ci.dwFlags = STARTF_USESIZE | STARTF_USEFILLATTRIBUTE;
ZeroMemory(&pi, sizeof(pi));
if (args == "да") {
if (CreateProcess(L"C:\\cpp\\Project1\\Debug\\Project1.exe",NULL,
NULL, NULL, FALSE, NULL, NULL, NULL, &ci, &pi))
{
cout << "\nИдентификатор процесса: " << pi.dwProcessId;
cout << "\nДескриптор процесса:" << pi.hProcess;
cout << "Процесс запущен";
system("C:\\cpp\\Project1\\Debug\\Project1.exe");
}
}
else if (args == "нет") {
ci.dwFillAttribute = text_color() | background_color();
DWORD dw = prioritet();
OPENFILENAME ofn = { sizeof ofn };
ofn.lpstrFile = filename();
ci.lpTitle = (LPWSTR)L"Заголовок второй консоли";
if (CreateProcess(ofn.lpstrFile, NULL,
NULL, NULL, FALSE, CREATE_NEW_CONSOLE | dw, NULL, NULL, &ci, &pi))
{
cout << "\nИдентификатор процесса: " << pi.dwProcessId;
cout << "\nДескриптор процесса:" << pi.hProcess;
cout << "\nПроцесс запущен";
}
}
WaitForSingleObject(pi.hProcess, INFINITE);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
}
//Выбор файла
LPWSTR filename() {
OPENFILENAME n = { sizeof n };
wchar_t file[1024];
file[0] = '\0';
n.lpstrFile = file;
n.nMaxFile = 1024;
n.Flags = OFN_ALLOWMULTISELECT | OFN_EXPLORER;
GetOpenFileName(&n);
return n.lpstrFile;
}
//Выбор приоритета
DWORD prioritet() {
string prioritet;
DWORD d;
cout << "\nВведите приоритет(0x00000010):\n";
cin >> prioritet;
return d = strtoul(prioritet.c_str(), NULL, 16);
}