Поглибити і закріпити знання з архітектури МП платформи х86 і навички його програмування

Лабораторна робота №16: “Реєстр”

 

Мета заняття:

– поглибити і закріпити знання з архітектури МП платформи х86 і навички його програмування;

– набути практичних навичоккерування реєстром з використанням АРІ-функцій під Win32.

Постановка задачі

Завдання 1

1. Контекстне меню панелі завдань, меню папок і файлів. (Вітка HKCU SoftwareMicrosoftWindowsCurrentVersionPoliciesExplоrer HKCR*… 2. Діалогове вікно відкриття і збереження файла. (Вітка HKCU… 3. Диспетчер завдань Windows XP і “синій екран смерті” Windows XP. (Вітка…

Invoke LoadIcon,hInstance,IDI_ICON ; відображається особиста іконка

mov wc.hIcon,eax ; дескриптор піктограми

mov wc.hIconSm,eax

Invoke LoadCursor,0,IDC_ARROW ; курсор - cтандартна стрілка

invoke RegisterClassEx,addr wc ; регістрація класу вікна invoke CreateWindowEx, ; функція створення вікна за зразком NULL,ADDR ClassName, ; стиль та адреса імені класу

ENDIF

.ELSEIF ax==IDM_ABOUT ; якщо вибрана кнопка "Справка"

mov params.cbSize,SIZEOF MSGBOXPARAMS ; розмір структури

mov params.hwndOwner, 0 ; дескриптор вікна власника

invoke GetModuleHandle, 0 ; отримання дескриптора програми

mov params.hInstance, eax ; збереження дескриптора програми

mov params.lpszText, offset Msg ; адреса повідомлення

mov params.lpszCaption,offset Titl ; адреса заголовку вікна

mov params.dwStyle, MB_USERICON ; стиль вікна

mov params.lpszIcon, IDI_ICON ; ресурс значка

mov params.dwContextHelpId, 0 ; контекст довідки

mov params.lpfnMsgBoxCallback, 0 ;

mov params.dwLanguageId, LANG_NEUTRAL ; мова повідомлення

invoke MessageBoxIndirect, ADDR params ;

.ELSEIF ax==IDM_EXIT ; якщо вибрана кнопка "Выход"

invoke DestroyWindow,hWnd ; знищення вікна

.ELSE

.ENDIF

.ELSE

invoke DefWindowProc,hWnd,uMsg,wParam,lParam ; знищення вікна

; (обов'язкове)

ret ; повернення з процедури

.ENDIF

xor eax,eax ; підготування до закінчення

ret ; повернення з процедури

WndProc endp ; закінчення процедури WndProc

end _st ; закінчення програми з ім’ям _st

 

В програмі для створення ключа використовується функціїя RegCreateKeyEx. Ця функція після створення повертає значення ERROR_SUCCESS (ключ створено успішно?). Після перевірки цього значення викликається функція RegSetValueEx – встановлення значення для вказаного ключа та конкретизуються ці значення. Функція RegCloseKey – ідентифікація відкритого ключа – завершує процес створення ключа.

У вітки обробки повідомлення про закриття ключа .ELSEIF ax==IDM_DELETEKEYтеж оброблюється значення ERROR_SUCCESS.

В програмі для виведення довідки про автора використовується функція MessageBoxIndirect теж зі своєю іконкою.

Зовнішній вигляд програми наведено на рис. 29.3

 

Вигляд програми до створення ключа наведено на рис. 29.4.

 

 
 
Рис. 29.4. Вигляд реєстру до внесених змін


Вигляд програми після створення ключа наведено на рис. 29.5.

 
 
Рис. 29.5. Вигляд реєстру до внесених змін


Спрощене вікно довідки про автора програми, яке формується функцією MessageBoxIndirect наведено на рис. 29.6.

 
 
Рис. 29.6. Вигляд Спрощене вікно довідки про автора програми


Завдання 2

Написати програму збереження даних в реєстрі та їх подальшого використання в програмі.

 

 

Література: Рисований О.М. Системне програмування [Текст]: підручник для студентів напрямку “Компютерна інженерія” вищих навчальних закладів. Видання друге: виправлено та доповнено – Х.: “Слово”, 2011. – 944 с.