Добавил:
piter-i.narod.ru Программист ПЛИС Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
laba21.docx
Скачиваний:
11
Добавлен:
24.06.2018
Размер:
41.3 Кб
Скачать

Описание структуры программы

Исходный код первого клиентского процесса.

#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;

}

Соседние файлы в предмете Операционные системы