
Міністерство науки і освіти,молоді та спорту України
ДВНЗ “Донецький національний технічний університет”
Кафедра асу
Звіт
З лабораторної роботи № 6
з дисципліни ”Системне програмування”
Варіант № 7
Виконав:
студент гр.КСД-09
Збиковський О.Є.
Перевірили:
Омельченко А.А.
Васяєва Т.О.
Донецьк, 2011
Лабораторная работа №6
Управление процессами в Win32
Цель работы: изучить возможности создания программных комплексов из автономных программ и основные способы обмена данными между процессами в Win32.
Ход работы:
Написать программу, которая позволяет управлять курсором одного приложения клавиатурой другого приложения.
Сервер:
#include <windows.h>
#include <windowsx.h>
#include <commdlg.h>
#include <stdio.h>
#include <string.h>
#include "resource1.h"
#define ID_BUTTON2 5000
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
HINSTANCE hIns;
HWND hDlg = NULL;
DWORD WINAPI Thread(LPVOID);
HWND hwnd;
HWND label;
void OnTimer(HWND,UINT);
BOOL CALLBACK DlgProc(HWND, UINT, WPARAM, LPARAM);
char sec[20]="1";
HWND hmsg;
int i=0;
HANDLE hFile1;
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nCmdShow)
{
WNDCLASS wc;
MSG msg;
char ClassName[]="First Window";
DWORD ThreadId;
char Title[]="Window";
memset (&wc,0,sizeof(wc));
hIns = hInst;
wc.lpfnWndProc=(WNDPROC)WndProc;
wc.hInstance=hInst;
wc.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wc.hCursor=LoadCursor(NULL,IDC_HAND);
wc.lpszClassName=ClassName;
wc.hbrBackground=GetStockBrush(LTGRAY_BRUSH);
wc.lpszMenuName = "MENU1";
RegisterClass(&wc);
hwnd=CreateWindow(ClassName,Title, WS_OVERLAPPEDWINDOW,150,150,500,500,HWND_DESKTOP,NULL,hInst,NULL);
HWND button2=CreateWindow("button","Выход",WS_VISIBLE|WS_CHILD,300,20,200,25,hwnd,(HMENU)ID_BUTTON2,hInst,NULL);
label=CreateWindow("static","",WS_CHILD | WS_VISIBLE | WS_TABSTOP,600, 20, 230, 20,hwnd, (HMENU)(501),(HINSTANCE) GetWindowLong (hwnd, GWL_HINSTANCE), NULL);
ShowWindow(hwnd, SW_SHOWMAXIMIZED);
SetTimer(hwnd,1,1000,NULL);
CreateThread(NULL,NULL, Thread,NULL,NULL,&ThreadId);
while(GetMessage(&msg,NULL,0,0))
DispatchMessage(&msg);
return 0;
}
LRESULT CALLBACK WndProc(HWND hwnd,UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg){
HANDLE_MSG(hwnd,WM_TIMER,OnTimer);
case WM_COMMAND:
//Диалог
if(wParam==ID_40001){
DialogBox(hIns, MAKEINTRESOURCE(IDD_DIALOG5), hwnd, DlgProc);
break;
}
//Выход
if(wParam==ID_BUTTON2){
PostQuitMessage(0);
}
//Выход
if(wParam==ID_40004)
{
PostQuitMessage(0);
}
//Процесс
if(wParam==ID_40012)
{
STARTUPINFO si;
PROCESS_INFORMATION pi;
//обнуляем память
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
//обнуляем память
ZeroMemory( &pi, sizeof(pi) );
if( !CreateProcess( NULL, "notepad.exe D:\\Zbikovskyy\\server.txt", NULL, NULL, FALSE,0, NULL, NULL, &si, &pi));
//закрываем процесс и поток
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
}
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
default:
return DefWindowProcW(hwnd,msg,wParam,lParam);
}
}
////Таймер////