- •Федеральное агентство связи
- •Московский технический университет связи и информатики
- •Задание на курсовую работу
- •Содержание
- •Введение
- •Основная часть:
- •Краткие теоретические основы разрабатываемой темы
- •Разработка и описание алгоритма работы приложения
- •Описание структуры программы
- •Руководство пользователя
- •Результаты применения программы
- •Заключение
Описание структуры программы
Исходный код первого клиентского процесса.
#include <windows.h>
#include <stdio.h>
HANDLE hMs;
DWORD colors[3], written;
BYTE r[3], g[3], b[3];
int syselement[] = {COLOR_ACTIVEBORDER, COLOR_INACTIVECAPTION, COLOR_HIGHLIGHT};
char pwszKLID[KL_NAMELENGTH], str[]="";
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
for(int i=0; i < 3; i++)
{
colors[i] = GetSysColor(syselement[i]);
r[i] = GetRValue(colors[i]);
g[i] = GetRValue(colors[i]);
b[i] = GetRValue(colors[i]);
}
GetKeyboardLayoutName(pwszKLID);
sprintf(str,"Системные цвета:\nЦвет активной рамки окна: %x %x %x\nЦвет неактивного заголовка окна: %x %x %x\nЦвет выделения: %x %x %x\nКод раскладки клавиатуры: %d", r[0], g[0], b[0], r[1], g[1], b[1], r[2], g[2], b[2], atoi(pwszKLID));
hMs = CreateFile("\\\\.\\mailslot\\mtuci", GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
if(hMs == INVALID_HANDLE_VALUE)
return 0;
if(!WriteFile(hMs, str, strlen(str)+1, &written, NULL))
{
CloseHandle(hMs);
return 0;
}
MessageBox(NULL, str, "Процесс 1", MB_OK);
CloseHandle(hMs);
return 0;
}
Исходный код второго клиентского процесса.
#include <windows.h>
#include <stdio.h>
HANDLE hMs, Process;
DWORD ProcessID, written;
char str[]="";
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
ProcessID = GetCurrentProcessId();
Process = GetModuleHandle(NULL);
sprintf(str, "Идентификатор текущего процесса: %d\nДескриптор текущего процесса: %d", ProcessID, Process);
hMs = CreateFile("\\\\.\\mailslot\\mtuci", GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
if(hMs == INVALID_HANDLE_VALUE)
return 0;
if(!WriteFile(hMs, str, strlen(str)+1, &written, NULL))
{
CloseHandle(hMs);
return 0;
}
MessageBox(NULL, str, "Процесс 2", MB_OK);
return 0;
}
Исходный код серверного процесса.
#include <windows.h>
#include <stdio.h>
HINSTANCE hInst;
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain(HINSTANCE hInst,HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
HWND hwnd;
MSG msg;
char WinName[]="Mtuci";
WNDCLASS wc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hInstance = hInst;
wc.lpfnWndProc = WndProc;
wc.lpszClassName = WinName;
wc.lpszMenuName = NULL;
wc.style = CS_HREDRAW | CS_VREDRAW;
if(!RegisterClass(&wc))
return 0;
int x,y;
x = GetSystemMetrics(SM_CXSCREEN);
y = GetSystemMetrics(SM_CYSCREEN);
hwnd = CreateWindow(WinName,"Клиентское приложение 6 вариант",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,x/2,y/3,NULL,NULL,hInst,NULL);
if(!hwnd)
return 0;
ShowWindow(hwnd, nShowCmd);
UpdateWindow(hwnd);
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
{
RECT rt;
static HWND hSub;
STARTUPINFO si;
PROCESS_INFORMATION pi;
HANDLE hMs, event;
static DWORD ns, mc, nbr;
static int t;
static char srv[8];
static char buffer[400], buf[400];
switch(Msg)
{
case WM_CREATE:
GetClientRect(hWnd, &rt);
hSub = CreateWindow("static","",WS_CHILD|WS_VISIBLE,0,0,rt.right,(rt.bottom/2),hWnd,NULL,hInst,NULL);
CreateWindow("button","Запустить процесс 1",WS_CHILD|WS_VISIBLE,(rt.right-300)/3,rt.bottom/2,150,25,hWnd,(HMENU)1,hInst,NULL);
CreateWindow("button","Запустить процесс 2",WS_CHILD|WS_VISIBLE,((rt.right-300)/3)*2+150,rt.bottom/2,150,25,hWnd,(HMENU)2,hInst,NULL);
break;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case 1:
strcpy(srv, "srv1.exe");
break;
case 2:
strcpy(srv, "srv2.exe");
break;
}
ZeroMemory(&si, sizeof(si));
CreateProcess(srv, NULL, NULL, NULL, FALSE, NULL, NULL, NULL, &si, &pi);
hMs = CreateMailslot("\\\\.\\mailslot\\mtuci", 0, MAILSLOT_WAIT_FOREVER, NULL);
if(hMs == INVALID_HANDLE_VALUE)
return 0;
while(GetMailslotInfo(hMs, NULL, &ns, &mc, NULL))
{
if(mc != 0)
{
ReadFile(hMs, buffer, 400, &nbr, NULL);
CloseHandle(hMs);
}
}
SetWindowText(hSub, buffer);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, Msg, wParam, lParam);
}
return 0;
}