Haki

Zadanie 1

Utwórz program zakładający hak przechwytujący globalnie próbę zamknięcia dowolnego okna za pomocą skrótu klawiszowego Alt+F4.

Utwórz bibliotekę DLL eksportującą funkcje zakładające i zdejmujące hak typy WH_KEYBORD

Zaimplementuj procedurę haka wychwytującą wciśnięcie klawisza F4 (VK_F4) i jednoczesne wciśnięcie lewego klawisza Alt (29 bit argumentu lParam)

Utwórz program, który ładuje bibliotekę DLL i zakłada hak globalny.

Przydatne funkcje:

SetWindowsHookEx - instaluje hak

HHOOK SetWindowsHookEx(int idHook, HOOKPROC lpfn, HINSTANCE hMod, DWORD dwThreadId);

UnhookWindowsHookEx - usuwa hak

BOOLUnhookWindowsHookEx(HHOOK hhk);

KeyboardProc callback function

LRESULT KeyboardProc(int code, WPARAM wParam, LPARAM lParam);

CallNextHookEx - przesyła informacje do kolejnego haka w kolejce

LRESULT CallNextHookEx(HHOOK hhk, int nCode, WPARAM wParam, LPARAM lParam);

Zadanie 2

Utwórz program zakładający dwa haki pozwalające rejestrować i odtwarzać wykonane w systemie akcje.

Utwórz bibliotekę DLL eksportującą funkcje zakładające i zdejmujące hak typy WH_JOURNALRECORD. Procedura haka (JournalRecordProc) wraz z akcją HC_ACTION dostarcza strukturę EVENTMSG, którą procedura powinna zachować np. w kolekcji vector z STL.

Wyeksportuj z biblioteki funkcję zakładającą hak typu WH_JOURNALPLAYBACK. Procedura haka (JournalPlaybackProc) odtwarza akcje zapamiętane przez procedurę haka zapisującego. Dla akcji HC_GETNEXT należy podstawić zawartość odtwarzanej akcji do struktury EVENTMSG wskazywanej przez akgumrnt lParam a procedura powinna zwrócić odstęp czasu po jakim akcja ma być odtworzona.

Utwórz program, który ładuje bibliotekę DLL i uruchamia nagrywanie po wciśnięciu klawisza F11 zaś uruchamia odtwarzanie po wciśnięciu klawisza F12.

Przydatne funkcje:

GetTickCount ilość milisekund od startu systemu

DWORD WINAPI GetTickCount(void);