Тема: Можливість вибору програми, що запускається, з декількох варіантів
Допоможіть будь ласка, новачок в цьому, але треба терміново.
Є програма(проект win32) на С++ її треба змінити щоб виконувалось наступне, в мене не виходить зробити завдання, не можу зрозуміти про що йде мова:
Завдання: Додати в програму можливість вибору програми, що запускається, з декількох варіантів
(наприклад, зі списку), передбачити можливість вибіркового завершення
процесів.
Код програми:
#include <windows.h>
#include <stdio.h>
#include "proc.h"
LRESULT CALLBACK ProcessesWndProc(HWND, UINT, UINT, LONG);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpszCmdParam, int nCmdShow)
{
HWND hWnd;
WNDCLASS WndClass;
MSG Msg;
char szClassName[] = "Processes";
WndClass.style = CS_HREDRAW | CS_VREDRAW;
WndClass.lpfnWndProc = ProcessesWndProc;
WndClass.cbClsExtra = 0;
WndClass.cbWndExtra = 0;
WndClass.hInstance = hInstance;
WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
WndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
WndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
WndClass.lpszMenuName = "ProcessesMenu";
WndClass.lpszClassName = szClassName;
if (!RegisterClass(&WndClass))
{
MessageBox(NULL, "Cannot register class", "Error", MB_OK);
return 0;
}
hWnd = CreateWindow(szClassName, "Processes Demo",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, hInstance, NULL);
if (!hWnd)
{
MessageBox(NULL, "Cannot create window", "Error", MB_OK);
return 0;
}
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
while (GetMessage(&Msg, NULL, 0, 0))
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return Msg.wParam;
}
LRESULT CALLBACK ProcessesWndProc(HWND hWnd, UINT Message,
UINT wParam, LONG lParam)
{
const int Max = 10;
STARTUPINFO StartupInfo;
static int ProcessNumber = 2;
static PROCESS_INFORMATION ProcessInformation[Max];
static char cMyMessage[80];
static HMENU hSubMenu;
switch (Message)
{
case WM_CREATE:
hSubMenu = GetSubMenu(GetMenu(hWnd), 0);
return 0;
case WM_COMMAND:
switch (LOWORD(wParam))
{
case IDM_New_Process:
if (ProcessNumber < Max)
{
StartupInfo.cb = sizeof(STARTUPINFO);
StartupInfo.lpReserved = NULL;
StartupInfo.lpDesktop = NULL;
StartupInfo.lpTitle = NULL;
StartupInfo.dwFlags = STARTF_USESHOWWINDOW;
StartupInfo.wShowWindow = SW_SHOWNORMAL;
StartupInfo.cbReserved2 = 0;
StartupInfo.lpReserved2 = NULL;
if (CreateProcess(NULL, "Notepad.exe",
NULL, NULL, FALSE, 0,
NULL, NULL, &StartupInfo,
&(ProcessInformation[ProcessNumber])))
{
ProcessNumber++;
wsprintf(cMyMessage, "hProcess is %x.\nThread is %x.\ndwProcessId is %x.\ndwThreadId is %x.",
ProcessInformation[ProcessNumber -
1].hProcess,
ProcessInformation[ProcessNumber -
1].hThread,
ProcessInformation[ProcessNumber -
1].dwProcessId,
ProcessInformation[ProcessNumber -
1].dwThreadId);
MessageBox(hWnd, cMyMessage, "Process is created", MB_OK);
EnableMenuItem(hSubMenu, IDM_Kill_Process,
MF_BYCOMMAND | MF_ENABLED);
}
else
MessageBox(hWnd, "Cannot create process",
"Process creation", MB_OK);
}
else
{
MessageBox(hWnd, "Too many created processes...",
"Process creation", MB_OK);
}
break;
case IDM_Kill_Process:
if (ProcessNumber > 0)
{
if (TerminateProcess(ProcessInformation[ProcessNumber - 1].hProcess,
0))
{
ProcessNumber - 0;
if (!ProcessNumber)
EnableMenuItem(hSubMenu, IDM_Kill_Process,
MF_BYCOMMAND |
MF_GRAYED);
}
else
MessageBox(hWnd, "Cannot terminate process",
"Process termination", MB_OK);
}
else MessageBox(hWnd, "No more processes", "Process termination", MB_OK);
break;
case IDM_Exit:
SendMessage(hWnd, WM_CLOSE, 0, 0);
break;
}
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hWnd, Message, wParam, lParam);
}