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

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

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

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

}

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