- •Федеральное агентство связи
- •Московский технический университет связи и информатики
- •Задание на курсовую работу
- •Содержание
- •Введение
- •Основная часть:
- •Краткие теоретические основы разрабатываемой темы
- •Разработка и описание алгоритма работы приложения
- •Описание структуры программы
- •Руководство пользователя
- •Результаты применения программы
- •Заключение
Описание структуры программы
Исходный код первого клиентского процесса.
#include <windows.h>
#include <stdio.h>
HANDLE f;
DWORD error, w;
void* lpBuffer;
char str[]="";
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
POINT pt;
error = GetLastError();
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, error, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpBuffer, 0, NULL);
GetCaretPos(&pt);
sprintf(str,"Код последней ошибки: %d = %sТекушее положение каретки: %d x %d", error, lpBuffer, pt.x, pt.y);
LocalFree(lpBuffer);
f = CreateFile("mtuci", GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
WriteFile(f, str, strlen(str), &w, NULL);
CloseHandle(f);
MessageBox(NULL, str, "Процесс 1", MB_OK);
return 0;
}
Исходный код второго клиентского процесса.
#include <windows.h>
#include <stdio.h>
HANDLE f;
DWORD IDprocess, w;
char lpFilename[MAX_PATH], str[]="";
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
GetModuleFileName(NULL, lpFilename, sizeof(lpFilename));
IDprocess = GetCurrentProcessId();
sprintf(str, "Полное имя модуля текущего процесса: %s\nИдентификатор серверного процесса: %d", lpFilename, IDprocess);
f = CreateFile("mtuci", GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
WriteFile(f, str, strlen(str), &w, NULL);
CloseHandle(f);
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,"Клиентское приложение 21 вариант",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 hFile;
static DWORD IDclient, written, num;
static char srv[8];
static char buffer[]="";
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;
}
IDclient = GetCurrentProcessId();
ZeroMemory(&si, sizeof(si));
CreateProcess(srv, NULL, NULL, NULL, FALSE, NULL, NULL, NULL, &si, &pi);
hFile = CreateFile("mtuci", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
num = GetFileSize(hFile, NULL);
ReadFile(hFile, buffer, num, &written, NULL);
CloseHandle(hFile);
//sprintf(buffer,"\nИдентификатор клиентского процесса: %d", IDclient);
SetWindowText(hSub, buffer);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, Msg, wParam, lParam);
}
return 0;
}