50130 (609944), страница 2

Файл №609944 50130 (Системное программирование в операционных системах) 2 страница50130 (609944) страница 22016-07-30СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 2)

// идентификатор класса кисти для фона окна. В данном // случае используется белый цвет фона.

wcl. lpszMenuName=”MENU”;

// указатель на строку, идентифицирующую ресурс главного // меню окна.

wcl. lpszClassName="Pass";

// имя класса окна

Третьим шагом является создание окна. Он состоит из регистрации класса окна, создания окна, показа и перерисовки окна. Регистрация класса окна выполняется функцией RegisterClass ():

if (! RegisterClass (&wcl)) return 0;

В качестве параметра функции используется указатель на заполненную структуру класса окна. В случае успешной регистрации функция возвращает ненулевой результат. В противном случае функция возвращает ноль и приложение необходимо завершить.

Создание окна выполняется функцией CreateWindow (), имеющей прототип

HWND CreateWindow (

LPCTSTR lpClassName, // адрес имени зарегистрированного класса

LPCTSTR lpWindowName, // адрес имени окна

DWORD dwStyle, // стиль окна, константы WS_xxxxxx

int x, // горизонтальная позиция окна

int y, // вертикальная позиция окна

int nWidth, // ширина окна

int nHeight, // высота окна

HWND hWndParent, // идентификатор "внешнего" окна

HMENU hMenu, // идентификатор меню окна

HANDLE hInstance, // идентификатор приложения

LPVOID lpParam // адрес дополнительных данных

);

Функция возвращает идентификатор открытого окна.

В данном случае в функцию WinMain можно добавить такую строку:

HWND hWnd = CreateWindow (wcl. lpszClassName, "Window", WS_OVERLAPPEDWINDOW, // окно с заголовком и бордюром CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, // положение и размер "по умолчанию" NULL, NULL, hInstance, NULL);

// нет "внешнего" окна (это главное окно программы),

// используется меню класса окна,

// идентификатор программы - второй параметр функции WinMain ()

// нет дополнительных данных.

Далее, для показа окна на экране, используется функция ShowWindow ():

ShowWindow (hWnd, nCmdShow);

Где первый параметр - идентификатор окна (которое должно быть уже зарегистрировано и открыто), а второй параметр - способ отображения окна. В качестве второго параметра используется способ отображения, переданный операционной системой функции WinMain (четвертый параметр).

И, наконец, для перерисовки окна используется функция UpdateWindow ():

UpdateWindow (hWnd);

В которую в качестве параметра передается идентификатор окна.

Четвертым шагом создания каркасного приложения будет создание цикла обработки сообщений:

MSG lpMsg;

while (GetMessage (&lpMsg, NULL, 0,0))

{

TranslateMessage (&lpMsg);

DispatchMessage (&lpMsg);

}

return lpMsg. wParam;

Функция GetMessage () выбирает сообщение из очереди сообщений и помещает его в структуру, адрес которой указан в качестве первого параметра. Функция работает только с сообщениями, адресованными данному приложению или его дочерним процессам. Данная функция возвращает 0, если было выбрано сообщение WM_QUIT и не ноль во всех остальных случаях. Таким образом, цикл обработки сообщений завершается после получения сообщения WM_QUIT. А затем завершается и сама функция WinMain ().

Минимальный цикл обработки сообщений должен состоять из вызова системной функции DispatchMessage (), которая передает сообщение оконной функции, связанной с данным окном. Перед вызовом функции DispatchMessage () сообщение может подвергаться обработке. Так, функция TranslateMessage преобразует сообщения от клавиатуры. В Windows от клавиатуры идут сообщения WM_KEYDOUN и WM_KEYUP, соответствующие нажатию и отпусканию клавиш. Эти сообщения содержат виртуальные коды клавиш. Функция TranslateMessage () преобразует эти сообщения в сообщения WM_CHAR, содержащие Пятым, и последним, шагом создания каркасного приложения является написание оконной функции. Она выглядит так:

LRESULT CALLBACK WindowProc (HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)

{

static HINSTANCE hInstance;

switch (message)

{

case WM_CREATE:

{

hInstance = ( (LPCREATESTRUCT) lParam) - >hInstance;

DialogBox (hInstance, IDD_DIAL,hWnd, MyDlgProc);

break;

}

case WM_DESTROY:

{

PostQuitMessage (0);

break;

}

default:

return DefWindowProc (hWnd, message, wParam, lParam);

}

return 0;

}

Оконная процедура получает сообщение и анализирует его. После анализа сообщение либо обрабатывается, либо передает сообщение процедуре обработки сообщений по умолчанию. Например оконная функция обрабатывает сообщение - WM_DESTROY. Это сообщение передается оконной функции при закрытии окна. Нормальной реакцией на такое сообщение является посылка сообщения WM_QUIT для завершения приложения. Это сообщение посылается путем вызова функции PostQuitMessage (). Параметром этой функции является код завершения программы.

Таким образом получено минимальное каркасное приложение Windows.

Создание меню.

Для добавления меню к программе необходимо создать соответствующий ресурс. Для создания ресурса меню в проекте необходимо воспользоваться пунктом меню "Insert - > Resourse - > Resurs Type: Menu - > New". При этом в окне редактора появится возможность в интерактивном режиме создать систему меню. Для редактирования свойств элементов меню можно использовать "View‑>Properties". Каждому пункту меню необходимо присвоить свой идентификатор. После завершения создания ресурса необходимо его сохранить. При этом автоматически будут созданы два файла - resource. h и script. rc (где script - имя файла ресурсаd). После этого необходимо файл ресурса script. rc включить в проект в папку Source Files, а в файл StdAfh. h включить строку #include "resource. h". После того, как файл ресурса будет включен в проект, в окне проекта станет, доступна закладка ResourceView. Используя эту закладку можно просмотреть древовидную структуру ресурсов проекта. В папке menu будут показаны идентификаторы ресурсов меню.

Для того чтобы созданное меню отображалось в окне программы его надо указать при инициализации структуры класса окна:

wcl. lpszMenuName=“MENU”;

где “MENU" - выбранный мною идентификатор меню. После компиляции такого проекта в окне программы будет отображаться меню.

Для того, чтобы назначить пунктам меню конкретные действия, необходимо включить их в обработку оконной функцией. Выбор пунктов меню с помощью мыши отслеживается автоматически операционной системой и формируются сообщения WM_COMMAND. В качестве параметра такого сообщения передается идентификатор выбранного пункта меню. Таким образом, в оконной функции необходимо перехватить сообщение типа WM_COMMAND и проверить его параметр. А далее, в зависимости от параметра, выполнить то или иное действие.

Следует отметить, что используемые переменные следует объявить вне тела оператора switch.

Вывод сообщений в отдельном окне.

Самым простым способом вывода сообщений в отдельном окне является использование функции MessageBox (). Эта функция имеет следующий формат:

int MessageBox (

HWND hWnd,

LPCTSTR lpText,

LPCTSTR lpCaption,

UINT uType);

Где параметры имеют следующее значение:

hWnd - идентификатор окна-владельца создаваемого окна с сообщением;

lpText - указатель на строку с сообщением, строка должна заканчиваться символом с кодом 0;

lpCaption - указатель на строку с заголовком окна, строка должна заканчиваться символом с кодом 0;

uType - тип окна с сообщением, может быть комбинацией различных констант.д.опустимы следующие константы в этом параметре:

MB_YESNO - окно будет иметь две кнопки: Yes и No.

MB_YESNOCANCEL - окно будет иметь три кнопки: Yes, No, и Cancel.

Функция возвращает ноль в случае нехватки памяти для открытия окна. При успешном завершении функции она возвращает одно из следующих значений:

IDABORT - выбрана кнопка Abort.

IDCANCEL - выбрана кнопка Cancel.

IDIGNORE - выбрана кнопка Ignore.

IDNO - выбрана кнопка No.

IDOK - выбрана кнопка OK.

IDRETRY - выбрана кнопка Retry.

IDYES - выбрана кнопка Yes.

Если окно содержит кнопку Cancel, то функция возвращает значение IDCANCEL в случае нажатия клавиши ESC или выбора кнопки Cancel. Если кнопка Cancel отсутствует, то нажатие клавиши ESC не имеет эффекта.

На этом создание программы на языке Си закончилось.

Создание процесса.

"Процесс - это выполняющееся приложение, которое состоит из личного виртуального адресного пространства, кода, данных и других ресурсов операционной системы, таких как файлы, пайпы и синхронизационные объекты, видимые для процесса."

У процесса есть несколько объектов: адресное пространство, выполняемый модуль (модули) и все, что эти модули создают или открывают. Как минимум, процесс должен состоять из выполняющегося модуля, личного адресного пространства и ветви. У каждого процесса по крайней мере одна ветвь. Что такое ветвь? Фактически, ветвь - это выполняющаяся очередь. Когда Windows впервые создает процесс, она делает только одну ветвь на процесс. Эта ветвь обычно начинает выполнение с первой инструкции в модуле. Если в дальнейшем понадобится больше ветвей, он может сам создать их.

Когда Windows получает команду для создания процесса, она создает личное адресное пространство для процесса, а затем она загружает исполняемый файл в пространство. После этого она создает основную ветвь для процесса.

Под Win32 можно создать процессы из своих программ с помощью функции Createprocess. Она имеет следующих синтаксис:

BOOL CreateProcess (

LPCTSTR lpszApplicationName.

LPCTSTR IpszCommandLine,

LPSECURITYJUTRIBUTES ipsaProcess.

LPSECURITY_ATTRIBUTES lpsaThread,

BOOL flnhentHandles,

DWORD fdwCreate,

LPVOID ipvEnvironment.

LPTSTR lpszCurDir,

LPSTARTUPINFO ipsiStartlnfo,

LPPROCESS_INFORMATION lppiProcInfo):

Когда поток в приложении вызывает CreateProcess, система создает объект ядра "процесс" с начальным значением счетчика числа его пользователей, равным 1. Этот объект - не сам процесс, а компактная структура данных, через которую операционная система управляет процессом. (Объект ядра "процесс" следует рассматривать как структуру данных со статистической информацией о процессе) Затем система создает для нового процесса виртуальное адресное пространство размером 4 Гб и загружает в него код и данные как для исполняемого файла, так и для любых DLL (если таковые требуются).

Далее система формирует объект ядра "поток" (со счетчиком, равным 1) для первичного потока нового процесса. Как и в первом случае, объект ядра "поток" - это компактная структура данных, через которую система управляет потоком. Первичный поток начнет с исполнения стартового кода из стандартной библиотеки С, который - как всегда - вызовет функцию WinMain. Если системе удастся создать новый процесс и его первичный поток, CreateProcess вернет TRUE.

На этом программирование закончилось.


4. Руководство пользователя

Для начала работы с программой необходимо записать файл с расписанием следующего формата "C: /totalcmd/TOTALCMD. EXE" 00: 00: 00

Далее необходимо запустить файл с названием OSkurs. После запуска появится окно которое представлено на рис.10.

Рисунок 2.

Далее необходимо ввести в окошко полное имя файла в котором находится расписание и нажать на клавишу “Установить расписание”. После чего будет происходить запуск программ по расписанию. Если имя не будет указано, то появится окошко:

Рисунок 3.

Если данного файла не существует или имя указано не верно то выдаётся сообщение.

Рисунок 4

Если файл с расписанием записан не верно, то выдаётся сообщение:

Рисунок 5

Если имя программы указано с ошибкой или его не существует, то выдаётся сообщение и два варианта продолжения работы программы:

Рисунок 6.

После успешного окончания работы программы выдаётся сообщение:

Рисунок 7.

Для завершения расписания необходимо нажать на клавишу “Остановить работу". Для выхода из программы необходимо нажать на клавишу “Выход” или нажав на “крестик".


Заключение

В процессе выполнения курсового проекта была разработана программа, выполняющая запуск программ по расписанию, расписание хранится в файле. Программа была написана при помощи интегрированной среды разработки Visual C++. Программа соответствует всем функциональным требованиям, заданным на курсовое проектирование. Взаимодействие с пользователем осуществляется с помощью графического интерфейса.

Таким образом, задание на курсовое проектирование было полностью выполнено.


Список использованных источников

1. Келецкий Я. Энциклопедия языка Си/ Пер. с англ. - М.: Мир, 1992. - 687с.

Характеристики

Тип файла
Документ
Размер
5,21 Mb
Тип материала
Учебное заведение
Неизвестно

Список файлов курсовой работы

Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6510
Авторов
на СтудИзбе
302
Средний доход
с одного платного файла
Обучение Подробнее